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', ...)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.