Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如果宏2正在运行,则取消宏1_Excel_Vba - Fatal编程技术网

Excel 如果宏2正在运行,则取消宏1

Excel 如果宏2正在运行,则取消宏1,excel,vba,Excel,Vba,我总共有两个宏,一个宏分配给我的专用工作表\u更改事件,另一个分配给我的专用工作表\u选择更改事件,如下所示: 宏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.Ro

我总共有两个宏,一个宏分配给我的
专用工作表\u更改事件
,另一个分配给我的
专用工作表\u选择更改
事件,如下所示:

宏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
我遇到的问题是,当我单击Z列中的活动单元格行时,我正在运行宏1,并要求它更新Y列中活动单元格行的值。但是,当Y列中的信息更新时,它会导致宏2运行,此时我会看到一个msgbox显示,我不希望发生这种情况

虽然我仍然需要宏2,并且确实希望显示msgbox,但我只希望在单击Y列中的单元格时显示它。因此,换句话说,如果宏1正在运行,我希望能够取消宏2

我曾尝试在宏1中使用
application.displayevents=false
,但这不起作用

有人能告诉我最好的方法吗?

你可以用

Application.EnableEvents = False
。。在宏1开始时,禁用事件和

Application.EnableEvents = True

要在macro1结束时再次打开它,请尝试以下操作:

[1] 将新模块添加到VBA项目中,如下所示:

Public EventRunning as Boolean
[2] 修改工作表\u选择更改宏,如下所示:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
    EventRunning=True
    ...
    EventRunning=False
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)  
    If EventRunning Then Exit Sub
    ...
[3] 修改工作表\u更改如下:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
    EventRunning=True
    ...
    EventRunning=False
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)  
    If EventRunning Then Exit Sub
    ...

最美好的祝愿本

谢谢你的建议。但是,我也尝试了这一点,但是我的宏1没有更新单元格,因为启用事件为false:/如果在宏1中关闭/打开它,应该可以工作。这不会导致macro1本身无法触发。既然您提到了
DisplayEvents
,您确定使用了
EnableEvents