![]() |
Tipp 0488
|
Passwort-Abfrage
|
 |
|
Autor/Einsender: Datum: |
|
Angie 15.03.2006 |
|
Entwicklungsumgebung: |
|
Excel 2000 |
|
|
Es gibt manchmal Situationen, in denen man bestimmte Aktionen in einem Programm für den "Otto-Normalverbraucher" einschränken möchte, diese
also für bestimmte Anwender nur über eine Passwort-Eingabe zugänglich sein sollen.
|
An dieser Stelle möchte ich darauf hinweisen, dass sowohl VBA-Projekte also auch Office-Dateien, die Passwort-geschützt sind, sehr leicht
zu "knacken" sind. Programme dafür sind massig im Inet zu finden, keine Programmierung oder Datei ist also sicher vor "Angreifern".
In diesem speziellen Beispiel wird der Einfachheithalber einer Variablen das Passwort zugewiesen. Öffnet man die im Download enthaltene
Arbeitsmappe in Notepad, erscheint das Passwort gut lesbar im entsprechenden Codebereich. Das heißt also, das Passwort sollte aus einer nicht so
leicht ersichtlichen Quelle stammen, ggf. sogar verschlüsselt werden.
|
|
Code im Codebereich der UserForm |
|
In diesem Beispiel werden für das Zuweisen des Titels, der Meldung und des Passworts und für die Rückgabe, ob der User den Dialog abgebrochen hat
oder nicht, anstelle von Public-Variablen Property-Prozeduren verwendet. Weitere Infos dazu können unter
Schreiben einer Property-Prozedur in der VB(A)-Hilfe nachgelesen werden.
|
Das vom Anwender eingegebene Passwort wird bei Klick auf den OK-Button mit dem übergebenen Passwort verglichen. Stimmt die Eingabe nicht überein,
wird eine entsprechende MsgBox angezeigt und der Inhalt des Eingabefelds gelöscht, damit der Anwender einen erneuten Eingabeversuch machen kann.
Die UserForm bleibt so lange sichtbar, bis der Anwender entweder das richtige Passwort eingibt oder aber den Dialog abbricht.
|
Damit ggf. geänderte Eigenschaften von Steuerelementen nachvollzogen werden können, werden diese soweit möglich zur Laufzeit gesetzt, hier im
UserForm_Initialize-Ereignis.
|
|
|
Option Explicit
Private m_blnInit As Boolean
Private m_strPW As String
Private m_blnCancel As Boolean
Public Property Let gInit(ByVal blnNewValue As Boolean)
m_blnInit = blnNewValue
End Property
Public Property Let gTitle(ByVal strNewValue As String)
If Len(strNewValue) <> 0 Then
Me.Caption = strNewValue
Else
Me.Caption = Application.Name
End If
End Property
Public Property Let gPrompt(ByVal strNewValue As String)
Me.lblPrompt.Caption = strNewValue
End Property
Public Property Let gPassword(ByVal strNewValue As String)
m_strPW = strNewValue
End Property
Public Property Get gCancel() As Boolean
gCancel = m_blnCancel
End Property
Private Sub UserForm_Initialize()
With Me
.cmdCancel.Cancel = True
.cmdOK.Default = True
.txtInput.PasswordChar = "*"
End With
End Sub
Private Sub UserForm_Activate()
If Not m_blnInit Then Unload Me
End Sub
Private Sub cmdOK_Click()
If Me.txtInput.Text = m_strPW Then
m_blnCancel = False
Me.Hide
Else
MsgBox "Ungültiges Passwort!", vbExclamation, Me.Caption
With Me.txtInput
.Text = ""
.SetFocus
End With
End If
End Sub
Private Sub cmdCancel_Click()
m_blnCancel = True
Me.Hide
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, _
CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Cancel = True
cmdCancel_Click
End If
End Sub
|
|
|
Code im Codebereich eines Moduls |
|
In der folgenden Funktion, in der der Aufruf der UserForm "gekapselt" ist, wird der Dialog angezeigt und die Rückgabe ausgewertet.
Als Argumente werden Titel der UserForm, Meldung und das Passwort übergeben. Die Funktion gibt True zurück, wenn das richtige Passwort
eingegeben wird, False, wenn der Anwender den Dialog abbricht.
|
|
|
Option Explicit
Public Function GetPassword(ByVal strPrompt As String, _
ByVal strPassword As String, _
Optional strTitle As String) As Boolean
Dim frmPWInput As FrmPassword
Set frmPWInput = New FrmPassword
With frmPWInput
.gInit = True
.gTitle = strTitle
.gPrompt = strPrompt
.gPassword = strPassword
.Show
DoEvents
GetPassword = (Not .gCancel)
End With
Unload frmPWInput
Set frmPWInput = Nothing
End Function
|
|
|
|
Die obige Funktion GetPassword() kann an beliebigen Stellen im VBA-Projekt mit verschiedenen Titeln, Meldungen und Passwörtern aufgerufen werden, ähnlich der in
VB/VBA-integrierten InputBox-Funktion.
|
|
|
Public Sub Demo_GetPassword()
Const cMsgTitle As String = "VB-fun-Demo - Passwortabfrage"
Dim strPW As String
Dim blnRetVal As Boolean
strPW = "Passwort"
blnRetVal = GetPassword("Bitte Passwort eingeben:", strPW)
If blnRetVal = True Then
MsgBox "Juhuuuu, die Passwort-Eingabe war richtig!", _
vbInformation, cMsgTitle
End If
End Sub
|
|
|
|
|
|
Die im Download befindlichen *.frm- und *.bas-Dateien können in den unten angegebenen Anwendungen im VB-Editor importiert werden.
|
|
Windows-Version |
95 |
 |
|
98 |
 |
|
ME |
 |
|
NT |
 |
|
2000 |
 |
|
XP |
 |
|
Vista |
 |
|
Win
7 |
 |
|
|
Anwendung/VBA-Version |
Access 97 |
 |
Access 2000 |
 |
Access XP |
 |
Access 2003 |
 |
Access 2007 |
 |
Access 2010 |
 |
|
Excel 97 |
 |
Excel 2000 |
 |
Excel XP |
 |
Excel 2003 |
 |
Excel 2007 |
 |
Excel 2010 |
 |
|
Word 97 |
 |
Word 2000 |
 |
Word XP |
 |
Word 2003 |
 |
Word 2007 |
 |
Word 2010 |
 |
|
PPT 97 |
 |
PPT 2000 |
 |
PPT XP |
 |
PPT 2003 |
 |
PPT 2007 |
 |
PPT 2010 |
 |
|
Outlook 97 |
 |
Outlook 2000 |
 |
Outlook XP |
 |
Outlook 2003 |
 |
Outlook 2007 |
 |
Outlook 2010 |
 |
|
|
|
Download (26,6 kB)
|
Downloads bisher: [ 1785 ]
|
|
|