从Powershell访问Excel VBA编辑器

时间:2016-02-24 12:57:17

标签: powershell

我想使用Powershell在Excel应用程序的VBA菜单中执行Project Properties命令。

以下是脚本 -

$excelApplication = New-Object -ComObject ("Excel.Application")
$excelApplication.Visible = $True

$workbook = $excelApplication.Workbooks.Open("C:\Workbooks\PasswordProtectedVBEFile.xlsm")
$appReference = $workbook.Application
$appReference.VBE.CommandBars(1).FindControl(2578, $True).Execute()

我遇到错误 - You cannot call a method on a null-valued expression.,检查显示 - $appReference.VBE为空。即Write-Host $appReference.VBE输出空行。

我想帮助解决为什么我为VBE获取空值?

1 个答案:

答案 0 :(得分:1)

我找到了出路!

简而言之,在我们使用脚本以编程方式自动化/访问之前,我们需要明确授予对VBA项目模型的访问权。 这次发现之旅很有意思。我偶然发现this git项目帮我解决了问题。

我的问题的解决方案是我在引用项目中找到的安全检查

$mo = Get-ItemProperty -Path HKCU:Software\Microsoft\Office\*\Excel\Security `
                       -Name AccessVBOM `
                       -EA SilentlyContinue | `
          ? { !($_.AccessVBOM -eq 0) } | `
          Measure-Object

此安全检查可确保以编程方式提供VBA项目模型。虽然这只是对注册表的检查,但我想知道如何设置一个值。这很简单,在Excel中有一次活动。

您可以通过选中复选框"信任访问VBA项目模型"来允许此类编程访问。可以通过在Excel(2010)文件>中导航来访问此设置。选项>信托中心>信任中心设置>宏设置。