Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
480to484
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
480to484
480to484
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Ist Blatt geschützt per VBA?

Ist Blatt geschützt per VBA?
08.09.2004 19:36:58
Alex
Hallo zusammen,
gibt es eine möglichkeit per vba herauszufinden, ob ein tabellenblatt mit passwort geschützt ist?
danke
alex
AW: Ist Blatt geschützt per VBA?
andreas
Hallo alex

Sub schutz()
MsgBox ActiveSheet.Protect
End Sub

liefert wahr oder falsch
gruß
andreas e
Ausprobiert :-)
Ramses
Hallo Andreas
so geht es :-)
Option Explicit

Sub test()
Msgbox check_protect("Tabelle1")
End Sub


Function Check_Protect(wks As String) As Boolean
If Worksheets(wks).ProtectContents = True Then Check_Protect = True
End Function

Gruss Rainer
AW: Ausprobiert :-) flinke hirnlose finger!
andreas
- wie gut das da einer mit verstand drüberschaut !
Danke Rainer
AW: Ausprobiert :-) flinke hirnlose finger!
Alex
danke euch beiden!
Anzeige
Nun machst du mich aber verlegen :-)) o.T.
Ramses
...
funkt doch nicht
alex
hallo,
ich hab'S gerade versucht, das ergebnis ist aber nicht das was ich wollte:
ich möchte ermitteln, ob' ein passwort gibt
danke
alex
Geht meines Wissens auch nicht ...
Ramses
Hallo
ich kann nicht prüfen ob ein Passwort hinterlegt ist.
Was willst du denn dann machen, wenn du weisst dass ein Passwort hinterlegt ist ?
Gruss Rainer
AW: Geht meines Wissens auch nicht ...
alex
ich schreibe ein makro, welches den blattschutz für alle tabellenblätter aufhebt.
wenn ein blatt mit passwort geschützt ist, soll über eine inputbox das pw vorher abgefragt werden
lg
alex
AW: Geht meines Wissens auch nicht ...
Ramses
Hallo
dann schreib doch einfach
ActiveSheet.Unprotect
Wenn ein Passwort benötigt wird, geht die Dialogbox zur Eingabe des Passwortes automatisch auf.
Gruss Rainer
Anzeige
AW: Geht meines Wissens auch nicht ...
alex
so hab ich's auch gelöst,
allerdings wollte ich es mit einer inputbox steuern, um den namen der tabelle bei der passwortabfrage dem user mitzuteilen
alex
Geht doch....
Ramses
Hallo
Den Ansatz für diese Variante habe ich gerade von Peter erhalten.
Witzig, aber funktioniert
Du kannst das verwenden für eine Standardüberprüfung
Select Case Check_PW("Tabelle1", "")
oder du kannst auch gleich ein Passwort mit übergeben
Select Case Check_PW("Tabelle1", "Passwort")
die Prüfung läuft dann, und du kannst den Rückgabewert dann auswerten
Option Explicit

Sub unPro_WKS()
Dim getPw As String
Select Case Check_PW("Tabelle1", "")
Case 1
getPw = InputBox("Bitte Passwort eingeben", "Passwort")
ActiveSheet.Unprotect getPw
Case 2
MsgBox ("Falsches Passwort")
Exit Sub
Case 3
MsgBox "Kein Passwort vorhanden gewesen"
Case 4
MsgBox "Unbekannter Passwortfehler"
End Select
End Sub


Function Check_PW(wks As String, strPw As String) As Variant
On Error GoTo myerrorhandler
Dim myErr As Integer
'Prüfung ob Passwort vorhanden
If strPw = "" Then
myErr = 1
ActiveSheet.Unprotect ""
'Wenn es funktioniert hat ohne Passwort
myErr = 3
ElseIf strPw <> "" Then
'Prüfung mit übergebenem Passwort
myErr = 2
ActiveSheet.Unprotect strPw
End If
Exit Function
myerrorhandler:
Select Case myErr
Case 1
'Passwort auf Tabelle vorhanden
Check_PW = 1
Case 2
'Falsches Passwort
Check_PW = 2
Case 3
'Unbekannter Passwort Fehler
Check_PW = 4
End Select
End Function

Gruss Rainer
Anzeige
AW: Geht doch....
Alex
D A N K E !!!
AW: Ausprobiert :-)
Jörg
Hallo Rainer,
warum denn nicht gleich

Sub test()
MsgBox Sheets("Tabelle1").ProtectContents
End Sub

