Trying to string the title together was enough of a challenge...
I am trying to run some PowerPoint macros from PowerShell. I have gotten quite good at running macros from Powershell for Excel. When I run the macros on Excel, the Run() method from the COM object will take a variety of arguments, depending if the macro has any parameters. However on the other hand, the PowerPoint Run() method expects parameters, and I cannot work out how to pass them.
My macro is expecting one string to be passed through, I've googled profusely and come up short. I always get this error:
Error:
type must not be ByRef
I have put together a very basic PoC for PowerPoint in PowerShell:
Code:
# PowerPoint test
Add-type -AssemblyName office
$PowerPoint = New-Object -comobject PowerPoint.Application
$PowerPoint.Visible = [Microsoft.Office.Core.MsoTriState]::msoTrue
$presentation2 = $PowerPoint.Presentations.open("C:\macros.pptm")
$presentation = $PowerPoint.Presentations.open("C:\Test For Macros.pptx")
$PowerPoint.run("macros.pptm!IAM",[ref]"Feb")
$presentation.save()
$presentation.close()
$presentation2.close()
$PowerPoint.quit()
# extra clean up omitted
The macro itself just moves some text across boxes, it works fine when run from PowerPoint.
Requirement:
I now want to automate this across multiple files and slides.
Documentation on the PowerPoint COM object Run method, showing the requirement for two parameters.