excel - 工作簿对象在关闭后仍然存在,并且工作簿在工作簿关闭后的任何后续 excel 操作中重新打开

标签 excel vba

我有一个 excel 工作簿,它充当其他基于 excel 的工具的启动板,允许用户启动同一工具的多个实例,我每次通过设置新应用程序来强制新工具在新的 excel 实例中打开。然后,代码还将一些数据从启动板传递到工具中。

不幸的是,对于一些用户来说,目前只有大约 20 到 30 个使用过该系统的用户,如果他们关闭启动板工作簿,它似乎仍然存在于该 excel 实例中(它在 VBE 项目资源管理器中仍然可见)。奇怪的是,无论他们现在在该 excel 实例中打开的任何工作簿中做什么,例如键入一个单元格并按回车键,启动板都会重新打开。他们必须完全关闭 excel 才能停止该问题。

我释放了打开工具的例程中使用的所有对象,所以不能这样,我想知道这是否有必要,因为我正在打开工作簿并想让它们对用户开放?

我的代码:

Public Sub LaunchTool()
Dim WB1 As Workbook
Dim WS1 As Worksheet
Dim WT1 As Workbook
Dim EA1 As New Application

Application.DisplayAlerts = False

'Define workbook aliases
Set WT1 = ActiveWorkbook
EA1.Workbooks.Open Filename:=PathString, IgnoreReadOnlyRecommended:=True,                 
ReadOnly:=True

Set WB1 = EA1.ActiveWorkbook
Set WS1 = WB1.Worksheets("Import")
WB1.Windows(1).Visible = True
EA1.Visible = True


'pass on some values
WB1.Sheets("Control").Range("Dev_Flag") =                     
WT1.Sheets("Param").Range("Dev_Flag")

Set WT1 = Nothing
Set WS1 = Nothing
Set WB1 = Nothing
Set EA1 = Nothing

Application.DisplayAlerts = True

End Sub
Application.DisplayAlerts = False是为了抑制 Microsoft Excel 正在等待另一个应用程序完成加载过程中有时会弹出的 OLE 操作警报。

我在 ThisWorkbook 中尝试了以下内容模块:
Private WithEvents XL As Excel.Application

Private Sub XL_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
Set XL = Nothing
Workbooks.Open ThisWorkbook.FullName
ThisWorkbook.Close False 
End Sub

但没有运气!

对于大多数用户来说,一切正常,但正如我所描述的,有些用户无法成功关闭启动板,然后除非他们完全关闭 excel,或者至少关闭启动板的实例,然后任何用户操作都会开始触发启动板重新打开。

谢谢。

最佳答案

经过深思熟虑,我意识到问题不是由对象驱动,而是我有一个 Application.OnKey正在设置但从未释放的触发器,这导致工作簿持续存在,释放 WorkbookBeforeClose 中的 OnKey 触发器常规已经很好地解决了它。

谢谢您的帮助。

关于excel - 工作簿对象在关闭后仍然存在,并且工作簿在工作簿关闭后的任何后续 excel 操作中重新打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55956767/

相关文章:

Excel vba 到 Mac

excel - 在 VBA 中设置范围并定义命名范围

c# - Excel 服务无法打开工作簿

vba - 将表单控制按钮固定到多个工作表

excel - 在后台静默 ping

excel - 通过宏删除工作表

vba - Excel - 通过 VBA 显示组合框下拉菜单

excel - 如何确定VBA中使用的最后一行(包括之间的空格)

java - 在 Selenium Java 中从 Excel 文件读取数据

vba - 为什么 VBA 全局变量在关闭用户窗体时会丢失值?