excel - 使用 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。
解决方案
我找到了根本问题的解决方案,即生成 PDF 时出现冻结。我发现在极少数情况下,PDF 生成开始时数据检索不完整。在进行检查以确保在开始生成 PDF 之前完成数据检索后,问题就消失了。
我没有找到一种可靠的方法来从另一个 Excel 实例启动一个 Excel 实例并在不使用 VBA 的情况下传递参数,但是我不再需要它来解决根本问题。
推荐阅读
- java - 如何修改约束布局中的链长?
- node.js - 部署对话流示例代码时出错
- firebase - Vue Firebase:currentUser 为空
- html - 将对象从视图传递到控制器
- cumulocity - 如何在 cumulocity 中使用 API 将“c8y_Address”属性添加到设备?
- trading - 在 Amibroker 回测中扩大购买头寸
- regex - 定义正则表达式以匹配多个名称变体
- python - 在一行python中输入整数和字符串
- android - 在圆形中绘制位图并填充外部彩色画布不起作用
- powershell - 将多个服务器名称传递到脚本中以同时运行