Supportnet / Forum / Tabellenkalkulation
Makro mit Passwort schützen
Frage
Hallo, ihr fleißigen Helfer!
Ich habe mir in Excel eine aufwendige Mitarbeiterkartei angelegt.
Am Jahresende möchte ich alle eingegebenen Daten löschen. Dazu habe ich mir ein Steuerelement mit einem Makro eingebaut, mit dem ich auf Knopfdruck alle Daten lösche.
Meine Frage ist. Kann ich dieses Steuerelement durch ein Passwort schützen, so dass nicht jeder aus Versehen diese Daten löschen kann?
Vielen Dank im Voraus
Mit freundlichen Grüßen
HJ
Antwort 1 von peko
Hallo Hansel!
Mit Alt+F11 wechselst du zu VBA.
Danach klickst du mit der rechten Maustaste auf das zu schützende Modul.
Dann: Eigenschaften von VBAProject
Registerkarte Schutz wählen.
Den Rest schaffst du dann schon allein!
Gruß
peko
Mit Alt+F11 wechselst du zu VBA.
Danach klickst du mit der rechten Maustaste auf das zu schützende Modul.
Dann: Eigenschaften von VBAProject
Registerkarte Schutz wählen.
Den Rest schaffst du dann schon allein!
Gruß
peko
Antwort 2 von coros
Moin,
ich habe die Frage anders als @Peko, der ja beschrieben hat, wie man das VBA-Projekt schützt, verstanden. Ich sehe das so, dass Hansel, bevor die Daten endgültig gelöscht werden, eine Passwortabfrage erscheint. Bei richtiger Eingabe werden die Daten gelöscht, bei falscher Eingabe nicht.
Nachfolgend mal ein Beispiel, wie man das realisieren könnte. Ein Beispiel nur deshalb, weil @hansel sein bestehendes Makro leider nicht aufgeführt hat.
Nachfolgender Beispielcode muss ganz am Anfang Deines Makros eingefügt werden.
Wie bereits geschrieben, wäre Dein Makro bekannt, hätte man das gleich in Dein Makro einarbeiten können.
Ich hoffe, Du meintest das so. 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.
ich habe die Frage anders als @Peko, der ja beschrieben hat, wie man das VBA-Projekt schützt, verstanden. Ich sehe das so, dass Hansel, bevor die Daten endgültig gelöscht werden, eine Passwortabfrage erscheint. Bei richtiger Eingabe werden die Daten gelöscht, bei falscher Eingabe nicht.
Nachfolgend mal ein Beispiel, wie man das realisieren könnte. Ein Beispiel nur deshalb, weil @hansel sein bestehendes Makro leider nicht aufgeführt hat.
Nachfolgender Beispielcode muss ganz am Anfang Deines Makros eingefügt werden.
Dim varPW As Variant
'Variable, in die das Passwort, das in eine Inputbox eingetragen wird, geschrieben wird.
varPW = InputBox("Diese Funktion ist nur berechtigten Personen erlaubt und daher mit einem Passwort geschützt.")
'Wenn die Variable leer ist (leer, wenn kein Passwort eingegeben wurde) oder wenn die Variable _
den Zustand "False" hat (False, wenn die Abbrechen-Schaltfläche betätigt wurde), dann Prozedur beenden
If varPW = "" Or varPW = False Then Exit Sub
'Abfrage ob eingetragenes Passwort korrekt ist. Wenn das Passwort korrekt war, eine Meldung am _
Bildschirm ausgeben. Meldung hier nur für dieses Beispiel. Anstelle der Zeile mit der Messagebox-Funktion, _
müsste dann das weitere Makro zwischen der Zeile mit der "If-Anweisung" und dem Wort "Else" aufgeführt werden
If varPW = "Hier das Passwort" Then
'Anstelle der MessageBox-Ausgabe die Funktionen, also die Löschfunktionen, die dann ausgeführt werden sollen, _
hier eintragen.
MsgBox "Passowrt O.K."
Else
MsgBox "Das war leider das falsche Passwort", vbCritical, "Passwortfehler..."
End If
Wie bereits geschrieben, wäre Dein Makro bekannt, hätte man das gleich in Dein Makro einarbeiten können.
Ich hoffe, Du meintest das so. 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 3 von hansel
Hallo peko, hallo oliver!
Vielen Dank für eure super schnellen Antworten!
Zu Peko: Kriege das irgendwie nicht hin. Wenn ich das VBA Projekt durch Passwort schütze, kann das Steuerelement trotzdem ohne Nachfrage den Befehlt "Löschen der Daten" durchführen.
Zu Oliver: So soll es aussehen. Kriege den Code nicht so richtig eingebaut. Habe nicht die große Ahnung von VBA. Das Makro habe ich nur durch aufzeichnen so hinbekommen.Würde es Dir viel ausmachen, mir den Code in mein Makro einzubauen?
Das Makro:
Sub Daten_löschen()
'
' Daten_löschen Makro
' Makro am 29.12.2007 von Hans-Jörg Müller aufgezeichnet
'
'
Sheets("Lieferscheine").Select
Range("B13:BI43").Select
ActiveWindow.SmallScroll Down:=9
Range("B13:BI43,B52:BI80").Select
Range("BI52").Activate
ActiveWindow.SmallScroll Down:=10
Range("B13:BI43,B52:BI80,B89:BI119").Select
Range("B89").Activate
ActiveWindow.SmallScroll Down:=6
Range("B13:BI43,B52:BI80,B89:BI119,B128:BI157").Select
Range("BI128").Activate
ActiveWindow.SmallScroll Down:=5
Range("B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196").Select
Range("B166").Activate
ActiveWindow.SmallScroll Down:=10
Range("B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196,B205:BI234").Select
Range("BI205").Activate
ActiveWindow.SmallScroll Down:=9
Range("B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196,B205:BI234,B243:BI273" _
).Select
Range("B243").Activate
ActiveWindow.SmallScroll Down:=6
Range( _
"B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196,B205:BI234,B243:BI273,B282:BI312" _
).Select
Range("BI282").Activate
ActiveWindow.SmallScroll Down:=7
Range( _
"B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196,B205:BI234,B243:BI273,B282:BI312,B321:BI350" _
).Select
Range("B321").Activate
ActiveWindow.SmallScroll Down:=10
Range( _
"B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196,B205:BI234,B243:BI273,B282:BI312,B321:BI350,B359:BI389" _
).Select
Range("BI359").Activate
ActiveWindow.SmallScroll Down:=10
Range( _
"B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196,B205:BI234,B243:BI273,B282:BI312,B321:BI350,B359:BI389,B398:BI427" _
).Select
Range("B398").Activate
ActiveWindow.SmallScroll Down:=8
Range( _
"B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196,B205:BI234,B243:BI273,B282:BI312,B321:BI350,B359:BI389,B398:BI427,B436:BI466" _
).Select
Range("BI436").Activate
Selection.ClearContents
End Sub
Vielen Dank nochmal an Euch!
MfG
Hans-Jörg
Vielen Dank für eure super schnellen Antworten!
Zu Peko: Kriege das irgendwie nicht hin. Wenn ich das VBA Projekt durch Passwort schütze, kann das Steuerelement trotzdem ohne Nachfrage den Befehlt "Löschen der Daten" durchführen.
Zu Oliver: So soll es aussehen. Kriege den Code nicht so richtig eingebaut. Habe nicht die große Ahnung von VBA. Das Makro habe ich nur durch aufzeichnen so hinbekommen.Würde es Dir viel ausmachen, mir den Code in mein Makro einzubauen?
Das Makro:
Sub Daten_löschen()
'
' Daten_löschen Makro
' Makro am 29.12.2007 von Hans-Jörg Müller aufgezeichnet
'
'
Sheets("Lieferscheine").Select
Range("B13:BI43").Select
ActiveWindow.SmallScroll Down:=9
Range("B13:BI43,B52:BI80").Select
Range("BI52").Activate
ActiveWindow.SmallScroll Down:=10
Range("B13:BI43,B52:BI80,B89:BI119").Select
Range("B89").Activate
ActiveWindow.SmallScroll Down:=6
Range("B13:BI43,B52:BI80,B89:BI119,B128:BI157").Select
Range("BI128").Activate
ActiveWindow.SmallScroll Down:=5
Range("B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196").Select
Range("B166").Activate
ActiveWindow.SmallScroll Down:=10
Range("B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196,B205:BI234").Select
Range("BI205").Activate
ActiveWindow.SmallScroll Down:=9
Range("B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196,B205:BI234,B243:BI273" _
).Select
Range("B243").Activate
ActiveWindow.SmallScroll Down:=6
Range( _
"B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196,B205:BI234,B243:BI273,B282:BI312" _
).Select
Range("BI282").Activate
ActiveWindow.SmallScroll Down:=7
Range( _
"B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196,B205:BI234,B243:BI273,B282:BI312,B321:BI350" _
).Select
Range("B321").Activate
ActiveWindow.SmallScroll Down:=10
Range( _
"B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196,B205:BI234,B243:BI273,B282:BI312,B321:BI350,B359:BI389" _
).Select
Range("BI359").Activate
ActiveWindow.SmallScroll Down:=10
Range( _
"B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196,B205:BI234,B243:BI273,B282:BI312,B321:BI350,B359:BI389,B398:BI427" _
).Select
Range("B398").Activate
ActiveWindow.SmallScroll Down:=8
Range( _
"B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196,B205:BI234,B243:BI273,B282:BI312,B321:BI350,B359:BI389,B398:BI427,B436:BI466" _
).Select
Range("BI436").Activate
Selection.ClearContents
End Sub
Vielen Dank nochmal an Euch!
MfG
Hans-Jörg
Antwort 4 von coros
Hallo Hans Jörg,
dann sieht Dein Makro wie folgt aus:
Tausche obiges Makro gegen Deines aus. Du musst in dem Makro in der Zeile
Abschließend solltest Du dann wie von @peko beschrieben, Dein VBA-Projekt mit einem Passwort schützen. Somit kann man nicht sofort Dein Passwort für diese Abfrage einsehen. Ist zwar kein 100%iger Schutz, aber für die anderen Mitarbeiter sollte der Schutz reichen.
Ich hoffe, Du kommst klar. 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.
dann sieht Dein Makro wie folgt aus:
Option Explicit
Sub Daten_löschen()
Dim varPW As Variant
'Variable, in die das Passwort, das in eine Inputbox eingetragen wird, geschrieben wird.
varPW = InputBox("Diese Funktion ist nur berechtigten Personen erlaubt und daher mit einem Passwort geschützt.")
'Wenn die Variable leer ist (leer, wenn kein Passwort eingegeben wurde) oder wenn die Variable _
den Zustand "False" hat (False, wenn die Abbrechen-Schaltfläche betätigt wurde), dann Prozedur beenden
If varPW = "" Or varPW = False Then Exit Sub
'Abfrage ob eingetragenes Passwort korrekt ist. Wenn das Passwort korrekt war, eine Meldung am _
Bildschirm ausgeben. Meldung hier nur für dieses Beispiel. Anstelle der Zeile mit der Messagebox-Funktion, _
müsste dann das weitere Makro zwischen der Zeile mit der "If-Anweisung" und dem Wort "Else" aufgeführt werden
If varPW = "Hier das Passwort" Then
'Anstelle der MessageBox-Ausgabe die Funktionen, also die Löschfunktionen, die dann ausgeführt werden sollen, _
hier eintragen.
Sheets("Lieferscheine").Activate
Range("B13:BI43,B52:BI80,B89:BI119,B128:BI157,B166:BI196,B205:BI234,B243:BI273,B282:BI312,B321:BI350,B359:BI389,B398:BI427,B436:BI466").ClearContents
Else
MsgBox "Das war leider das falsche Passwort", vbCritical, "Passwortfehler..."
End If
End Sub
Tausche obiges Makro gegen Deines aus. Du musst in dem Makro in der Zeile
If varPW = "Hier das Passwort" Then
Dein Passwort zwischen die beiden Anfühtungszeichen ( "" ) eintragen und dann sollte Dir immer wenn das Makro ausgeführt wird, eine Passwortabfrage vorgeschaltet sein. Abschließend solltest Du dann wie von @peko beschrieben, Dein VBA-Projekt mit einem Passwort schützen. Somit kann man nicht sofort Dein Passwort für diese Abfrage einsehen. Ist zwar kein 100%iger Schutz, aber für die anderen Mitarbeiter sollte der Schutz reichen.
Ich hoffe, Du kommst klar. 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 5 von hansel
Hallo Oliver!
Ich sitze hier und bin immer wieder erstaunt, was mit Excel alles möglich ist.Es funktioniert!
Genau so, wie Du das gemacht hast, wollte ich das haben!Das hätte ich in Generationen nicht geschafft.Tausend Dank für Deine Mühe und Hilfe!!!
MfG und einen guten Rutsch
Hans-Jörg
Ich sitze hier und bin immer wieder erstaunt, was mit Excel alles möglich ist.Es funktioniert!
Genau so, wie Du das gemacht hast, wollte ich das haben!Das hätte ich in Generationen nicht geschafft.Tausend Dank für Deine Mühe und Hilfe!!!
MfG und einen guten Rutsch
Hans-Jörg