Reputation: 139
Hey guys this one is a complicated one. I have created a userform that will add a value from a user to a certain column (THIS IS CURRENT CODE). However instead of just adding it to that column I want it to add it to the subsequent columns. For example if I were to select current +1 and value=500 I want that value to add it to column N and subsequent "O", "P" "Q". I thought it would be easy as adding it to the case but it's not that easy
Case "Current Month +1"
iCol = "N" and "O" and "P" and "Q"
Case "Current Month +2"
iCol = "O" and "P" and "Q"
****It's not this easy
Private Sub cmdAdd_Click()
If TrialVersion Then Exit Sub
Dim irow As Long
Dim lastRow As Long
Dim iCol As String
Dim c As Range
Dim ws As Worksheet
Dim value As Long
Dim NewPart As Boolean
Dim ws_warehouse(7) As Worksheet '7 is total warehouse tab you have
Set ws = Worksheets("Main")
Set ws_warehouse(1) = Worksheets("Elkhart East")
Set ws_warehouse(2) = Worksheets("Tennessee")
Set ws_warehouse(3) = Worksheets("Alabama")
Set ws_warehouse(4) = Worksheets("North Carolina")
Set ws_warehouse(5) = Worksheets("Pennsylvania")
Set ws_warehouse(6) = Worksheets("Texas")
Set ws_warehouse(7) = Worksheets("West Coast")
Set c = ws.Range("A7:A1048576").Find(What:=Me.PartTextBox.value, SearchOrder:=xlRows, _
SearchDirection:=xlPrevious, LookIn:=xlValues, LookAt:=xlWhole)
If c Is Nothing Then
'find first empty row in database
lastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
irow = lastRow + 1
NewPart = True
Else
'find row where the part is
irow = ws.Cells.Find(What:=Me.PartTextBox.value, SearchOrder:=xlRows, _
SearchDirection:=xlPrevious, LookIn:=xlValues).Row
NewPart = False
End If
'check for a part number
If Trim(Me.PartTextBox.value) = "" Then
Me.PartTextBox.SetFocus
MsgBox "Please Enter A Part Number"
Exit Sub
End If
If Trim(Me.MonthComboBox.value) = "" Then
Me.MonthComboBox.SetFocus
MsgBox "Please Enter A Month"
Exit Sub
End If
If Trim(Me.AddTextBox.value) = "" Then
Me.AddTextBox.SetFocus
MsgBox "Please Enter A Value To Add Or Substract"
Exit Sub
End If
Select Case MonthComboBox.value
Case "Current Month"
iCol = "C"
Case "Current Month +1"
iCol = "N"
Case "Current Month +2"
iCol = "O"
Case "Current Month +3"
iCol = "P"
Case "Current Month +4"
iCol = "Q"
End Select
actWarehouse = Me.warehousecombobox.ListIndex + 1
With ws
.Cells(irow, "A").value = Me.PartTextBox.value
.Cells(irow, iCol).value = .Cells(irow, iCol).value + CLng(Me.AddTextBox.value)
End With
With ws_warehouse(actWarehouse)
'find part number
l_row = .Range("A" & .Rows.Count).End(xlUp).Row
NewPart = True
For r = 7 To l_row
If Trim(.Range("A" & r)) = "" Then Exit For
If LCase(.Range("A" & r)) = LCase(Me.PartTextBox.Text) Then
irow = r
Exit For
NewPart = False
End If
Next r
If NewPart Then irow = r
.Cells(irow, "A").value = Me.PartTextBox.value
.Cells(irow, iCol).value = .Cells(irow, iCol).value + CLng(Me.AddTextBox.value)
End With
'clear the data
Me.PartTextBox.value = ""
Me.MonthComboBox.value = ""
Me.AddTextBox.value = ""
Me.PartTextBox.SetFocus
Me.warehousecombobox.value = ""
End Sub
Private Sub cmdClose_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
'Empty NameTextBox
PartTextBox.value = ""
'Empty PhoneTextBox
AddTextBox.value = ""
'Empty DinnerComboBox
'Fill DinnerComboBox
With MonthComboBox
.AddItem "Current Month"
.AddItem "Current Month +1"
.AddItem "Current Month +2"
.AddItem "Current Month +3"
.AddItem "Current Month +4"
End With
With warehousecombobox
.AddItem "Elkhart East"
.AddItem "Tennessee"
.AddItem "Alabama"
.AddItem "North Carolina"
.AddItem "Pennsylvania"
.AddItem "Texas"
.AddItem "West Coast"
End With
End Sub
Upvotes: 0
Views: 371
Reputation: 5770
Private Sub cmdAdd_Click()
If TrialVersion Then Exit Sub
Dim irow As Long
Dim lastRow As Long
Dim iCol As String
Dim c As Range
Dim ws As Worksheet
Dim value As Long
Dim NewPart As Boolean
Dim ws_warehouse(7) As Worksheet '7 is total warehouse tab you have
Dim nExtend As Integer
Dim cel As Range
Set ws = Worksheets("Main")
Set ws_warehouse(1) = Worksheets("Elkhart East")
Set ws_warehouse(2) = Worksheets("Tennessee")
Set ws_warehouse(3) = Worksheets("Alabama")
Set ws_warehouse(4) = Worksheets("North Carolina")
Set ws_warehouse(5) = Worksheets("Pennsylvania")
Set ws_warehouse(6) = Worksheets("Texas")
Set ws_warehouse(7) = Worksheets("West Coast")
Set c = ws.Range("A7:A1048576").Find(What:=Me.PartTextBox.value, SearchOrder:=xlRows, _
SearchDirection:=xlPrevious, LookIn:=xlValues, LookAt:=xlWhole)
If c Is Nothing Then
'find first empty row in database
lastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
irow = lastRow + 1
NewPart = True
Else
'find row where the part is
irow = ws.Cells.Find(What:=Me.PartTextBox.value, SearchOrder:=xlRows, _
SearchDirection:=xlPrevious, LookIn:=xlValues).Row
NewPart = False
End If
'check for a part number
If Trim(Me.PartTextBox.value) = "" Then
Me.PartTextBox.SetFocus
MsgBox "Please Enter A Part Number"
Exit Sub
End If
If Trim(Me.MonthComboBox.value) = "" Then
Me.MonthComboBox.SetFocus
MsgBox "Please Enter A Month"
Exit Sub
End If
If Trim(Me.AddTextbox.value) = "" Then
Me.AddTextbox.SetFocus
MsgBox "Please Enter A Value To Add Or Substract"
Exit Sub
End If
nExtend = 1 'Set this as a default.
Select Case MonthComboBox.value
Case "Current Month"
iCol = "C"
Case "Current Month +1"
iCol = "N"
nExtend = 4
Case "Current Month +2"
iCol = "O"
nExtend = 3
Case "Current Month +3"
iCol = "P"
nExtend = 2
Case "Current Month +4"
iCol = "Q"
End Select
actWarehouse = Me.warehousecombobox.ListIndex + 1
With ws
.Cells(irow, "A").value = Me.PartTextBox.value
For Each cel In .Cells(irow, iCol).Resize(, nExtend)
cel.value = cel.value + CLng(Me.AddTextbox.value)
Next cel
End With
With ws_warehouse(actWarehouse)
'find part number
l_row = .Range("A" & .Rows.Count).End(xlUp).Row
NewPart = True
For r = 7 To l_row
If Trim(.Range("A" & r)) = "" Then Exit For
If LCase(.Range("A" & r)) = LCase(Me.PartTextBox.Text) Then
irow = r
Exit For
NewPart = False
End If
Next r
If NewPart Then irow = r
.Cells(irow, "A").value = Me.PartTextBox.value
.Cells(irow, iCol).value = .Cells(irow, iCol).value + CLng(Me.AddTextbox.value)
End With
'clear the data
Me.PartTextBox.value = ""
Me.MonthComboBox.value = ""
Me.AddTextbox.value = ""
Me.PartTextBox.SetFocus
Me.warehousecombobox.value = ""
End Sub
Private Sub cmdClose_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
'Empty NameTextBox
PartTextBox.value = ""
'Empty PhoneTextBox
AddTextbox.value = ""
'Empty DinnerComboBox
'Fill DinnerComboBox
With MonthComboBox
.AddItem "Current Month"
.AddItem "Current Month +1"
.AddItem "Current Month +2"
.AddItem "Current Month +3"
.AddItem "Current Month +4"
End With
With warehousecombobox
.AddItem "Elkhart East"
.AddItem "Tennessee"
.AddItem "Alabama"
.AddItem "North Carolina"
.AddItem "Pennsylvania"
.AddItem "Texas"
.AddItem "West Coast"
End With
End Sub
If the columns are always consecutive, maybe you can add a second integer
variable that tells the code how many columns to include. As an example, in your post, you show that Current Month + 1
starts at Column N
and extends 3 columns to the right (O, P, Q). Your code could look something like:
Select Case MonthComboBox.value
Case "Current Month + 1"
iCol = "C"
nExtend = 4
Then when you handle the values, the code would look something like:
.Cells(irow, iCol).Resize(,nExtend).value = .Cells(irow, iCol).value + CLng(Me.AddTextBox.value)
Note: Even though you are technically extending 3 columns, the input to the Resize
function is 4. Also note the leading comma because we are not changing the row resize.
Use a loop to change each value in the range, such as below:
Select Case MonthComboBox.value
Case "Current Month + 1"
iCol = "C"
nExtend = 4
For Each cel in .Cells(irow, iCol).Resize(,nExtend)
cel.Value = cel.Value + CLng(Me.AddTextBox.Value)
Next cel
Upvotes: 1