【发布时间】:2020-11-17 22:09:55
【问题描述】:
我使用 Office365。我有一个名为 Test.xlsm 的 Excel 文件,其中包含一个名为 frmMain 的用户表单。
在 ThisWorkbook 对象中,然后在 Workbook_Open 事件中,我有以下代码:
Private Sub Workbook_Open()
Worksheets("Main").Activate
frmMain.Show
End Sub
这意味着每次打开 Test.xlsm 文件时都会启动(显示)frmMain 用户窗体。
但是,如果另一个 Excel 或 Word 文件已打开,frmMain 用户表单将无法启动/显示。
有没有办法让 Excel 或 Word 文件已经打开并且仍然能够启动和使用 Test.xlsm 文件及其用户表单 frmMain ?这是 Office365 的问题吗?
更新:
还尝试将应用程序安全性设置为低,以防它默认为 msoAutomationSecurityByUI:
Private Sub Workbook_Open()
dim frm As frmMain
Dim secAutomation As MsoAutomationSecurity
set frm = New frmMain
secAutomation = Application.AutomationSecurity
Application.AutomationSecurity = msoAutomationSecurityLow
Worksheets("Main").Activate
frmMain.Show
End Sub
更新:
还尝试将其放在独立模块上(不在 ThisWorkbook 中):
Private Sub runForm()
frmMain.Show
End Sub
然后从 ThisWorkbook > Workbook_Open 事件中这样调用它:
Private Sub Workbook_Open()
Application.OnTime VBA.Now, "name of file '!runForm.runForm"
End Sub
在所有其他 Excel 关闭的情况下,这也会打开 Test.xlsm 和用户表单,但是当 .xlsx 已经打开时,同样的问题 - 打开文件但没有打开用户表单。
【问题讨论】:
-
这不能回答您的问题,但您确实应该使用表单的实例而不是默认实例。 Like this
-
您的意思是允许用户手动打开用户表单的实例吗?我需要在打开文件后立即打开表单。
-
不,我的意思是创建表单的
new实例,而不是使用预先声明的默认实例。我的建议/答案显示了如何做到这一点。 -
您确定
Application.EnableEvents没有被已打开的工作簿设置为False吗?尝试这个。在打开工作簿之前,在 VBE 的即时窗口中键入Application.EnableEvents = True。现在检查... -
是的,其他工作簿是普通的 .xlsx,在启动 Test.xlsm 之前没有运行其他宏。 EnableEvents 默认值为 True。无论如何,我只是在 Workbook_Open 事件中的 frm.Show 之前添加了 Application.EnableEvents = True 。启动 Test.xlsm 并在后台打开另一个普通的 .xlsx 工作簿(空白工作簿)。 Test.xlsm 已打开,但 frm.Show 未运行且用户窗体未显示。
标签: excel vba office365 userform