Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1340to1344
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ich dreh gleich durch...

Ich dreh gleich durch...
29.11.2013 17:18:39
Melanie
Guten Abend zusammen,
nach zwei Stunden mühsamen Debugging bin ich immer noch nicht auf eine Lösung gekommen. Es geht um eine Funktion, die ich geschrieben habe, die ein Passwort auf ein VBA Projekt einer bestimmten Arbeitsmappe fügt.
Das Ganze sieht so aus:
Function setVBAProjectPassword(ByVal WB As Variant, PW As String) As Boolean
Set Application.VBE.ActiveVBProject = WB.VBProject
Application.VBE.CommandBars.FindControl(ID:=2578).Execute
SendKeys "^{PGDN}"
SendKeys "%a"
SendKeys "k"
SendKeys PW
SendKeys "{Tab}"
SendKeys PW
SendKeys "{Enter}"
setVBAProjectPassword = WB.VBProject.Protection
Debug.Print setVBAProjectPassword
'End
End Function
Zum Test der Funktion nutze ich folgende Methode:
Sub Test()
Dim wbExt As Variant
Set wbExt = Workbooks.Open("D:\test.xlsm")
setVBAProjectPassword wbExt, "a"
End Sub
Das kuriose an der ganzen Sache ist, dass wenn ich in der Funktion am ende "End" schreibe, also alle Makroaktivitäten beende, funktioniert es. Die test.xlsm bekommt ein VBA Passwort. Wenn ich das End weglasse, macht er den Passwortschutz auf meine aktuelle Arbeitsmappe (ThisWorkbook).
Hat irgendjemand eine Idee was da los ist?!!
Danke :-/

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Na, ganz einfach - du hast das angewiesen, ...
29.11.2013 21:10:04
Luc:-?
…Melanie;
allerdings sollte das Debug.Print trotzdem erfolgen, aber evtl kommt's ja auch nicht mehr dazu. Mit End ist's jedenfalls mit jeder VBA-Tätigkeit ab sofort vorbei.
Ein VBA-Projekt-PW kann nicht auf diese Weise gesetzt wdn; es kann ja auch nicht so ausgelesen wdn. Deine AusleseTricks wird sicher hier auch niemand ernsthaft unterstützen wollen, denn das sieht wohl kein Pgmierer gern, dass jemand seinen VBA-Schutz einfach aufhebt, obwohl es da ja bekanntlich noch viel einfachere Methoden gibt.
Überleg' dir am Besten eine andere Organisation, um das zu erreichen, was der Anlass für diese Verrenkungen sein mag!
Außerdem wendet man Fktt normalerweise nicht so an, wie du es tust. Nachlesen!
Gruß Luc :-?

Anzeige
AW: Na, ganz einfach - du hast das angewiesen, ...
29.11.2013 21:12:22
Melanie
?!?! Auslesetricks? Die Funktion setzt ein PW und liest es nicht aus. Wennde nicht mal Source lesen kannst, solltest dir eine Antwort verkneifen.

...und was soll dann der Quatsch ...
29.11.2013 21:28:35
Luc:-?
setVBAProjectPassword = WB.VBProject.Protection? Das hat mich schließlich erst auf die Idee gebracht, dass du eigentl auslesen willst, obwohl dass natürlich so nicht geht, da hast du recht! Bau das in eine normale Subroutine ein und es könnte fktionieren, wenn du die richtigen Tasten sendest.
Ansonsten kannst du dir deinen kratzbürstigen Ton gern verkneifen — du hast ja gefragt und offensichtlich noch wenig Ahnung vom Unterschied zwischen Funktions- und SubProzeduren.
Ansonsten gilt das, was ich bereits zuvor geschrieben hatte.
Luc :-?

Anzeige
AW: ...und was soll dann der Quatsch ...
29.11.2013 21:32:49
Melanie
setVBAProjectPassword = WB.VBProject.Protection wird true, wenn die protection aktiv ist und wird false, wenns nicht geklappt hat. So einfach.

