- Startseite
- Neuigkeiten
- Über mich
- Referenzen
- Beispiele
- Artikel
- Vorträge
- Tools
- Access-Tipps
- Excel-Tipps
- Spielereien
- Kontakt
- Impressum
- Datenschutz
Meine Projekte:


Der neue Microsoft Office-Makroschutz und wie man Dateien aus dem Internet zulässt
Um den Schutz vor Makro-Vieren zu erhöhen, sperrt Mikrosoft Dateien, die über das Internet übertagen wurden und evtl. Makros enthalten könnten.
Das Problem
Beim Öffnen einer solchen Datei bekommt der Benutzer diese Meldung angezeigt, die er nicht einfach übergehen kann:

Er muss jetzt die Datei zuerst wieder schließen, im Windows-Explorer mit der rechten Maustaste im Kontextmenü die Eigenschaften öffnen und dann auf 'Zulassen' klicken:

Wird eine Datei von einer anderen Anwendung geöffnet (z. B. in einer Access-Anwendung eine Word-Vorlage aufgerufen), kann es zu Fehlermeldungen im Programmablauf kommen, die nicht immer "sprechend" sind und auf den ersten Blick das Problem nicht erkennen lassen.
Wie kennzeichnet Microsoft Makrodateien?
An jede Datei aus dem Internet wird ein »Alternate Data Stream«, der »Zone.Identifier« angehängt, der für Dateien aus dem Internet die ZoneId mit dem Wert 3 (=Internet) enthält. Dieses Anhängsel wird auch »Mark oft the Web« genannt. Man kann sie sich über die Eingabeaufforderung ansehen:

Wie wird man die Marke wieder los?
Man kann – wie oben beschrieben – in den Eigenschaften auf 'Zulassen' klicken, in der per Eingabeaufforderung im Notepad geöffneten Datei die ZoneID auf 1 ändern oder die Datei auf ein Laufwerk kopieren, das keine Alternate Data Streams kennt, z. B. FAT. Ansonsten ist mit den üblichen Bordmitteln (Command-Line, VB-Script, VBA, FileSystemObject etc.) nichts zu machen, da der Alternate Data Stream keine Datei ist und nicht von den üblichen Verdächtigen (Kill, fso.DeleteFile etc.) erkannt oder behandelt wird.
Die Lösung
In der PowerShell gibt es das Unblock-File cmdlet, mit dem man Dateien automatisiert zulassen kann. Daher habe ich für mich, meine Kunde und meine Anwendungen eine Lösung geschrieben, die uns nicht übermäßig in unserer Arbeit stört. Einzige Voraussetzung: Der jeweilige Benutzer darf PowerShell- und VB-Skripte ausführen.
Dateien per Drag & Drop zulassen
Um eine oder mehrere Dateien, die gesperrt sind, zuzulassen, lässt man die Dateien auf ein VB-Skript fallen, das den folgenden Inhalt hat:
Set objArgs = WScript.Arguments Set objShell = CreateObject("Wscript.shell") If objArgs.Count = 0 Then MsgBox "Ziehen Sie alle Dateien, die zugelassen werden sollen, ..." _ , vbInformation, "Benutzungsanleitung:" Else For i = 0 To objArgs.Count - 1 objShell.run("powershell.exe -ExecutionPolicy Bypass Unblock-File -Path '" _ & objArgs(i) & "'") Next End If
Die Dateien müssen dazu irgendwo im Dateisystem abgelegt sein, Anhänge von E-Mails können nicht direkt verarbeitet werden.
Das PowerShell Cmdlet Unblock-File kann man auch direkt im VBA-Code einer Anwendung aufrufen, z. B. immer vor dem Öffnen einer Vorlage:
Public Function fUnblockFile(ByVal sFullName As String) As Boolean ' ---------------------------------------------------------------- ' Makro-Datei aus dem Internet über die PowerShell zulassen ' ---------------------------------------------------------------- Dim strCmd As String strCmd = """powershell.exe"" -ExecutionPolicy Bypass Unblock-File -Path '" _ & sFullName & "'" Call Shell(strCmd, vbHide) End Function
Download
Das (vollständige) VB-Skript können Sie sich auch als Textdatei herunterladen. Sie müssen dann nur die Dateiendung nach .vbs ändern, um es zu benutzen und ggf. für Ihre Zwecke anzupassen.
Vorlage für ein VB-Skript
(Datei: DateienZulassen.txt, ca. 1 KB)