我正在开发一个既需要excel文档又需要word文档的项目。我已经完全编写了excel文档,使用UserForms工作,其中一个在打开文档时自动打开。 (见下面的代码)
Private Sub Workbook_Open()
frmOpen.Show
End Sub
单词文档已编程为从此Excel文档中读取数据并将其写入报告中。 (见下面的代码)
Private Sub cmdAutomatic_Click()
Dim objExcel As New Excel.Application
Dim exWb As Excel.Workbook
Dim selectID As String
Set exWb =objExcel.Workbooks.Open("C:\ Path")
exWb.Close
''Data is written into the document here
Set exWb = Nothing
Unload Me
End Sub
问题是,每次按下此按钮,它都会从Excel文档打开用户表单,并暂停其他代码,直到用户表单关闭。有没有办法只在用户表单打开时。
我试过了
Application.EnableEvents = False
然而,这只会返回一个未找到的方法或数据成员(所以我假设必须运行excel才能excel?)
很抱歉,如果这个问题已经得到解答,我找不到解决此问题的任何内容。也很抱歉,如果这有一个非常简单的解决方案,这是一个学校项目,这是我第一次使用VBA
编辑: 我意识到执行以下操作可能会起作用
exWb.Application.EnableEvents = False
但是因为我需要在“Set”之前将它设置为停止打开表单,所以它不起作用(因为对象未在行运行的位置设置)。
答案 0 :(得分:1)
您可以在打开工作簿之前使用objExcel.EnableEvents = False
停用Excel事件,然后使用objExcel.EnableEvents = True
重新激活它们。
正如@Siddarth Rout在评论中所说,您可以使用frmOpen.Show vbmodeless
以无模式模式显示UserForm,以避免阻止其他代码执行。请参阅MSDN关于此的评论:https://msdn.microsoft.com/en-us/library/office/gg251819.aspx
所以你的代码看起来像这样:
Private Sub cmdAutomatic_Click()
Dim objExcel As New Excel.Application
Dim exWb As Excel.Workbook
Dim selectID As String
objExcel.EnableEvents = False
Set exWb =objExcel.Workbooks.Open("C:\ Path")
exWb.Close
objExcel.EnableEvents = True
''Data is written into the document here
Set exWb = Nothing
Unload Me
End Sub