AW s.u. und Zusatz zu Fkt.
29.11.2013 22:48:14
Luc:-?
Eine Fkt gibt im Ggsatz zu einer SubProz einen Wert zurück, in deinem Fall True oder False. Wenn man diese Rückgabe in einer SubProz auswerten will, muss man sie einer entsprd Variablen zuweisen, was du nicht getan hast → du hast den Wert nur in der Fkt selbst mit Debug.Print ausgegeben. So wird vermutlich die ganze Aktion auf das Wbook bezogen, nicht das geöffnete Projekt-Eigenschaften-Fenster. Durch End verhinderst du die Rückkehr ins HptPgm, wodurch das Ganze auch so fktioniert. Diese Rückkehr müsste wenigstens verzögert wdn, denn dein Pgm läuft weiter, während noch die TastenCodes gesendet wdn. Das dürfte dann die HptUrsache sein.
Luc :-?

Anzeige
AW: AW s.u. und Zusatz zu Fkt.
29.11.2013 23:01:38
Melanie
... aber wenn End kommt ist doch alles schon vorbei, oder nicht? Die Tasten sende ich doch davor. Die ganzen Tastenkommandos kommen auch an, nur wird das falsche Projekt passwortgeschützt, nämlich das von ThisWorkbook, nicht das von wbExt.
:-/

Ja, das resultiert wohl aus deinem Gesamt-...
29.11.2013 23:47:13
Luc:-?
…Aufbau, Melanie;
mit End wdn alle lfd Pgmm beendet, die TastenCodes kommen so beim richtigen Adressaten an, allerdings ist mir nicht klar, ob Debug.Print dann auch das richtige Ergebnis liefert.
Mitunter hilft es, wenn die TastenCodes schon gesendet wdn, bevor ihr Adressat zV steht. Das müsstest du mal ausprobieren.
Ansonsten ist es sicher besser, du schreibst das alles als SubProz und stellst abschließend fest (per MsgBox oder Debug.Print ), ob das Projekt nun geschützt ist.
Die Anwendung von SendKeys ist immer etwas problematisch, da kann viel schief gehen. Da man so etwas wie das, was du hier versuchst, eigentlich nur macht, um das VBProjekt nachträglich zu editieren, nicht, um es generell mit PW-Schutz zu versehen – denn das Projekt bleibt offen, solange die Mappe offen ist, und ist somit solange nicht geschützt – wäre es sicher besser, wenn du dir eine andere Organisation (zur Lösung deines eigentlichen Problems, das ich nicht kenne) einfallen ließest.
Gruß Luc :-?

Anzeige
AW: Na, ganz einfach - du hast das angewiesen, ...
29.11.2013 21:24:01
Melanie
und was ist denn bitte an meiner Funktionsnutzung falsch?!?! :D lächerlich

Du hast so die Tasten an die Mappe, nicht ...
29.11.2013 21:30:48
Luc:-?
…an das VBA-Projekt gesendet! Jetzt darf ich wohl lachen! :->>
Luc :-?

AW: Du hast so die Tasten an die Mappe, nicht ...
29.11.2013 21:33:25
Melanie
Daran liegts nicht. Passwort wird ja eingegeben etc. ... es wird nur ins falsche projekt gesetzt.

Ja, das ist richtig, deine Fkt ermittelt ...
29.11.2013 22:34:01
Luc:-?
…vordergründig, ob der Schutz eingestellt ist, Melanie;
(du kannst einen ganz schön verwirren mit …bekomme ich ein Passwort… und Debug.Print!) aber auf diese Weise wdn die TastenCodes an das aktuelle Fenster gesendet, also das, was gerade offen ist und oben liegt. Das ist bei der Methode nunmal so. Du musst also sicherstellen, dass im Moment des Sendens die VBA-Oberfläche das aktive Fenster ist.
Umgekehrt ist's übrigens genauso — da können leicht mal TastenAnschläge im Code statt auf dem Blatt landen (mir beim Testen schon passiert).
Luc :-?

Anzeige
Übrigens, falls du die gleiche Melanie bist, ...
29.11.2013 23:52:03
Luc:-?
…hast du hier auch noch nicht geantwortet. Das mögen wir ja nun besonders gern!
Falls du nicht diese Melanie sein solltest → vergiss es! :-]
Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige