【问题标题】:Running VBA macro in Excel - Error During Saving File在 Excel 中运行 VBA 宏 - 保存文件时出错
【发布时间】:2019-01-09 09:30:35
【问题描述】:

我正在尝试创建允许我打开 excel 文件、运行宏、然后保存文件并关闭它的 PowerShell 脚本。我的代码如下:

$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()

当我运行这个脚本时,我收到错误:

您不能在空值表达式上调用方法。 在 W:\GDA_files\SME_iQA\iQA_NEW\PrepareMacro.ps1:10 char:1 + $excel.ActiveWorkbook.Save() + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull

VBA 宏 (refreshall) 大约需要一分钟。您是否认为该脚本无法保存文件,因为它在宏运行时尝试执行此操作?

【问题讨论】:

  • 错误信息明确指出$excel.ActiveWorkbook 为空。请改用$workbook.Save()
  • 您好 Ansgar,感谢您的回复。带代码:$workbook.Save() $workbook.Close() 我收到:Method invocation failed because [System.__ComObject] doesn't contain a method named 'Save'. At W:\GDA_files\SME_iQA\iQA_NEW\PrepareMacro.ps1:10 char:1 + $workbook.Save() + ~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (Save:String) [], RuntimeException + FullyQualifiedErrorId : MethodNotFound

标签: excel vba powershell


【解决方案1】:

你试过下面的代码吗?

$excel.Application.ActiveWorkbook.Save()

我不确定 Excel 对象如何运行,但 ActiveWorkbook 在其当前形式中绝对为空。所以调用看起来是不正确的。我建议您从命令行逐步在单个测试电子表格上运行它,您应该很快就会发现错误的根源。

【讨论】:

    【解决方案2】:

    失败是因为您在 Excel 之外启动代码,这意味着当时没有任何活动工作簿。 此外,在从 Excel 外部启动代码时,提及您正在使用应用程序方法总是很好,因此它知道您要做什么。

    我会选择类似的东西

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

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

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

    【讨论】:

      最近更新 更多