在运行时隐藏Excel应用程序

dwi*_*ony 15 excel vba excel-vba

我正试图在一个漫长的脚本中隐藏Excel,我在其中进行了一些网络抓取.我能够隐藏应用程序就好了,问题是当我改.Visible回来时True,我还有1-2个额外的应用程序(只是空的Excel shell).我猜其中一个是我的PERSONAL.xlsb工作簿,但我不确定另一个是什么 - 有时我得到一个额外的,有时我得到两个.我可以关闭这些shell文件的唯一方法是EXCEL.EXE通过任务管理器结束进程.

我试图隐藏主窗口(Windows(1))也无济于事(它只隐藏工作簿,而不是应用程序):

Sub Test()

Windows(ThisWorkbook.Name).Visible = False

Application.Wait (Now + TimeValue("0:00:05"))

Windows(ThisWorkbook.Name).Visible = True

End Sub
Run Code Online (Sandbox Code Playgroud)

我怎样才能让我的主工作簿重新出现?

示例代码:

Sub Test()

Application.Visible = False

Application.Wait (Now + TimeValue("0:00:05"))

Application.Visible = True

End Sub
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

编辑:这是在Windows 7,Excel 2016上

Edit2:单独运行Application.Visible = True也给了我这两个幻像应用程序.

编辑3:问题肯定与存储在PERSONAL.xlsb文件中的宏有关- 当我进入一台新计算机并向该工作簿添加新宏时,我可以重现该问题.但是,我仍然不确定如何避免它......

任务管理器:

IMG1

从Filemaker Pro打开Excel的脚本:

Open URL [With dialog:Off; "C:\Users\Username\Desktop\TestFile.xlsm"]

内部TestFile.xlsm:

Private Sub Workbook_Open()

Application.Visible = False

'Refresh a query in the Excel workbook that is linked to Filemaker Pro

'Webscrape, webscrape, webscrape from a worksheet inside this Excel document
'to a hidden Internet Explorer Window (ewww, IE!)

Application.Wait (Now + TimeValue("0:00:05"))

Application.Visible = True

'Either close Excel completely or reload my main instance of Excel

End Sub
Run Code Online (Sandbox Code Playgroud)

我已经意识到我可以用Excel.Application.Quit完全退出Excel,但我还没有决定是否要立即退出,或者在Excel中重新绘制一个总结导入过程的UserForm

Exc*_*ers 3

我能够重现您的问题。首先,我测试了在不加载 PERSONAL.xlsb 的情况下隐藏应用程序,效果很好。然后我加载了 PERSONAL.xlsb 并得到了与您相同的行为:在 Application.Visible = True 后,一个额外的 Excel shell 变得可见。

我不确定为什么你有时会得到两个额外的 shell,但也许你加载了另一个插件(.xlam)?您可以尝试添加一些代码来首先卸载所有插件,但我有一个替代解决方案:为什么不启动一个新的 Excel 实例,在其中加载宏工作簿并运行宏?例如,如果您的工作簿名为 C:\Book1.xlsb,其中的宏为“MyMacro”,则使用将启动 Book1 的代码创建第二个工作簿。像这样:

Sub LaunchIt()

    Dim xlApp As Excel.Application
    Dim wb As Workbook

    Set xlApp = New Excel.Application

    With xlApp
        Set wb = .Workbooks.Open("C:\Book1.xlsb")
        .Run "'" & wb.Name & "'!MyMacro"
        wb.Close SaveChanges:=False
        .Quit
    End With

End Sub
Run Code Online (Sandbox Code Playgroud)

默认情况下,新的 Excel 实例是不可见的,因此无需设置可见性。我测试了它,它对我有用。