Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1288to1292
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

Per VBA feststellen,ob Datei passwortgeschützt ist

Per VBA feststellen,ob Datei passwortgeschützt ist
04.12.2012 15:09:46
John
Hallo zusammen,
ich möchte ein Makro schreiben, dass eine Excel-Arbeitsmappe öffnet. Diese kann eventuell passwortgeschützt sein. Falls dem so ist, soll der Anwender das Passwort eingeben (damit die Datei geöffnet werden kann), und außerdem soll das Passwort dann in Zelle A1 der Tabelle eingetragen werden.
Ich habe das folgendermaßen gelöst:
Sub test()
eingabe = InputBox("Wie lautet das Passwort für die Arbeitsmappe?")
Workbooks.Open "c:\testmich.xlsx", Password:=eingabe
Range("A1").Value = eingabe
End Sub

Dadurch habe ich der Variable "eingabe" das Passwort zugeordnet und kann es später im Code beliebig verwenden.
So weit, so gut. Ich will aber, dass die Eingabeaufforderung nur dann erscheint, wenn die Datei wirklich passwortgeschützt ist. Falls nicht, soll sie nur geöffnet werden (der Eintrag in Zelle A1 entfällt dann).
Natürlich könnte ich die Datei mit einem normalen workbooks.open-Befehl (also ohne den Teil "Password:=eingabe") öffnen und den Benutzer das Passwort dann in den Standard-Dialog von Excel eingeben lassen, aber dann könnte ich es ja keiner Variable zuordnen.
Der langen Rede kurze Frage: Gibt es eine Möglichkeit, per Excel-VBA festzustellen, ob eine nicht gerade geöffnete Datei passwortgeschützt ist? Dann könnte ich das nämlich prüfen und die entsprechenden Passwort-Routinen dann nur ausführen lassen, wenn tatsächlich ein Passwortschutz vorliegt.
Vielen Dank für Eure Hilfe!

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Das Ganze ohne Kopf u.Schwanz ...
04.12.2012 21:38:26
Luc:-?
…unter Ereignisproz Workbook_Open notieren, John,
und es mal mit If Me.Protected Then oder so ähnl versuchen (Eigenschaften von Workbook in der VBE-Hilfe). Hab' das nicht genau im Kopf u.bin zZ auf Linux, kann also nicht nachsehen.
Gruß Luc :-?

AW: Das Ganze ohne Kopf u.Schwanz ...
05.12.2012 09:08:18
John
Guhde,
die Idee hatte ich auch schon. Es gibt da einen Befehl "ThisWorkbook.HasPassword", aber der funktioniert nur mit Dateien, die bereits geöffnet sind. Mein Problem ist ja, dass ich herausfinden möchte, ob eine nicht geöffnete Datei passwortgeschützt ist oder nicht.
Gruß,
John

Anzeige
Oh je, da sehe ich schwarz, aber ...
05.12.2012 14:16:36
Luc:-?
…das ist doch eigentlich gar nicht nötig, John,
wenn du die Datei ohnehin öffnest!? Oder ist deine Routine derart, dass dann nicht geöffnet wdn muss, wenn kein Passwort angegeben wurde, weil du ja die Datei nur wieder schützen willst, wenn sie auch geschützt war? Was ist dann aber mit Blattschutz? Der Mappenschutz ist ja das Eine, den kann man mit .HasPassword feststellen, das Andere ist der Blattschutz, der auch ohne Mappenschutz vorhanden sein könnte. Dann müsstest du die Datei auf jeden Fall öffnen und das geht dann wohl so o.ä. wie von mir fälschlich für die Mappe angesetzt.
Gruß Luc :-?

