【问题标题】:Excel workbook only shows after running code is finishedExcel 工作簿仅在运行代码完成后显示
【发布时间】:2015-03-17 08:59:44
【问题描述】:

我在 Excel 工作簿中有一个程序,它打开一个 Powerpoint 文件,更新此文件中的链接,然后关闭它。这工作正常。这是我的问题:更新链接时,会打开包含源数据的 Excel 文件。关闭 Powerpoint 后,此文件保持打开状态。我希望它关闭,因为我对许多文件重复此过程,但最终无法打开数百个 Excel 文件。

我尝试了以下方法:

WBKs=Application.Workbooks.count
For i = WBKs to 1 Step -1
    If Workbooks(i).Name<>ThisWorkbook.Name then
        Workbooks(i).close savechanges:=False
    End if
Next i

现在是奇怪的部分。每当我运行我的代码时,WBKs 总是返回 1,并且 Excel 文件只会在代码完成后弹出。如果我在调试模式下浏览我的代码,它就可以工作。一进入调试模式,工作簿就会弹出。

我尝试了Applicatio.Wait,希望文件会在一秒钟后显示。该文件仅在代码完成后显示。

我尝试了Do While Loop 来等待文件打开。 Excel 崩溃,因为我从不离开循环。

编辑:我按照建议尝试了DoEvents。也不行。

【问题讨论】:

  • DoEvents 关闭 powerpoint 文件后。
  • "更新链接时,会打开包含源数据的 Excel 文件。" - 你是用 VBA 代码打开这个文件吗?还是自动的?
  • 自动打开。
  • 如果 DoEvents 不起作用,即使在正确的地方使用了多次,然后有一个单独的清理宏,并在主宏之后用Application.OnTime 调度它的执行。
  • 这就是诀窍!非常感谢。但是现在又产生了另一个问题:打开的文件包含宏。使用Application.DisplayAlerts=False 我最初隐藏了这些宏可能很危险的信息。现在这显然不再起作用了。我尝试解决它。感谢您的帮助。

标签: vba excel


【解决方案1】:

这只是一种解决方法,但请在宏运行 x 次后尝试使用蛮力。将该 x 存储在工作簿中的某个位置,保存。并杀死 excel 进程(所有实例,包括 self):

Dim sKill As String

sKill = "TASKKILL /F /IM excel.exe"
Shell sKill, vbHide

在这里找到:VBA script to close every instance of Excel except itself

下次运行宏时,您将使用该x作为下一个PPT文件更新的起点。

【讨论】:

  • 感谢您的回答。不幸的是,原始 Excel 文件必须保持打开状态。我不是该工具的最终用户,因此它必须是用户友好的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 2016-07-30
  • 1970-01-01
相关资源
最近更新 更多