背景:我有一个文件 AppLauncher.xlsm,它在 Excel 的新实例中打开 App.xlsm,然后自行关闭。 App.xlsm 设置 Application.Visible = False,然后显示一个用户窗体。这使用户窗体看起来是它自己的应用程序,与 Excel 无关。
问题:如果用户手动打开另一个文件,该文件将在 Excel 的第二个实例(打开 App.xlsm 的那个)中打开,并使应用程序可见。
目标:当用户手动打开文件时,在已打开的 Excel 实例(如果存在)或新的 Excel 实例中打开文件。
我尝试过/研究过的内容:
潜在解决方案:删除已打开 App.xlsm 的 Excel 实例的 ROT 条目...不确定如何仅使用 VBA 完成此操作(使用 SendMessage 函数?)。
AppLauncher.xlsm 代码:
Private Sub Workbook_Open()
Call Shell("excel.exe /x /s " & """" & ThisWorkbook.Path & "\App.xlsm""")
ThisWorkbook.Close
End Sub
App.xlsm 代码:Private Sub Workbook_Open()
Application.Visible = False
UserForm1.Show vbModeless
End Sub
编辑 1:使用 Application.IgnoreRemoteRequests = True
在已打开 App.xlsm 的 Excel 实例上似乎无法在 Microsoft 365 中工作。
最佳答案
我认为您可以使用窗口的 API 来显示或隐藏应用程序实例。
这是一些代码,我认为这就是您所追求的。
Option Explicit
Public Declare Function ShowWindow Lib "user32.dll" (ByVal HWND As Long, ByVal nCmdShow As Long) As Long
Public Const SW_HIDE As Long = 0
Public Const SW_SHOW As Long = 5
Public Sub ShowHide()
ShowWindow ThisWorkbook.Application.HWND, SW_HIDE 'Get the Handle of the application running the form
UserForm1.Show 'Pop the form open
ShowWindow ThisWorkbook.Application.HWND, SW_SHOW 'When the form closes, show Excel again
End Sub
我能够打开另一个 Excel 工作簿,该新工作簿正常打开,而带有表单的原始 Excel 工作簿仍然隐藏。
关于excel - 打开多个Excel实例时,如何设置Excel实例打开手动打开的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70596072/