Anzeige
AW: Oh je, da sehe ich schwarz, aber ...
05.12.2012 14:35:49
John
Naja, der Blattschutz ist für mein Problem eigentlich irrelevant, mir geht's wirklich ausschließlich um den Mappenschutz (also konkret um das Passwort, das Du eingeben musst, um die Datei überhaupt öffnen zu können).
Nehmen wir mal an, die Datei ist nicht passwortgeschützt. Dann soll sie einfach geöffnet werden.
Nehmen wir aber mal an, sie ist mit dem Passwort "blah" geschützt. Dann könnte ich natürlich den normalen Workbooks.Open-Befehl verwenden, da dann Excel automatisch den Standard-Passwortabfragedialog bringen würde.
Ich möchte aber im späteren Verlauf des Codes noch weitere Aktionen mit dem Passwort durchführen und muss es darum irgendwie an eine Variable übergeben. Deshalb habe ich den Weg mit der Inputbox gewählt:
1.) Makro wird gestartet
2.) User gibt "blah" in die Inputbox ein
3.) dieses "blah" wird dann der Variable "eingabe" übergeben und kann für spätere Aktionen im Code benutzt werden.
Deshalb komme ich, so wie ich es sehe, an der Inputbox nicht vorbei. Diese soll aber eben nur dann erscheinen, wenn die zu öffnende Datei einen Passwortschutz hat... w

Anzeige
Na ja, wenn der User das selber machen muss, ...
05.12.2012 14:49:28
Luc:-?
…John,
dann kann er die doch auch öffnen, was du ja ohnehin erwartest. Während des Öffnens wird das Workbook_Open-Ereignis ausgelöst, das man mit der zugehörigen Ereignisprozedur wie beschrieben nutzen kann. Dort fragst du das einfach mit If Me.Has Password Then ab und machst davon dann alles Folgende abhängig, so auch bei Erfüllung (True) eingabe = InputBox(…).
Gruß Luc :-?

AW: Na ja, wenn der User das selber machen muss, ...
05.12.2012 20:35:59
schauan
Hallo,
also, wenn die Datei passwortgeschützt ist, dann wird sie wohl nicht soweit aufgehen, dass das workbook_open anläuft :-(
Grüße, André

AW: Na ja, wenn der User das selber machen muss, ...
06.12.2012 08:57:51
John
Exakt, das Workbook_Open-Ereignis läuft erst nach erfolgreicher Eingabe des Passworts an... aber das ist für meine Zwecke ja zu spät...

Anzeige
Ich dachte an Mappenschutz, aber wenn ...
06.12.2012 15:14:43
Luc:-?
…das so ist, ist's wohl hoffnungslos.
Gruß Luc :-?

Man könnte dann den Text der ...
06.12.2012 15:16:56
Luc:-?
InputBox ja so formulieren, dass auch keine Eingabe erfolgen kann, und dann davon die weitere Reaktion abhängig machen.
Gruß Luc :-?

Kapiere den Sinn nicht,..
04.12.2012 21:38:40
Matze,Matthias
Hallo John,
du öffnest mit einer Inputbox aus Mappe1 eine Weitere Mappe2 deren Passwort "du kennst",
toll so sollte es ja auch immer sein.
Sub test()
Dim Eingabe As String
Eingabe = InputBox("Wie lautet das Passwort für die Arbeitsmappe?")
Workbooks.Open "c:\Archiv\PWgeschützt.xlsx", Password:=Eingabe
Worksheets("Tabelle1").Range("A1").Value = Eingabe 'anpassen
End Sub
Nun willst du die weitere Mappe2 abfragen ob diese ein Passwort hat,warum?
Wenn Mappe2 KEIN Passwort hat und du den Code ausführst , kannst du in die Inputbox schreiben was du willst, die Datei Mappe2 wird geöffnet, wenn Sie eines hätte und du es nicht weist,
dann: ....................ohne Worte
Matze

Anzeige
AW: Kapiere den Sinn nicht,..
05.12.2012 09:02:23
John
Hi Matze,
ich gebe zu, das klingt ein wenig seltsam. Der Grund ist aber ein ganz banaler:
Ich habe ein Excel-basiertes Arbeitszeiterfassungsprogramm für meinen Arbeitgeber geschrieben. Es wird momentan von mehreren 100 Anwendern benutzt, die es teilweise passwortgeschützt haben und teilweise auch nicht.
Jetzt habe ich in dem Ding einen Bug gefunden, möchte aber von einer kompletten Neuinstallation absehen, weil ich das so vielen Leuten nicht zumuten möchte. Stattdessen habe ich eine Updateroutine geschrieben, die aus einem "jungfräulichen", korrekten Zeiterfassungsprogramm (nennen wir es mal "Datei A") besteht. Im Rahmen dieses Updates muss natürlich die bisherige Version (nennen wir sie "Datei B") geöffnet werden, die darin bereits erfassten Daten müssen dann in Datei A eingetragen werden, und zum Schluss muss Datei B mit Datei A überschrieben werden.
Da ich für Datei A dann einen "save as"-Befehl benötige, muss ich in diesen Befehl irgendwie das Passwort von Datei B einbauen, damit auch die "geupdatete" Version des Programms mit dem gleichen Passwort geschützt ist.
Im Grunde geht es mir also gar nicht darum, das Passwort herauszufinden, um es in Zelle A1 zu schreiben, sondern um es irgendwie in einen "save as"-Befehl zu integrieren. War mir nur zu viel Arbeit, die ganze Story in meiner Ursprungsmeldung zu schreiben. :)
Gruß,
John