?
Bin VBA Anfänger, die Frage ist eine Frage, keine Feststellung, dass es so besser sein soll, hat deine Umleitung über die Funktion einen Vorteil?
Gruss Jörg
AW: Ausprobiert :-)
Ramses
Hallo
Prinzipiell ist/wäre es egal, Programmethisch nicht :-)
Wenn du den Code in eine Funktion auslagerst, hast du ihn an einer einzigen Stelle, und kannst ihn von überall aus aufrufen. Wenn etwas nicht stimmt,... musst du auch nur an einer einzigen Stelle ändern :-)
Ausserdem spart es Codezeilen :-). Wenn du innerhalb deines Codes z.B. mehrfach prüfen musst ob eine Tabelle nun geschützt ist oder nicht, musst du das halt nur einmal schreiben.
Das ist der Sinn von einzelnen Funktionen. Soviel wie nur möglich in kleine wartungsfreundliche Teile zu zerlegen. Alles andere ergibt den berühmt berüchtigten Spaghetti-Code der kaum noch zu warten/pflegen ist, wenn man mal was ändern will.
Wenn ich in einem Code-Review EINMAL diese Funktion sehe, weiss ich dass sie existiert.
Wenn ich in einem Code-Review die Anweisung wie von dir geschrieben sehe, weiss ich auch, dass es sie gibt,... aber nicht wie oft ;-))
Gruss Rainer
Anzeige
Danke für deine Ausführungen
Jörg
Hallo Rainer,
ich denke, dass ich es begriffen habe.
Gruss Jörg
AW: Ausprobiert - zusätzliche Frage
08.09.2004 22:35:22
Matze
Hallo Ramses,
ich verwende folgende Bildschirmmeldung öfters:
Dim myDocument As Object, L As Double, T As Double, W As Double, H As Double
W = 600
H = 50
L = Round((Application.Width - W) / "1,5", 0)
T = Round(Application.Height / 2, 0)
Set BVI = Worksheets ("BVI") ' festlegen des Gueltigkeitsbereiches
Set myDocument = ActiveSheet.Shapes.AddShape(msoShapeRectangle, L, T, W, H)
With myDocument
.Name = "Nachricht"
.Fill.ForeColor.SchemeColor = 22
.TextFrame.Characters.Text = "Bitte warten, übernehme die Daten aus dem Internet"
.TextFrame.VerticalAlignment = xlVAlignCenter
.TextFrame.HorizontalAlignment = xlHAlignCenter
.DrawingObject.RoundedCorners = msoTrue
.DrawingObject.Font.Bold = -1
.DrawingObject.Font.ColorIndex = 1
.DrawingObject.Font.Size = 22
.DrawingObject.Font.FontStyle = "Fett"
End With
Diese Meldung bleibt solange auf dem Bildschirm, bis die nachfolgenden Code-Zeilen abgearbeitet sind (was teilweise einige Minuten dauert).
1) Kann ich diesen Teil auch in eine eigene Prozedure/Funktion auslagern?
2) Dazu noch als Verständnisfrage: Muss ich das Modul aufrufen im "Hauptprogramm" - in meinem Fall Auto_Open() oder in dem von mir im Auto_Open-Modul über Call aufgerufenen "Unterprogramm"?
3) wie rufe ich dann den Löschung der Bildschirmmeldung auf. Bisher alles im gleichen Modul [mehrfach untergebracht im Code dank Kopierfunktion :-( ]
ActiveSheet.Shapes("Nachricht").Select
Selection.Delete
Danke für die Infos
Matze
Anzeige
AW: Ausprobiert - zusätzliche Frage
Ramses
Hallo
Prinzipiell würde ich die Variable "myDocument" nicht so verwenden, ist nicht lesefreundlich und impliziert etwas anderes, nämlich dass es sich um ein Document handelt und nicht um eine Nachrichtenbox
kopier mal den Code
Option Explicit
'Modul Übergreifende Variablen
Public myMsgBox As Object

Sub test()
'Message am Bildschirm zeigen
Draw_msg
'anhalten zum kucken :-)
MsgBox "stop"
'sonstiger Code
'Nachricht löschen
myMsgBox.Delete
End Sub


Function Draw_msg()
Dim L As Double, T As Double, W As Double, H As Double
W = 600
H = 50
L = Round((Application.Width - W) / 1.5, 0)
T = Round(Application.Height / 2, 0)
Set myMsgBox = ActiveSheet.Shapes.AddShape(msoShapeRectangle, L, T, W, H)
With myMsgBox
.Name = "Nachricht"
.Fill.ForeColor.SchemeColor = 22
.TextFrame.Characters.Text = "Bitte warten, übernehme die Daten aus dem Internet"
.TextFrame.VerticalAlignment = xlVAlignCenter
.TextFrame.HorizontalAlignment = xlHAlignCenter
.DrawingObject.RoundedCorners = msoTrue
.DrawingObject.Font.Bold = -1
.DrawingObject.Font.ColorIndex = 1
.DrawingObject.Font.Size = 22
.DrawingObject.Font.FontStyle = "Fett"
End With
End Function

Was du mit "Set BVI = ..." willst weiss ich nicht, das kommt ja in dem Code-Segment nicht mehr vor, deshalb habe ich es weggelassen. Die Variable "myMsgBox" bezieht sich ja sowieso schon auf das aktuelle Tabellenblatt.
Die Funktion selbst und die Variablendeklaration gehören in ein eigenes Modul.
Gruss Rainer
Anzeige
AW: Ausprobiert - zusätzliche Frage
09.09.2004 06:53:51
Matze
Hallo Rainer,
ich werde es heute abend mal ausprobieren. Sieht super aus. Danke
mfg
Matze

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige