online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon snailhouse vom 27.10.2020, 20:16 Options

Excel VBA: Modul per Makro importieren in geschütztes VBA-Projekt (Passwort bekannt)

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 schreiben

Antwort 1 von coros vom 28.10.2020, 07:36 Options

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.

 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 vom 29.10.2020, 00:00 Options

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

Antwort 3 von coros vom 29.10.2020, 04:56 Options

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.

Antwort 4 von snailhouse vom 29.10.2020, 20:39 Options

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:

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 If


Gruß
Jürgen

Ähnliche Themen

VBA Makrocode per Makro ändern
Catze  25.06.2007 - 96 Hits - 2 Antworten

Datei über VBA-Makro öffnen
andreas_3  09.09.2007 - 161 Hits - 2 Antworten

VBA-Excel-Makro, um Teile des Zelleninhaltes auszulesen
cancer77  07.09.2007 - 144 Hits - 7 Antworten

VBA Makro soll prüfen, ob Datei schreibgeschützt
andreas_3  24.01.2008 - 82 Hits - 1 Antwort

Excel VBA: Passwort und Blatt einblenden
snailhouse  08.02.2008 - 75 Hits - 2 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026