Запуск макроса VBA в Excel - ошибка при сохранении файла - PullRequest
0 голосов
/ 09 января 2019

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

$excel = New-Object -ComObject Excel.Application
$MacroName1 = "Extraction_Tool.xlsm"
$currentExecutingPath = $fullPathIncFileName.Replace($currentScriptName, "") + $MacroName
$ExcelFiles = Get-ChildItem -Path $currentExecutingPath

$Workbook = $excel.Workbooks.Open($currentExecutingPath)

$excel.Application.DisplayAlerts = $False
$excel.Run("refreshall")
$excel.ActiveWorkbook.Save()
$workbook.Close()
$excel.Quit()

Когда я запускаю этот скрипт, я получаю сообщение об ошибке:

You cannot call a method on a null-valued expression.
At W:\GDA_files\SME_iQA\iQA_NEW\PrepareMacro.ps1:10 char:1
+ $excel.ActiveWorkbook.Save()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Макрос VBA (refreshall) занимает около одной минуты. Считаете ли вы, что скрипт не может сохранить файл, потому что он пытается сделать это во время работы макроса?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Сбой, потому что вы запускаете свой код за пределами Excel, что означает, что в настоящее время нет активной рабочей книги. Кроме того, всегда полезно упомянуть, что вы используете метод приложения при запуске кода из-за пределов Excel, поэтому он знает, что вы пытаетесь сделать.

Я бы пошел на что-то вроде

$excel.Application.Workbooks(1).Save()

Но если у вас уже открыта рабочая книга, она потерпит неудачу. Лучше всего было бы определить название рабочей книги, а затем назвать это имя как

$excel.Application.Workbooks("<workbook name>").Save()
0 голосов
/ 09 января 2019

Вы пробовали код ниже?

$excel.Application.ActiveWorkbook.Save()

Я не уверен, как работает объект Excel, но ActiveWorkbook определенно имеет значение null в его текущей форме. Таким образом, вызов выглядит неправильно сформированным. Я бы порекомендовал запускать это в одной тестовой таблице из командной строки шаг за шагом, и вы должны довольно быстро найти причину своей ошибки.

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