Str*_*ken 6 windows excel winapi vba microsoft365
背景:我有一个文件 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
Run Code Online (Sandbox Code Playgroud)
应用程序.xlsm代码:
Private Sub Workbook_Open()
Application.Visible = False
UserForm1.Show vbModeless
End Sub
Run Code Online (Sandbox Code Playgroud)
编辑 1:在打开 App.xlsm 的 Excel 实例上使用Application.IgnoreRemoteRequests = True似乎不适用于 Microsoft 365。
Rya*_*dry -1
我认为您可以使用窗口的 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
Run Code Online (Sandbox Code Playgroud)
我能够打开另一个 Excel 工作簿,该新工作簿正常打开,而带有该表单的原始 Excel 工作簿仍然隐藏。
| 归档时间: |
|
| 查看次数: |
965 次 |
| 最近记录: |