【问题标题】:Unable to run a power point macro from perl无法从 perl 运行 power point 宏
【发布时间】:2014-12-13 22:37:56
【问题描述】:

我有一个用 powerpoint 编写的宏,我需要从我的 perl 脚本中调用它,可以使用 $Excel->Run("MYMACRONAMEHERE"); 从 Excel 中调用一个宏,但是在 powerpoint 中使用“Run”会出现以下错误:

“Microsoft PowerPoint 2010”中的 OLE 异常: Application.Run:无效请求。子或函数未定义。 Win32::OLE(0.1709) 错误 0x80048240 在 METHOD/PROPERTYGET “运行”中

下面是我用来从 powerpoint 调用宏的 perl:

my $filename = "<path>";
my $PptApp  = Win32::OLE->GetActiveObject('PowerPoint.Application')|| Win32::OLE->new('PowerPoint.Application', 'Quit'); 
$PptApp->{Visible} = 1;
my $Presentation = $PptApp->Presentations->Open({FileName=>"$filename",ReadOnly=>0});
$PptApp->Run("macro_name");

【问题讨论】:

  • 您的代码是正确的。你确定你有定义给定名称的宏吗?

标签: perl vba powerpoint


【解决方案1】:

您正在使用 power point Application 对象来运行 Excel 宏。那是行不通的。您需要获取 Excel 的一个实例并使用它的 Application 对象来运行 Excel 宏。或者,您可以将 VBA 代码复制到 PowerPoint 模块中。

【讨论】:

    【解决方案2】:

    必须定义宏,而且我很确定,必须将其声明为 Public。

    还有,来自 MSDN (http://msdn.microsoft.com/en-us/library/office/ff744221(v=office.15).aspx):

    要运行的过程的名称。该字符串可以包含以下内容:加载的演示文稿或加载项文件名后跟感叹号 (!)、有效模块名称后跟句点 (.) 和过程名称。例如,以下是有效的 MacroName 值:“MyPres.ppt!Module1.Test。”


    但是,如果过程被声明为 Public 并且是加载的加载项的一部分,则您只需要提供过程名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多