首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果宏2正在运行,则取消宏1

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

Stack Overflow用户
提问于 2015-10-05 19:05:10
回答 2查看 92关注 0票数 1

我总共有两个宏,一个宏分配给我的Private Worksheet_Change event,另一个宏分配给我的Private Worksheet_SelectionChange事件,如下所示:

宏1

代码语言:javascript
复制
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

代码语言:javascript
复制
 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

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

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

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

有人能告诉我做这件事的最好方法吗?

EN

回答 2

Stack Overflow用户

发布于 2015-10-05 19:11:12

您可以使用

代码语言:javascript
复制
Application.EnableEvents = False

。。在macro1开始时,禁用事件和

代码语言:javascript
复制
Application.EnableEvents = True

在macro1结束时再次打开它。

票数 1
EN

Stack Overflow用户

发布于 2015-10-05 19:33:59

请尝试以下操作:

1将新模块添加到VBA项目中,其中包括:

代码语言:javascript
复制
Public EventRunning as Boolean

2修改Worksheet_SelectionChange宏,如下所示:

代码语言:javascript
复制
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
    EventRunning=True
    ...
    EventRunning=False
End Sub

3按如下方式修改您的Worksheet_Change:

代码语言:javascript
复制
Private Sub Worksheet_Change(ByVal Target As Range)  
    If EventRunning Then Exit Sub
    ...

最好的祝福,本

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32947054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档