首页 > 解决方案 > 使用 CreateObject("Excel.Application") 的 2 个 Excel 链接实例

问题描述

我有一个旨在生成 PDF 的 Excel 工作簿。它(定期)挂在 VBA 的行上以生成 PDF。我已经尝试了很多方法来修复它,但似乎没有任何效果。现在,我正在寻找一种有效的解决方法。该过程涉及一个循环,每次通过循环都会产生一个 PDF。当它挂起时,除了终止进程外,我无能为力。我需要一种方法让它继续下去,并尽可能多地生成。

我想把它分成两个 Excel 工作簿,并有一个主工作簿,它将创建(在 VBA 中)一个 Excel 实例,每个通过循环,然后让它加载 PDF 生成器工作簿,并为其分配参数。生成 PDF 后,PDF 生成器将自行关闭。

这不起作用,因为每当 PDF 生成器挂起时,Master 都会卡在“等待 OLE 操作完成”。

接下来,我尝试让Master使用Shell来启动PDF生成器,这样Excel的两个实例就不会链接,所以PDF生成器的问题不会干扰到Master。这需要使用 Shell 命令传递参数,以便 PDF 生成器接收需要生成正确 PDF 的参数。

如果我从命令行启动 PDF 生成器,我就能让它工作:EXCEL.EXE "C:\Users\u8015298\Tearsheet Generator\Tearsheet v4.0.1.xlsm" /LP68586056 /OTC(在这种情况下,大师未开)。

我想我可以使用相同的方法,只需将命令行转换为 Shell 中的等效项,然后将其放入 Master 中。这没有用。据我所知,这似乎与同时打开的两个 Excel 实例有关。

我曾尝试使用 VbScript 编写脚本,但未能成功。(可能我只是不精通 VbScript 或 WScript,但无论如何,它对我不起作用)。

我首选的解决方案是最简单的——两个链接的 Excel 实例,一个由另一个创建。

如果有人可以建议一种方法来使用该方法,该方法不易受到子实例挂起并停止父实例的影响,我很想听听如何做到这一点。

我已经没有如何进行的想法了。

挂起的行是:

Range("Print_Area").ExportAsFixedFormat Type:=xlTypePDF,filename:=PDF_filename, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

我已将文件名打印到控制台,这不是问题的根源。文件名格式正确,不包含任何奇怪的字符,也不会太长。

为了启动 PDF 生成器,我这样做了:

        Set xl = CreateObject("Excel.Application")
        xl.WindowState = xlMaximized
        xl.Workbooks.Open (ThisWorkbook.Path & "\Tearsheet v4.0.0.xlsm")
        wkbk.Names("Fund_RIC").RefersToRange.Cells(1, 1).Value = RIC

“RIC”变量决定了 PDF 生成器应该检索哪些数据并将其放入 PDF。

标签: excelvba

解决方案


我找到了根本问题的解决方案,即生成 PDF 时出现冻结。我发现在极少数情况下,PDF 生成开始时数据检索不完整。在进行检查以确保在开始生成 PDF 之前完成数据检索后,问题就消失了。

我没有找到一种可靠的方法来从另一个 Excel 实例启动一个 Excel 实例并在不使用 VBA 的情况下传递参数,但是我不再需要它来解决根本问题。


推荐阅读