【发布时间】:2014-10-09 07:43:55
【问题描述】:
(使用Win32:OLE w/Perl)
如果已经打开了多个工作簿,是否可以指定从哪个工作簿运行 Excel 宏?
我正在使用以下代码,但如果打开了多个 Excel 工作簿,它有时会失败。我知道有一个明显的解决方案来关闭其他工作簿,但我的工作经常涉及使用另一个 Excel 工作簿(这很麻烦继续关闭和重新打开)。所以我希望有一种方法可以指定从哪个工作簿运行宏(可能类似于指定附加参数的方式,例如Win32::GUI 的标题)。
以下是当前仅适用于打开一个工作簿的示例:
use Win32::OLE;
my $excel = Win32::OLE->GetActiveObject('Excel.Application');
$excel->Run("macroName");
我正在运行的宏会导出当前工作簿的所有工作表,因此从正确的工作簿运行它很重要。我检查了这个问题(How do I use Perl to run a macro in an **already open** Excel workbook),但它似乎没有解决如何选择从哪个宏运行工作簿。
我也在阅读这篇文章 (http://docs.activestate.com/activeperl/5.6/faq/Windows/ActivePerl-Winfaq12.html),但它似乎没有说明如何从特定工作簿运行宏。再想一想,如果两个工作簿具有相同的宏名称,我可能会发现无法指定要运行哪个工作簿是一个问题,但由于某种原因,它们会做不同的事情。
有什么建议吗?
【问题讨论】:
-
我对 PERL 不太了解,但可能
$Excel->Workbooks->open('c:\somefile.xls');