emeriks
Goto Top

Excel 2016 - signierte Makro mit PowerShell ausführen

Hi,
ich habe hier ein Excel Workbook mit Makros (XLSM). Das VBA-Orojekt ist mit einem Zertifikat aus unserer internen CA signiert. Soweit alles gut.

Wenn ich dieses XLSM kopiere und die Kopie dann mit Excel öffne, dann ist auch noch alles gut. Ich kann die Kopie öffnen und das VBA-Projekt ist korrekt signiert. Ich kann Daten ändern, die Kopie speichern, und beim nächsten Öffnen dieser Kopie mit Excel ist das VBA-Projekt immer noch korrekt signiert.

Öffne ich die Kopie (z.B. mit u.g. Code) jedoch in PowerShell und will von dort aus ein Makro starten, dann kommt die Fehlermeldung, dass das Dokument entweder keine Mahros enthalten würde oder die Ausführung von Makros deaktiviert wäre.
Öffne ich hingegen das Original mit PowerShell und führe das Makro aus, dann kommt keine Fehlermeldung und das Makro wird korrekt ausgeführt.

Was mache ich falsch?

Mein Code zum Öffnen der XLSM und Ausführen des Makros in PowerShell sieht so aus:
$ExcelDocNameXLM = "Kopie"  
$ExcelPathXLM = "D:\Daten\{0}.xlsm" -f $ExcelDocNameXLM  
$ExcelApp = New-Object -ComObject Excel.Application
$ExcelBook = $ExcelApp.Workbooks.Open($ExcelPathXLM)

$MakroName = "{0}!MainMakro" -f $ExcelDocNameXLM   
$ExcelApp.Run($MakroName)

$ExcelBook.Save()
$ExcelBook.Close()
$ExcelApp.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ExcelApp) | Out-Null

Ähnliches Verhalten, wenn ich statt das Makro auszuführen direkt Werte in den Zellen ändere. Das liefert zwar keine Fehler im PowerShell, die Änderungen werden ausgeführt. Aber wenn ich das Dokument anschließend in Excel öffne, dann sind die Makros deaktiviert. Und wenn man nachschaut, warum das so ist, dann meldet es, dass die Signierung nicht zum Dokument passen würde.

Mir ist klar, dass ich die kompletten Makros auch in PowerShell konvertieren und dann dort ausführen könnte, nur ist das keine Lösung für mein Problem, weil da auch Makros bei sind, welche in der Excel-GUI laufen müssen (Interaktion).

E.

Content-ID: 81785064397

Url: https://administrator.de/contentid/81785064397

Ausgedruckt am: 18.11.2024 um 13:11 Uhr

emeriks
Lösung emeriks 24.06.2024 um 12:10:32 Uhr
Goto Top
Wenn ich ändere auf

$MakroName = "MainMakro"  
(ohne den Dokumentenname als eindeutigen Verweis)

dann funktioniert es.

Was aber mache ich, wenn ich mehrere dieser Dokumente bereits offen habe. Woher weiß Exel dann, in welchem Dokument es "MainMakro" ausführen soll?