Инициированный PowerShell макрос Excel VBA ничего не делает - PullRequest
0 голосов
/ 20 января 2020

У меня есть рабочий макрос VBA с рабочими данными в Excel. Возможно, некоторые из вас не захотят увидеть этот Макрос, но поверьте мне, он работает. Он работал в течение нескольких недель, и если я открою файл, PowerShell собирается его отредактировать и щелкнуть кнопку «Макрос также работает», так что никаких проблем нет.

Для запуска мой скрипт PowerShell должен просто выполнить макрос и сохранить в Excel. Я узнал, как вы запускаете макросы / нажимаете кнопку и как сохранить файл. Вот мой код:

$ExcelPath = "PathToMyExcel"

$excel = New-Object -comobject Excel.Application
$workbook = $excel.Workbooks.Open($ExcelPath)

$excel.Visible = $true
$app = $excel.Application
$app.Run("Sheet.Macro")
Start-Sleep -Seconds 2 # -> Just so I can see what the Macro "Should" be doing
$excel.Visible = $false

$workbook.Saved = $true
$workbook.SaveAs($ExcelPath)
$xl.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($xl)
[System.GC]::Collect()

Моя первая проблема состояла в том, что он не нашел и не смог запустить макрос, поэтому я активировал макросы из get go и позже обнаружил, что мне нужно включить имя листа, в котором находился мой Button / Macro (Sheet.Macro).

Я пытался изменить $ app.Run ("") со всем, Sheet, Workbook, Whole Excel Path и другими, все мне дают ошибка, из-за которой не удалось найти макрос, но не «Sheet.Macro», который не возвращает ошибок, но, как я уже сказал, ничего не делает.

Итак, теперь я не могу есть ошибки, это должно работать, но это не так. Это потому, что это макрос VBA или что-то другое?

1 Ответ

1 голос
/ 21 января 2020
$ExcelPath = "PathToMyExcel"

$excel = New-Object -comobject Excel.Application
$workbook = $excel.Workbooks.Open($ExcelPath)

$excel.Visible = $true
$app = $excel.Application
$app.Run("Sheet1.Macro")
Start-Sleep -Seconds 2 # -> Just so I can see what the Macro "Should" be doing
$excel.Visible = $false

$workbook.Saved = $true
$workbook.SaveAs($ExcelPath)
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
[System.GC]::Collect()

Убедитесь, что вы правильно указали название листа.

Я предполагаю, что это должно быть Sheet1, а макрос должен быть public sub под `Sheet1 '.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...