在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
发表评论