我想写的PowerShell脚本的目的是 - 打开一个excel文档并运行一个宏。 (宏存储在个人工作簿文件中 - personal.xlsb
并且成功运行)
问题 -
当通过PowerShell代码打开excel文件时,它打开正常但是当通过调用Run("NameOfMacro")
运行宏时,我收到一条错误,指出未找到宏。我尝试在打开的excel文件中找到宏,它不会出现在宏列表中。这似乎是因为personal.xlsb
文件未加载。
所以我关闭excel文件,手动打开它,但宏仍然缺失。然后我手动打开personal.xlsb
文件,注意宏存在,但宏仍然没有出现在excel文件或我之后打开的任何其他excel文件中。
经过一段令人沮丧的时间试图理解为什么personal.xlsb
文件突然停止加载。我注意到另一件事 - 如果我杀死了由PowerShell代码启动的excel.exe
进程(通过任务管理器窗口),然后打开任何excel文档,宏就可用!!
所以我已经将问题缩小到了这一点 - 由于Personal.xlsb
未通过PowerShell打开excel文件时未打开/加载,因此宏不可用。
有没有人知道为什么会发生这种情况,我需要做些什么才能解决这个问题?
$excel = New-Object -comobject Excel.Application
$FilePath = "D:\DailyReport.xls"
$workbook = $excel.Workbooks.Open($FilePath)
$excel.Visible = $true
$worksheet = $workbook.worksheets.item(1)
$excel.Run("SelectDataFromReport")
我得到错误 -
使用“31”参数调用“Run”的异常:“无法运行宏'SelectDataFromReport'。宏可能在此工作簿或所有宏中不可用 s可能被禁用。“
在行:18 char:11 + $ excel.Run<<<< ( “SelectDataFromReport”) + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:DotNetMethodException
顺便说一下,我默认使用64位PowerShell控制台,但我也尝试使用32位控制台运行代码,但它没有什么区别。 在excel中,我已将位置添加为受信任位置,并且我已允许在编辑模式下默认打开excel文件。
答案 0 :(得分:2)
您可以在personal.xlsb中调用宏,如下所示:
$excel = New-Object -comobject Excel.Application
$wbPersonalXLSB = $excel.workbooks.open("$env:USERPROFILE\Application Data\Microsoft\Excel\XLSTART\PERSONAL.XLSB")
$FilePath = "D:\DailyReport.xls"
$workbook = $excel.Workbooks.Open($FilePath)
$excel.Visible = $true
$worksheet = $workbook.worksheets.item(1)
$excel.Run("PERSONAL.XLSB!SelectDataFromReport")
$wbPersonalXLSB.Close()
$workbook.save()
$workbook.close()
$excel.quit()
答案 1 :(得分:0)
$x1 = New-Object -comobject Excel.Application
$wb = $x1.workbooks.open("$env:C:\teste\testamacro.xlsm")
$FilePath = "c:\teste\testamacro"
$workbook = $x1.Workbooks.Open($FilePath)
$x1.Visible = $true
$worksheet = $workbook.worksheets.item(1)
$x1.Run("testamacro.xlsm!SelectDataFromReport")
$wb.Close() $workbook.save()`
$workbook.close()
$x1.quit()