2016-03-07 4 views
1

Привет, Team Я планирую запустить макрос excel из сценария оболочки Windows. Мои МакроЗапуск excel macros (.xlsm) из сценария windows powershell

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 скрипт я получаю ниже ошибки

Exception призывающую "Выполнить" с "1" аргумент (ы) : «Не удается запустить макрос« Workbook_Open ». Макрос может быть недоступен в этой книге или все макросы могут быть отключены». В D: \ Powershell \ practice \ MacroRun.ps1: 16 char: 2 + $ app.Run ("Workbook_Open") + ~~~~~~~~~~~~~~~~~~~~ ~~~~~ + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: COMException

Exception призывающий "Сохранить" с "0" аргументом (ы): « 'McroWPSS.xlsm' является Read- Чтобы сохранить копию, нажмите «ОК», а затем дайте книге новое имя в диалоговом окне «Сохранить как» ». В D: \ Powershell \ practice \ MacroRun.ps1: 19 char: 2 + $ workbook.save() + ~~~~~~~~~~~~~~~ + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: ComMethodTargetInvocation

+0

Первая строка ошибки описывает причину: либо вы не включили макросы явно с помощью Powershell ЦМД или там 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 или какой-либо другой рабочей книги). Edit: Кроме того, я считаю, что вы должны запустить Powershell в качестве администратора для внесения изменений в реестр. – gms0ulman