Author Posts

August 4, 2015 at 3:09 am

I want to run a PowerPoint Macro from a PowerShell script. If i try to run an Excel Macro it works, but if i try to run a PowerPoint Macro it says to me: "type must not be byval".
Code:

$ppt = new-object -comobject powerpoint.application
$pres = $ppt.Presentations.Open($pptSourceFilePath)
$tst = @('test')
$pres.Application.Run("TestMain",$tst)

August 4, 2015 at 6:26 am

It's not Powershell, it's the antiquated Office COM object that's being used. Look for examples on the web specifically running macros with VBA or another programming language, like this: https://support.microsoft.com/en-us/kb/306682

August 4, 2015 at 10:32 pm

Thank you. but i cant load an object library (.olb) in Powershell or i dont know how to load it. And as i said, with Excel it is no Problem to call the run method on the COM Object. But PowerPoint wants a safearray of params and this is the Problem. I cant get it to work, no matter what i do; always the same error: type must not be byref. Any Ideas :)?

February 23, 2016 at 9:22 am

Try explicitly passing parameter as type ref:

$ppt = new-object -comobject powerpoint.application
$pres = $ppt.Presentations.Open($pptSourceFilePath)
$tst = @('test')
$pres.Application.Run("TestMain",[ref]$tst)

You can also explicitly specify the macro file and module:

$ppt.Run("MyMacros.pptm!Module1.TestMain",[ref]$tst)