我正在尝试创建AHK脚本,用于在PowerPoint 中合并形状
这个VBA宏运行良好,它采用选定的形状并将它们组合在一起:
Sub mergeShapes()
ActiveWindow.Selection.ShapeRange.mergeShapes msoMergeCombine
End Sub
但当我将脚本放入AHK时,调用会引发类型不匹配错误:
^!m::
WinActivate, ahk_class screenClass ahk_exe POWERPNT.EXE
msoMergeCombine:=2
ppt := ComObjActive("PowerPoint.Application")
ppt.ActiveWindow.Selection.ShapeRange.MergeShapes(msoMergeCombine)
Return
Error: 0x80020005 - Type mismatch.
Specifically: MergeShapes
我将代码放入PowerShell中,以确定可能出现的问题,并发现它也不起作用:
$app = New-Object -ComObject powerpoint.application
$sr = $application.ActiveWindow.Selection.ShapeRange
$sr.MergeShapes(2)
并得到错误消息:
Exception setting "MergeShapes": Cannot convert the "2" value of type "int" to type "Object".
At line:1 char:1
+ $sr.MergeShapes(2)
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : RuntimeException
好吧,似乎第一个参数必须是Object类型,所以我创建了一个对象并将其传递给方法,看看会发生什么。情况变得更糟:
$obj = New-Object Object
$sr.MergeShapes($obj)
Exception setting "MergeShapes": Cannot convert the "System.Object" value of type "Object" to type "Object".
MergeShapes方法似乎是以某种方式声明的,但当我调用时,我在方法列表中看不到它
$sr | Get-Member -MemberType Method
请建议我如何解决此问题。
以不同的方式调用它可以达到目的:
^!m::
WinActivate, ahk_class screenClass ahk_exe POWERPNT.EXE
ppt := ComObjActive("PowerPoint.Application")
ppt.CommandBars.ExecuteMso("ShapesUnion")
Return
^!f::
WinActivate, ahk_class screenClass ahk_exe POWERPNT.EXE
ppt := ComObjActive("PowerPoint.Application")
ppt.CommandBars.ExecuteMso("ShapesSubtract")
Return