我有一个当前工作表,当某个范围的值发生更改时,需要从另一个工作表中获取值。 此外,我需要观察某个单元格值来执行另一个操作,在这种情况下,显示一个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
答案 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
进行比较。