在Worksheet_Change中将Select Case组合为Cell和Range

时间:2018-03-28 10:29:11

标签: vba excel-vba excel

我有一个当前工作表,当某个范围的值发生更改时,需要从另一个工作表中获取值。 此外,我需要观察某个单元格值来执行另一个操作,在这种情况下,显示一个Msgbox。

我正在使用.. code-block:: html <span class="keys">FM</span> 事件,但是当我指定Worksheet_Change(ByVal Target As Range)Select Case "$G$6"并尝试Case "$G$24:$H$54"但不起作用时,整个代码都不起作用。

Case Else

1 个答案:

答案 0 :(得分:1)

这是一个可能的解决方案:

Private Sub Worksheet_Change(ByVal Target As Range)

    Application.ScreenUpdating = False
    Application.EnableEvents = False

    Select Case True

    Case Not Intersect(Target, Range("G6")) Is Nothing
        If InStr(1, Range("G6"), "PUMP") > 0 Then
            MsgBox ("Pump")
        ElseIf InStr(1, Range("G6"), "SKID") > 0 Then
            MsgBox ("Skid")
        End If

    Case Not Intersect(Target, Range("G24:H54")) Is Nothing
        If InStr(1, Range("G24"), "Calculate") > 0 _
                    And InStr(1, Range("G25"), "Outside Shelter") > 0 Then
            Cells(19, 8).Value = Sheets("1").Cells(159, 6).Value
            Cells(20, 9).Value = Sheets("1").Cells(163, 6).Value
            Cells(19, 11).Value = Sheets("1").Cells(160, 6).Value
            Cells(20, 10).Value = Sheets("1").Cells(164, 6).Value
        ElseIf InStr(1, Range("G24"), "Calculate") > 0 _
                    And InStr(1, Range("G25"), "Inside Shelter") > 0 Then
            Cells(19, 8).Value = Sheets("1").Cells(182, 6).Value
            Cells(20, 9).Value = Sheets("1").Cells(187, 6).Value
            Cells(19, 11).Value = Sheets("1").Cells(183, 6).Value
            Cells(20, 10).Value = Sheets("1").Cells(188, 6).Value
        End If

    End Select

    Application.EnableEvents = True
    Application.ScreenUpdating = True

End Sub

这个想法是使用Select Case True,它会选择Not Intersect(Range1, Range2) Is Nothing。一般而言,最好使用Range("G6")并将其与Target进行比较,而不是与$G$6进行比较,并将其与Target.Address进行比较。