Anzeige
AW: Kapiere den Sinn nicht,..
05.12.2012 20:52:35
schauan
Hallo zusammen,
habe hier mal einen Lösungsansatz zusammengestellt. Das MAkro versucht eine passwortgeschützte Datei zu öffnen. Durch das Passwort "" wird ein Fehler 1004 erzeugt.
Anschließend kommt - mit kurzer Verzögerung - normalerweise die Passwortabfrage. Durch dei Fehlerbehandlung und das set ... nothing wird das Dateiobjekt aber schneller wieder zurückgesetzt.
Nimmt man in dem Makro statt der Passwortgeschützten Datei eine ohne, dann wird die geöffnet.
In der Fehlerbehandlung müsste man nun die Passwortabfrage einbauen, das passwort einem strPass übergeben und dann entweder nochmal öffnen oder mit resume zurückspringen. Für den Rücksprung müsste dann natürlich das Passwort nicht "" sein, sondern strPass. Das Set ... Nothing muss aber in der Reihenfolge vorher drinbleiben. Kommentierung, Variablendeklarationen und andere Schönheiten überlasse ich heute mal dem Fragesteller ;-)
Private Sub WorkOpen()
On Error Resume Next
Set t1 = Workbooks.Open(Filename:="D:\Test\Book1.xlsx", Password:="")
errorhandler:
If Err Then
Set t1 = Nothing
MsgBox "Datei geschützt!"
End If
End Sub
Grüße, André

Anzeige
AW: Kapiere den Sinn nicht,..
06.12.2012 09:43:49
John
Der Wahnsinn!!! Ich hab' Deine Idee folgendermaßen in meinen Code integriert:
Sub makro()
IstGeschützt = "nein"
On Error Resume Next
Set t1 = Workbooks.Open(Filename:="c:\testmich.xlsx", Password:="")
errorhandler:
If Err Then
Set t1 = Nothing
IstGeschützt = "ja"
eingabe = InputBox("Wie lautet das Passwort?")
End If
On Error GoTo problem
If IstGeschützt = "ja" Then Workbooks.Open Filename:="c:\testmich.xlsx", Password:=eingabe
GoTo ende
problem:
MsgBox "Das war nix..."
ende:
End Sub
...und es funzt! Tausend Dank!!!

Gute Idee unter den gegebenen ...
06.12.2012 15:21:05
Luc:-?
…Umständen, André (& John);
leider zu spät bemerkt! ;-)
Gruß Luc :-?

Anzeige
AW: Gute Idee unter den gegebenen ...
06.12.2012 16:21:30
John
Macht doch nix ;) Trotzdem vielen Dank, dass Du Dich auch drangesetzt hast...

AW: Kapiere den Sinn nicht,..
06.12.2012 17:09:16
schauan
Hallo John,
freut mich, dass es klappt. ;-)
Grüße, André

118 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige