我共有两个宏,一个宏分配给我的Private Worksheet_Change event
,另一个宏分配给我的Private Worksheet_SelectionChange
事件,如下所示:
宏1
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'If Hours Column Selected
If Not Intersect(Target, Range("Z" & ActiveCell.Row)) Is Nothing And Range("Z" & ActiveCell.Row).Value <> "" Then
NewValue = Application.InputBox("Please Enter Your Delegated Reference:")
If NewValue <> vbNullString Then
Dim rw2 As Long, cell2 As Range
rw2 = ActiveCell.Row
With Worksheets("Data").Columns("I:I")
Set cell2 = .find(What:=NewValue, LookIn:=xlFormulas, _
LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
If Not cell2 Is Nothing Then
Application.DisplayAlerts = False
cell2.Offset(0, 4).Value = Sheet1.Range("Y" & ActiveCell.Row).Value
cell2.Offset(0, 5).Value = Sheet1.Range("H" & ActiveCell.Row).Value
cell2.Offset(0, 6).Value = Sheet1.Range("I" & ActiveCell.Row).Value
MsgBox "Found"
Sheet1.Range("Y" & ActiveCell.Row).Value = cell2.Offset(0, 1).Value
Sheet1.Range("H" & ActiveCell.Row).Value = cell2.Offset(0, 2).Value
Sheet1.Range("I" & ActiveCell.Row).Value = cell2.Offset(0, 3).Value
Application.DisplayAlerts = True
Else
MsgBox "Not Found"
Sheet1.Range("A5").Select
End If
End With
Else
If NewValue = vbNullString Then
MsgBox "Not Found"
Sheet1.Range("A5").Select
End If
End If
End If
End Sub
宏2
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("Y" & ActiveCell.Row)) Is Nothing Then
myValue3 = MsgBox("This is a message")
End If
End Sub
我遇到的问题是当我点击ZI列中的活动单元格行时,我正在运行宏1并要求它更新列Y中活动单元格行的值。但是当更新Y列中的信息时,它导致宏2运行我显示的msgbox,我不希望这种情况发生。
虽然我仍然需要宏2并且想要显示msgbox,但我只想在单击Y列中的单元格时显示它。所以换句话说,我希望能够取消宏2如果宏1正在运行。
我尝试在宏1中使用application.displayevents = false
,但这不起作用。
有人可以告诉我最好的方法吗?
答案 0 :(得分:1)
你可以使用
Application.EnableEvents = False
..在你的macro1开始时禁用事件和
Application.EnableEvents = True
在macro1结束时再次打开它。
答案 1 :(得分:0)
请尝试以下方法:
[1]将新模块添加到您的VBA项目中,其中包含以下内容:
Public EventRunning as Boolean
[2]修改Worksheet_SelectionChange宏,如下所示:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
EventRunning=True
...
EventRunning=False
End Sub
[3]修改您的Worksheet_Change,如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
If EventRunning Then Exit Sub
...
祝福本