在Excel中运行VBA宏-保存文件期间出错

时间:2019-01-09 09:30:35

标签: excel vba powershell

我正在尝试创建PowerShell脚本,该脚本允许我打开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 :(得分:0)

您是否尝试过以下代码?

$excel.Application.ActiveWorkbook.Save()

我不确定Excel对象的操作方式,但ActiveWorkbook在当前形式下肯定为null。因此,该电话看起来格式不正确。我建议一步一步地在命令行的单个电子表格上运行它,您应该很快就发现错误的根源。

答案 1 :(得分:0)

失败,因为您正在Excel之外启动代码,这意味着当时没有任何Active Workbook。 另外,总是很高兴提到您从Excel外部启动代码时使用的是应用程序方法,因此它知道您要执行的操作。

我会选择类似的东西

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

但是,如果您已经打开了工作簿,它将失败。 最好的办法是确定工作簿的名称,然后将其命名为

$excel.Application.Workbooks("<workbook name>").Save()