Häufig wird in Foren gefragt, wie man per VBA-Code auf VBA-Komponenten zugreifen
kann. Dies ist z.B. erforderlich, um aus kopierten Tabellenblättern oder kompletten
Mappen den enthaltenen VBA-Code zu entfernen oder um UserForms dynamisch zu gestalten
oder zentral gespeicherte VB-Module zu importieren oder diese zu exportieren. Auch
das Erstellen, Ergänzen oder Ändern von Event-Procedures (Ereignis-Prozeduren wie
z.B. Private Sub Worksheet_Change() für Aktionen beim Ändern eines Zellwertes etc.)
wird häufig benötigt.
Zunächst möchte ich ausdrücklich betonen, dass es nicht möglich ist, per VBA auf
ein geschütztes VB-Projekt zuzugreifen !
Diese Möglichkeit hat MS wohl aus Sicherheitsgründen bewusst ausgenommen, d.h. das
VB-Projekt muss grundsätzlich entsperrt sein !
Ob ein VB-Projekt geschützt ist, können Sie folgendermaßen überprüfen :
Sub VBProjektSchutz_Pruefen()
If Workbooks("IrgendEineMappe.xls").VBProject.Protection Then
MsgBox "VBA-Projekt ist geschützt !"
Else
MsgBox "VBA-Projekt ist NICHT geschützt !"
End If
End Sub
Den VB-Schutz müssen Sie ggf. zunächst im VB-Editor per » Extras » Eigenschaften
von VB-Projekt » Schutz entfernen :
In diesem Fenster müssen Sie dazu die Option „Projekt für Anzeige sperren“ deaktivieren
!
Falls Sie den Schutz wieder aktivieren (Option anhaken) bleibt das VB-Projekt zunächst
sichtbar. Der Schutz wird erst wieder wirksam, wenn Sie die Datei speichern, schließen
und erneut öffnen. Während einer Excel-Sitzung (bzw. solange die Datei geöffnet ist)
besteht keine Möglichkeit, den aktivierten Schutz sofort wieder wirksam werden zu
lassen.
Alternativen zum Entfernen des VB-Projektschutzes per VBA (per SENDKEYS-Methode),
die man zuhauf im Internet und in Excel-Foren findet, sind nicht empfehlenswert,
da sie „unkontrolliert“ Tastenkombinationen an Excel senden, deren Auswirkungen nicht
vorhersehbar sind : je nach Ausgangspunkt und Konfiguration beim Starten der SENDKEYS-Makros
bewirken diese Unterschiedliches, zudem sind diese Tastenkombinationen weder in den
regional unterschiedlichen Versionen (englisch, deutsch, französisch, etc...) noch
in den verschiedenen EXCEL-Versionen (Excel 97 / 2000 / 2002 / 2003 / 2007 / 2010)
vereinheitlicht !
Sicherheitseinstellungen („Zugriff auf VB-Projekt vertrauen“) ändern - manuell
Seit der Version Excel XP (2002) oder Excel 2003 wurde der Zugriff auf das VB-Projekt
per VBA zusätzlich standardmässig über eine Sicherheitseinstellung gesperrt. Beim
Versuch, per VBA auf das VB-Projekt (z.B. auf ein bestimmtes Modul oder auf ein UserForm)
zuzugreifen erscheint folgender Hinweis :
Laufzeitfehler ‚1004’ : Der programmatische Zugriff auf das Visual Basic-Projekt
ist nicht sicher
Dieser Meldung ist keine Fehlermeldung, sondern nur ein Hinweis darauf, dass der
Zugriff auf das VB-Projekt per VBA noch nicht explizit erlaubt wurde. Sie können
diese Einstellung sehr einfach selbst anpassen - diese Änderung ist nur einmalig
notwendig und bleibt dauerhaft gespeichert :
In Excel 2007 finden Sie diese Einstellungen etwas versteckt unter der » Office-Schaltfläche
⇨ Optionen ⇨ Vertrauensstellungscenter :
In Excel 2010 befindet sich diese Option hier : Datei ⇨ Excel-Optionen ⇨ Sicherheitscenter
⇨ Einstellungen Sicherheitscenter ⇨ Makros
Sicherheitseinstellungen ändern - per Registry (Policy / Sicherheitsrichtlinie)
ACHTUNG : Dieser Abschnitt richtet sich an administrative Personen. Die beschriebenen
Schritte sollten nur von versierten Profis durchgeführt werden. Ich übernehme keine
Verantwortung für die durch diese Schritte verursachten Auswirkungen !!
Die o.g. Einstellung wird beim Schließen von Excel in folgenden Registry-Key geschrieben,
falls dies nicht per Policy (Sicherheitsrichtlinie) untersagt ist :
[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security]
"AccessVBOM"=dword:00000000 ’ bzw : "AccessVBOM"=dword:00000001
HINWEIS : Diese Einstellung wird in vielen Firmen zentral per Policies deaktiviert,
so dass diese Einstellung entweder nicht geändert oder die Änderung nicht gespeichert
werden kann ! Diese Policy-Einstellung wird in der Registry unter folgendem Schlüssel
gespeichert, hier kann die Einstellung auch wieder deaktiviert werden (ACHTUNG :
Bearbeiten Sie die Registry-Einstellungen nur dann, wenn Sie sich über die Auswirkungen
bewusst sind ! Vergewissern Sie sich auch zunächst bei den IT-Verantwortlichen, ob
Sie berechtigt sind, diese Sicherheitsrichtlinie zu umgehen ! ) :
Die folgende Registry-Einstellung ignoriert die manuelle Änderung, indem immer wieder
ein Standard-Wert gesetzt wird :
[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Office\11.0\Excel\Security]
"AccessVBOM"=dword:00000000
Evtl. können Sie diese Einstellung manuell nicht ändern, da diese Option „ausgegraut“
ist. Auch das wird über eine Policy gesteuert.
Die folgende Registry-Einstellung ermöglicht es, den Wert für „Zugriff auf VB-Projekt
vertrauen“ wieder manuell zu verändern (nicht mehr ausgegraut) :
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Office\11.0\Excel\Security]
"AccessVBOM"=dword:00000000
Dabei steht der Wert 00000000 jeweils für DEAKTIVIERT und 00000001 für AKTIVIERT
!
Der Unterschlüssel \11.0\ bezieht sich auf Excel 2003 ! Für Excel 2007 ändern Sie
diesen Teil bitte in \12.0\ , für Excel 2010 in \14.0\ !!
Beachten Sie bitte auch, dass diese Einstellungen beim nächsten Laden der Policies
von einem Policy-Server (z.B. bei Anmeldung an eine Windows Server Active Directory)
evtl. wieder überschrieben werden !! Die aktuellen Sicherheitsrichtlinien können
Sie über die WINDOWS-Eingabeaufforderung gezielt wieder laden, sofern Sie mit dem
entsprechenden Server verbunden sind :
gpupdate /force
Links zum Thema :
(Weiterer Text folgt in naher Zukunft...)