小编Str*_*ken的帖子

当打开多个Excel实例时,如何设置手动打开文件在Excel实例中打开?

背景:我有一个文件 AppLauncher.xlsm,它在 Excel 的新实例中打开 App.xlsm,然后自行关闭。App.xlsm 设置 Application.Visible = False,然后显示用户窗体。这使得用户窗体看起来是它自己的应用程序,与 Excel 无关。

问题:如果用户手动打开另一个文件,该文件将在第二个 Excel 实例(打开 App.xlsm 的实例)中打开,并使应用程序可见。

目标:当用户手动打开文件时,在已打开的 Excel 实例(如果存在)或新的 Excel 实例中打开该文件。

我尝试/研究过的内容:

  1. 使用 Application.WorkbookOpen 事件捕获手动打开的工作簿的路径和名称,然后将其关闭并在不同的 Excel 实例中打开它;这可以工作,但它没有考虑另一个带有使用 Workbook.Open 事件的代码的 Workbook.xlsm(Workbook.Open 事件在 Application.WorkbookOpen 事件之前触发)。
  2. 使用 Access 而不是 Excel。VBAWarning注册表项设置为3,要求所有宏都经过数字签名;不幸的是,Access 中的宏签名似乎已损坏。
  3. 使用 Word 或 PowerPoint。我想我也会遇到同样的问题。
  4. 运行对象表 (ROT)。据我所知,ROT 的目的是在已经有应用程序运行的情况下不创建新的应用程序实例。我还读到 Excel 仅在 ROT 中注册 Excel 的第一个实例;使用RotView,我观察到注册了多个 Excel 实例,而不仅仅是第一个实例。

可能的解决方案:删除打开 App.xlsm 的 Excel 实例的 ROT 条目...不确定如何仅使用 VBA 来完成此操作(使用 SendMessage 函数?)。

AppLauncher.xlsm代码:

Private Sub Workbook_Open()
    Call Shell("excel.exe /x /s " & …
Run Code Online (Sandbox Code Playgroud)

windows excel winapi vba microsoft365

6
推荐指数
1
解决办法
965
查看次数

标签 统计

excel ×1

microsoft365 ×1

vba ×1

winapi ×1

windows ×1