我正在尝试创建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
)大约需要一分钟。您是否认为该脚本无法保存文件,因为它正在宏运行时尝试这样做?
答案 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()