Modulaktualisierung trotz VBA-Passwortschutz
13.10.2016 08:56:11
Wolfgang
viele meiner Kollegen arbeiten mit einer Excelmappe von mir und es wird langsam aufwendig, nach jeder Modulaktualisierung alle mit der neuen Mappe zu versorgen.
Die Mappe soll also beim Start prüfen, ob es eine Aktualisierung gibt und falls ja, alle Module rausschmeißen und neu importieren.
Das klappt auch wunderbar solange das VBA-Projekt nicht mit einem Passwort geschützt ist. Da ich den ganzen Code aber nicht ungeschützt herausgeben kann, ist das VBA-Projekt mit einem Passwort geschützt.
Sobald ich dann jedoch versuche auf eine Eigenschaft von "ThisWorkbook.VBProject.VBComponents(i)" zuzugreifen, läuft der Code auf einen Fehler.
Die Excelmappe müsste also für den Fall, das ein Update zur Verfügung steht, das VBA-Projekt mit einem Passwort öffnen und dann erst das Update durchführen.
Auch das funktioniert mit folgendem Code einwandfrei:
Private Function LogInVBAProject()
SendKeys ("%{F11}"), True
SendKeys ("%xi" & "Password" & "{ENTER}{ENTER}%{q}"), True
End Function
Auch wenn ich SendKeys nicht mag, ich habe bisher leider keine andere Möglichkeit gefunden.
Das Problem, vor dem ich stehe und das ich bis jetzt nicht gelöst bekommen habe:
Nachdem das Passwort einmal eingegeben worden ist, kommt man auch ohne erneute Eingabe des Passwortes in den VBA-Editor und kann den Code einsehen.
Die Excelmappe muss zuerst einmal geschlossen und neu geöffnet werden, um dass zu verhindern.
Selbst wenn ich den Passwortschutz komplett aufhebe und neu setze, ändert dies an dem Verhalten von Excel nichts. Sobald man einmal das Passwort für das VBA-Projekt eingegeben hat oder den Projektschutz neu setzt, kommt man so lange ohne erneute Eingabe in das VBA-Projekt, bis die Arbeitsmappe einmal geschlossen und neu geöffnet wurde.
Beispielcode für Herausnehmen und Setzen des VBA-Schutzes:
Private Function UnlockVBAProject()
SendKeys ("%{F11}"), True
SendKeys ("%xi" & "Password" " & "{ENTER}" & "{TAB}{RIGHT}{TAB} " & _
"{TAB}" & "{BACKSPACE}{TAB}{BACKSPACE}{TAB}{ENTER}%{q}"), True
End Function
Private Function LockVBAProject()
SendKeys ("%{F11}"), True
SendKeys ("%xi+{TAB}{RIGHT}{TAB}{TAB}" & "Password" & _
"{TAB}" & "Password" & "{TAB}{ENTER}%{q}"), True
End Function
Gibt es eine Möglichkeit, Excel / diese Arbeitsmappe dazu zu zwingen, dass das Passwort bei erneutem Aufruf des VBA-Projektes neu abgefragt wird oder alternativ Module trotz VBA-Passwortschutz gelöscht und neu importiert werden können?
Danke für Eure Ideen und Vorschläge.