17

Using Powershell it's rather easy to call Excel macro's from a script, for example with a script like this:

$excel = new-object -comobject excel.application
$excelFiles = Get-ChildItem -Path C:\fso -Include *.xls, *.xlsm -Recurse
Foreach($file in $excelFiles)
{
   $workbook = $excel.workbooks.open($file.fullname)
   $worksheet = $workbook.worksheets.item(1)
   $excel.Run("CreateChart")
   $workbook.save()
   $workbook.close()
}
$excel.quit()

However, I didn't manage to call a macro with some arguments. Is this possible or is the best way to write a config file that the macro will read when called?

2
  • Thank you for posting this example. I've been looking for a way to do this and finally figured it out thanks to this post. I know this is old but if you are still around, it looks like excel is run in the background. Any chance Excel can be made visible so I know it's running? Commented Sep 25, 2024 at 13:41
  • 1
    Set the Visible property to true with $excel.Visible = $true. Commented Sep 26, 2024 at 8:49

1 Answer 1

11

You can run a macro with arguments like this:

$excel.Run('CreateChart', 'arg1', 'arg2', ...)
Sign up to request clarification or add additional context in comments.

1 Comment

I had to set the name on the macro as follows ThisWorksheet.CreateChart, so your code became $excel.Run('ThisWorkbook.CreateChart', 'arg1', 'arg2', ...)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.