在vba中有很多对象都有内置响应的事件。
比如Workbook对象有Open、BeforeClose等事件。
如果编写了对象的事件响应代码,触发具体的事件将执行具体的代码。
有时候,我们需要禁止触发对象的事件,但是又不想将事件的响应代码删除,这时候可以使用
Application对象的EnableEvents属性进行设置,如果属性值为False,则禁止触发对象的事件,反之则允许触发对象的事件。
比如一个excel文件内置了vba代码,打开该文件会出现一个窗体需要输入密码,密码输入不正确则无法进入。
这是由于Workbook对象的Open事件中内置了弹出窗体的代码,如果想要绕过该代码,可以使用如下的代码先禁用Workbook对象的Open事件:
Sub QQ1722187970()
Dim oWB As Workbook
Dim oWK As Worksheet
'禁止被打开的工作簿运行事件
Excel.Application.EnableEvents = False
Set oWB = Excel.Workbooks.Open(GetFileName)
With oWB
'**************操作代码****************'
End With
'恢复事件
Excel.Application.EnableEvents = True
End Sub
Function GetFileName() As String
'声明一个FileDialog对象变量
Dim oFD As FileDialog
'创建一个选择文件对话框
Set oFD = Application.FileDialog(msoFileDialogFilePicker)
'声明一个变量用来存储选择的文件名
Dim vrtSelectedItem As Variant
With oFD
'允许选择多个文件
.AllowMultiSelect = True
'使用Show方法显示对话框,如果单击了确定按钮则返回-1。
If .Show = -1 Then
'遍历所有选择的文件
For Each vrtSelectedItem In .SelectedItems
'获取所有选择的文件的完整路径,用于各种操作
GetFileName = vrtSelectedItem
Next
'如果单击了取消按钮则返回0
Else
End If
End With
'释放对象变量
Set oFD = Nothing
End Function


发表评论