DatenbankManufaktur

Anwendungen so individuell wie Ihr Unternehmen   –   Office- und VBA-Erfahrung seit 1995

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:

Makrodatei blockiertZum Vergrößern auf das Bild klicken

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:

Makrodatei zulassenZum Vergrößern auf das Bild 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:

Mark-of-the-Web anzeigenZum Vergrößern auf das Bild klicken

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)