Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Excel VBA: Modul per Makro importieren in geschütztes VBA-Projekt (Passwort bekannt)
Frage
Hallo zusammen,
ich habe ca. 1000 xls.-Dateien, die aus einer Vorlage generiert wurden und die alle die selben Module enthalten.
Damit die Makros nicht von den Benutzern verändert werden können, habe ich das Projekt mit einem Passwort geschützt.
Nun muss ich aber eines der Module tauschen (das alte löschen und das neue importieren), was aber nicht funktioniert, weil das Projekt geschützt ist.
<b>Meine Frage:</b>
Wie kann ich die das Projekt per VBA freigeben (d.h. quasi das Passwort eingeben), damit mein Makro das Modul importieren kann?
P.S. Ich habe bereits Ansätze mit <i>SendKeys</i> gesehen, aber wie stelle ich dann sicher, dass im richtigen Projekt versucht wird, das Passwort einzugeben??
Für Eure Mühe im voraus vielen Dank!
Antwort 1 von coros
Hallo Jürgen,
die SendKeys-Methode ist schon der richtige Weg. Um das Passwort in einer anderen Datei zuübergeben, muss diese Arbeitsmappe eigentlich nur aktiviert werden. Nachfolgendes Makro wechselt zur Datei „Datei_mit_dem_zu_ändernden_Makro.xls“ und übergibt das Passwort „Testpasswort“ und entsperrt dadurch den VBA-Schutz.
Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.
Dateiname und Passwort musst Du natürlich anpasssen.
Bei Fragen melde Dich.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
die SendKeys-Methode ist schon der richtige Weg. Um das Passwort in einer anderen Datei zuübergeben, muss diese Arbeitsmappe eigentlich nur aktiviert werden. Nachfolgendes Makro wechselt zur Datei „Datei_mit_dem_zu_ändernden_Makro.xls“ und übergibt das Passwort „Testpasswort“ und entsperrt dadurch den VBA-Schutz.
Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.
Option Explicit
Sub VBA_Passwort_aufrufen()
Workbooks("Datei_mit_dem_zu_ändernden_Makro.xls").Activate
SendKeys "%{F11}%xi{TAB 9}" & "Testpasswort" & "{tab}{enter 2}%q"
End Sub Dateiname und Passwort musst Du natürlich anpasssen.
Bei Fragen melde Dich.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von snailhouse
Hallo Oliver,
danke für die Antwort, aber leider hat's so bei mir nicht geklappt (die Anpassungen habe ich natürlich gemacht).
Ich habe es heute auch einmal in zwei Schritten versucht, den Code habe ich aber leider nicht hier zuhause, ich werde ihn morgen mal posten. So hat es manchmal funktioniert, der Fehler war nicht reproduzierbar. Wollte nur eine kurze Rückmeldung geben.
Gruß
Jürgen
danke für die Antwort, aber leider hat's so bei mir nicht geklappt (die Anpassungen habe ich natürlich gemacht).
Ich habe es heute auch einmal in zwei Schritten versucht, den Code habe ich aber leider nicht hier zuhause, ich werde ihn morgen mal posten. So hat es manchmal funktioniert, der Fehler war nicht reproduzierbar. Wollte nur eine kurze Rückmeldung geben.
Gruß
Jürgen
Antwort 3 von coros
Hallo Jürgen,
was hat nicht funktioniert? Mein Makro aus AW1 oder das was Du daraus gemacht hast?
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
was hat nicht funktioniert? Mein Makro aus AW1 oder das was Du daraus gemacht hast?
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 4 von snailhouse
Hallo Oliver,
vmtl. lag das Problem daran, dass das Projekt 2x im Projektexplorer erscheint.
Mittlerweile funktioniert es mit untenstehendem Code, den ich erweitert habe, so dass das Passwort auch gleich entfernt wird, damit ich nächstes mal nicht das gleiche Problem wieder habe..
Problematisch ist, dass man das Makro von einem "definierten Stand" starten muss, d.h. der Visual Basic Editor darf nicht geöffnet sein.
Wenn ich's nicht machen müßte würde ich das nicht machen...
Die Bildschirmaktualisierung habe ich bewusst eingeschaltet, damit man noch die Chance hat zu sehen, was das Makro gerade so treibt..
Ohne Gewähr :-) hier also der Code:
Gruß
Jürgen
vmtl. lag das Problem daran, dass das Projekt 2x im Projektexplorer erscheint.
Mittlerweile funktioniert es mit untenstehendem Code, den ich erweitert habe, so dass das Passwort auch gleich entfernt wird, damit ich nächstes mal nicht das gleiche Problem wieder habe..
Problematisch ist, dass man das Makro von einem "definierten Stand" starten muss, d.h. der Visual Basic Editor darf nicht geöffnet sein.
Wenn ich's nicht machen müßte würde ich das nicht machen...
Die Bildschirmaktualisierung habe ich bewusst eingeschaltet, damit man noch die Chance hat zu sehen, was das Makro gerade so treibt..
Ohne Gewähr :-) hier also der Code:
Workbooks.Open (strPfadAktuell & strDateiNameAktuell)
Set oWBExtern = GetObject(strPfadAktuell & strDateiNameAktuell)
oWBExtern.Activate
Application.ScreenUpdating = True
If oWBExtern.VBProject.Protection = 1 Then
SendKeys ("%{F11}"), True ' Visual Basic Editor öffnen
For iZaehlerSchleifeUnprotect = 1 To 2 ' BEGINN, Schleife erforderlich, da Projekt 2x im Projekt-Explorer auftritt (!?)
SendKeys ("^r"), True ' in den Projekt-Explorer wechseln
SendKeys ("c"), True ' Zum Projekt beginnend mit "c" springen
SendKeys ("{ENTER}" & "passwort" & "{ENTER}"), True ' ENTER=Projekt öffnen-> Passwortfenster öffnet, Passwort übergeben, bestätigen mit ENTER
Next iZaehlerSchleifeUnprotect ' ENDE, Schleife erforderlich, da Projekt 2x im Projekt-Explorer auftritt
' Nachdem in "beide" Projekte das Passwort eingegeben wurde ...
SendKeys ("%xi" & "^{TAB}" & "{TAB}" & "%a" & "%k" & "{DEL}" & "%s" & "{DEL}" & "{TAB}" & "{ENTER}"), True ' Erklärung s. Folgezeilen
' %xi = wechslen zu Projekteigenschaften
' ^{TAB} = wechslen zu Projekteigenschaften, Schutz
' %a = wechseln zu "Projekt für Anzeige sperren", Häkchen wird geändert
' %k = wechseln in Passwortfeld 1
' {DEL} = Passwortfeld1 löschen
' %s = wechseln in Passwortfeld 2
' {DEL} = Passwortfeld2 löschen
' {TAB} = Springen zum OK-Button
' {ENTER}= Bestätigen OK-Button
SendKeys ("%{F4}"), True ' Visual Basic Editor schließen
End IfGruß
Jürgen

