2016-03-07 393 views
1

嗨團隊我打算從Windows Power Shell腳本下運行excel宏。 我的宏從Windows PowerShell腳本運行Excel宏(.xlsm)

Public Sub LogInformation() 
    Dim strFile_Path As String 
    strFile_Path = Application.ThisWorkbook.FullName & ".txt" 
    Open strFile_Path For Append As #1 
    Write #1, "message As String" & "   : Logged at " & Now 
    Close #1 
End Sub 

我的PowerShell

#Call the application 
$excel = new-object -comobject excel.application 
#Now we select the file and path 
$excelFile = Get-ChildItem -Path "..\McroWPSS.xlsm" 
#The next variable speeds the script up by not calling the comobject as often 
$app = $excel.Application 

#Now we open the Excel file and activate the macro enabled content 
$workbook = $app.workbooks.open($excelfile) 

#The next command makes Excel visible 
$app.Visible = $false 
$workbook.Activate() 

#Now we run all the Macros that need to be run. 
    $app.Run("LogInformation") 

#Now we save the workbook in the standard daily format and the close Excel 
$workbook.save() 
$workbook.close() 

$excel.quit() 

當我運行我的PowerShell腳本我讓我下面的錯誤

異常調用 「運行」 與 「1」 的說法(S) :「無法運行宏'Workbook_Open'宏可能不可用 此工作簿或所有宏可能被禁用。」 在D:\ Powershell \ practice \ MacroRun.ps1:16 char:2 + $ app.Run(「Workbook_Open」) + ~~~~~~~~~~~~~~~~~ ~~~~~ + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:收到COMException

異常調用 「保存」 與 「0」 的參數(一個或多個):「 'McroWPSS.xlsm' 是隻讀僅保存副本,請單擊確定,然後在「另存爲」對話框中爲 工作簿指定一個新名稱。 在D:\ Powershell \ practice \ MacroRun.ps1:19 char:2 + $ workbook.save() + ~~~~~~~~~~~~~~~~ + CategoryInfo:NotSpecified :(:) [],MethodInvocationException + FullyQualifiedErrorId:ComMethodTargetInvocation

+0

錯誤的第一行說明了原因:要麼你沒有明確的PowerShell通過CMD啓用宏或有ISN」 t現在我想到的任何宏 – newguy

+0

在這個'$ workbook = $ app.workbooks.open($ excelfile)'之後,你在哪裏啓用了宏內容? [見此](http://stackoverflow.com/questions/26907650/enable-macros-via-powershell)獲取更多信息。 – newguy

+0

您的錯誤信息與您的腳本不匹配 - 您嘗試運行哪個宏,它是如何聲明的以及它在哪個模塊中? –

回答

0

可以控制宏啓用/通過註冊表disbaled。我就是這樣運行的。

啓用

New-ItemProperty -Path "HKCU:\Software\Microsoft\Office\$($excel.Version)\excel\Security" -Name AccessVBOM -PropertyType DWORD -Value 1 -Force | Out-Null 
New-ItemProperty -Path "HKCU:\Software\Microsoft\Office\$($excel.Version)\excel\Security" -Name VBAWarnings -PropertyType DWORD -Value 1 -Force | Out-Null 

禁用(運行宏後)

New-ItemProperty -Path "HKCU:\Software\Microsoft\Office\$($excel.Version)\excel\Security" -Name AccessVBOM -PropertyType DWORD -Value 0 -Force | Out-Null 
New-ItemProperty -Path "HKCU:\Software\Microsoft\Office\$($excel.Version)\excel\Security" -Name VBAWarnings -PropertyType DWORD -Value 0 -Force | Out-Null 
+0

感謝您的答案。但我仍然一樣。 – user5384290

+0

您是否可以在註冊表中手動打開該節點以檢查設置的值? [本頁](https://blogs.technet.microsoft.com/diana_tudor/2014/12/02/microsoft-project-how-to-control-macro-settings-using-registry-keys/)討論宏安全設置。我假設錯誤消息的第一部分不正確,並且LogInformation宏是您打開的工作簿(而不是Personal.XLSB或其他工作簿)的一部分。編輯:此外,我相信你必須作爲管理員運行Powershell來進行註冊表更改。 – gms0ulman