簡體   English   中英

如何在選擇案例語句中包括多個列

[英]How to include multiple columns in a select case statement

我已經在組合框中使用了select case語句。 請參考下面的代碼。 但是,在提供的示例中,一次只能嘗試幾個示例,但一次只能使用一個列。 最終結果將是如果使用列“ C”和“ S”選擇了“當前月份”。

嘗試1:

nExtend = 1 'Set this as a default.
Select Case MonthComboBox.value
    **Case "Current Month"
        iCol = "C"
    Case "Current Month"
        iCol = "S"**
    Case "Current Month +1"
        iCol = "N"
        nExtend = 5
    Case "Current Month +2"
        iCol = "O"
        nExtend = 4
    Case "Current Month +3"
        iCol = "P"
        nExtend = 3
    Case "Current Month +4"
        iCol = "Q"
        nExtend = 2
End Select

嘗試2:

nExtend = 1 'Set this as a default.
Select Case MonthComboBox.value
    ****Case "Current Month"
        iCol = "C" & "S"**
    Case "Current Month +1"
        iCol = "N"
        nExtend = 5
    Case "Current Month +2"
        iCol = "O"
        nExtend = 4
    Case "Current Month +3"
        iCol = "P"
        nExtend = 3
    Case "Current Month +4"
        iCol = "Q"
        nExtend = 2
End Select

實際代碼:

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
    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)
            cel.Interior.ColorIndex = 6
        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
        For Each cel In .Cells(irow, iCol).Resize(, nExtend)
            cel.value = cel.value + CLng(Me.AddTextBox.value)
            cel.Interior.ColorIndex = 6
        Next cel
    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

我建議您按以下方式更改Select Case語句:

Select Case MonthComboBox.value
    Case "Current Month"
        iCol = "C:C,S:S"
    Case "Current Month +1"
        iCol = "N:R"
    Case "Current Month +2"
        iCol = "O:R"
    Case "Current Month +3"
        iCol = "P:R"
    Case "Current Month +4"
        iCol = "Q:R"
End Select

(您不需要nExtend它內置在您在iCol設置的列規范中。)

然后可以將您的For Each cel循環都更改為

For Each cel In Intersect(.Rows(irow), .Range(iCol))

您完整的修訂代碼如下:

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
    Dim ws_warehouse(7) As Worksheet    '7 is total warehouse tab you have
    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

    Select Case MonthComboBox.value
        Case "Current Month"
            iCol = "C:C,S:S"
        Case "Current Month +1"
            iCol = "N:R"
        Case "Current Month +2"
            iCol = "O:R"
        Case "Current Month +3"
            iCol = "P:R"
        Case "Current Month +4"
            iCol = "Q:R"
    End Select

    actWarehouse = Me.warehousecombobox.ListIndex + 1

    With ws
        .Cells(irow, "A").value = Me.PartTextBox.value


        For Each cel In Intersect(.Rows(irow), .Range(iCol))
            cel.value = cel.value + CLng(Me.AddTextbox.value)
            cel.Interior.ColorIndex = 6
        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
        For Each cel In Intersect(.Rows(irow), .Range(iCol))
            cel.value = cel.value + CLng(Me.AddTextbox.value)
            cel.Interior.ColorIndex = 6
        Next cel
    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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM