2016-04-15 3 views
0

Я создал поле со списком, которое имеет разные случаи, как показано ниже. Текущая формула работает, за исключением того, что я хотел бы добавить дополнительный столбец, который повторяет то же значение, что и столбцы C, и хочет добавить его в колонку R.Добавить значение из combobox на несколько столбцов

Ex. ComboBox Выберите текущий месяц Я хочу добавить 500 единиц в столбцы C и столбцы R на основе той части, которую искали.

Private Sub cmdAdd_Click() 

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 
Set ws = Worksheets("Summary") 

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" And "R" 

    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 
value = Cells(irow, iCol).value 
With ws 


    .Cells(irow, iCol).value = value + CLng(Me.AddTextBox.value) 


End With 

If NewPart = True Then 
    ws.Cells(irow, "A").value = Me.PartTextBox.value 
End If 


If NewPart = True Then 
ws.Cells(irow, "C").value = Me.AddTextBox.value 
End If 

ответ

1

Я могу порекомендовать использовать Array для хранения столбцов.

Sub t() 
Dim iCol() 
Dim testStr$, myValue$ 
Dim iRow& 
Dim ws As Worksheet 
testStr = "Current Month" 

Select Case testStr 
    Case "Current Month" 
     iCol() = Array("C", "R") 
    Case "Current Month +1" 
     iCol() = Array("N") 
    End Select 

Dim i& 
For i = LBound(iCol) To UBound(iCol) 
    myValue = Cells(iRow, iCol(i)).value ' WHAT SHEET IS THIS ON?? 
    With ws 
     .Cells(iRow, iCol(i)).value = myValue + CLng(Me.AddTextbox.value) 
    End With 
Next i 

End Sub 

При необходимости вы можете добавить к Case. Обратите внимание, что после завершения работы с столбцом вам необходимо обернуть Next i, чтобы он мог видеть, есть ли второй, который будет работать.

Кроме того, поскольку вы не указали весь код, вам может потребоваться настроить диапазоны. (примечание: myValue не имеет листа, указанного для использования Cells()).

+0

Я приложил полный код – Luis

+0

@ Luis - я бы обновил ваш код, чтобы включить массив, как в моем примере. Просто добавьте 'Next i' после' End With', который завершает инструкцию 'With ws'. Или, после разделов 'If NewPart', если каждый столбец повлияет на это. Имеет ли это смысл? – BruceWayne

Смежные вопросы