Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Brauche hilfe, finde meinen fehler nicht
Frage
Sitz grad an einem Projekt, das mit einer User- und Passwortanfrage beginnen soll
habe auch schon einen code geschrieben, aber er tut nicht dass, was er soll
Das Problem ist, ich weis nicht was daran falsch sein soll, kann bitte mal jemand einen Blick drauf werfen und mir sagen, was daran falsch ist?
Dim zeile as Boolean
Private Sub CommandButton1_Click()
If TextBox2 = "" Then
'ich hab das ganze in ne userform gepackt
'textbox2 ist die box mit dem passwort
'textbox1 die mit dem Usernamen
UserForm7.Hide
MsgBox "Bitte das Passwort angeben!"
UserForm7.Show
Else
If z < 2 Then
'mit z will ich die zellen abgehen und nach dem user suchen
z = 2
End If
If Cells(z, 1) = "" Then
z = 1
UserForm7.Hide
MsgBox "User nicht gefunden"
UserForm7.Show
Else
Do Until zeile = True
'die tabelle ist auf dem zweiten tabellenblatt
If TextBox1 = Worksheets(2).Cells(z, 1) Then
If TextBox2 = Worksheets(2).Cells(z, 2) Then
zeile = True
Unload Me
MsgBox "Zugang gewährt ...."
UserForm3.Show
Else
UserForm7.Hide
MsgBox "Zugang verweigert ...."
UserForm7.Show
z = 0
End If
Else
z = z + 1
End If
Loop
End If
End If
End Sub
[*][sup][i]
*Threadedit* 08:00:40
Admininfo: zum Artikel/ Betreff. Bitte beachte [u][url=https://supportnet.de/faqsthread/840]FAQ 2, #4[/url][/u] bei deiner nächsten Anfrage.[/i][/sup]
Antwort 1 von varginator
Erkläre auch gerne unklare Sachen
Antwort 2 von kicia
Hallo,
ich habe mal meine Kommentare und Fragen in den Code eingefügt.
(siehe '###):
Gruß,
kicia
ich habe mal meine Kommentare und Fragen in den Code eingefügt.
(siehe '###):
Dim zeile as Boolean
Private Sub CommandButton1_Click()
If TextBox2 = "" Then
'ich hab das ganze in ne userform gepackt
'textbox2 ist die box mit dem passwort
'textbox1 die mit dem Usernamen
UserForm7.Hide
MsgBox "Bitte das Passwort angeben!"
UserForm7.Show
Else
'### z ist noch nicht gesetzt, wert und typ unbekannt
If z < 2 Then
'mit z will ich die zellen abgehen und nach dem user suchen
z = 2
End If
'### warum usernamen in Cells(z, 1) ?
'### sollte er nicht auf dem zweiten Worksheet sein ?
'### oder ist hier textbox1 gemeint ?
If Cells(z, 1) = "" Then
z = 1
UserForm7.Hide
MsgBox "User nicht gefunden"
UserForm7.Show
Else
'### "zeile" ist nirgends auf False gesetzt ( ich weiß nicht, was der default wert ist )
Do Until zeile = True
'die tabelle ist auf dem zweiten tabellenblatt
'### schleife läuft endlos, wenn user nicht gefunden wird
If TextBox1 = Worksheets(2).Cells(z, 1) Then
If TextBox2 = Worksheets(2).Cells(z, 2) Then
zeile = True
Unload Me
MsgBox "Zugang gewährt ...."
UserForm3.Show
Else
UserForm7.Hide
MsgBox "Zugang verweigert ...."
UserForm7.Show
z = 0
End If
Else
z = z + 1
End If
Loop
End If
End If
End Sub
Gruß,
kicia
Antwort 3 von varginator
danke für deine antwort kicia,
1. soll ich z als Integer (ganze zahl) zuweisen?
2. da hast du recht, habe worksheets(2) vergessen
3. ich glaube, dass der standartwert false ist
4. das wollte ich eigentlich verhindern mit:
also wenn die zelle A(z) leer ist, dann soll er das machen
1. soll ich z als Integer (ganze zahl) zuweisen?
2. da hast du recht, habe worksheets(2) vergessen
3. ich glaube, dass der standartwert false ist
4. das wollte ich eigentlich verhindern mit:
If Cells(z, 1) = "" Then
z = 1
UserForm7.Hide
MsgBox "User nicht gefunden"
UserForm7.Show
also wenn die zelle A(z) leer ist, dann soll er das machen
Antwort 4 von varginator
Zur genaueren Information:
auf Tabellenblatt2:
er soll erst in zeile 2 anfangen (z)
Userform:
Username: ___________ (Textfeld1)
Passwort : ____________ (Textfeld2)
auf Tabellenblatt2:
A | B
1 Username | Passwort
2 max | pc
er soll erst in zeile 2 anfangen (z)
Userform:
Username: ___________ (Textfeld1)
Passwort : ____________ (Textfeld2)
Antwort 5 von kicia
(1) Ja, oder einfach irgendwo vorher (zB. ganz am Anfang des Sub) z = 2, bei Basic reicht das.
z soll 2 sein, weil die Zellen darüber anders verwendet werden, oder?
(3) Ich würde empfehlen, sicherheitshalber irgenwo vorher (zB. ganz am Anfang des Sub) zeile auf false zu setzen.
(4) Gut, dann muß das in der Schleife stehen, damit die Prüfung auch für jede Zeile gemacht wird:
Wenn jeder User nur ein Passwort haben kann, könntest Du den Teil auch so schreiben (Irrtümer vorbehalten):
Gruß, kicia
z soll 2 sein, weil die Zellen darüber anders verwendet werden, oder?
(3) Ich würde empfehlen, sicherheitshalber irgenwo vorher (zB. ganz am Anfang des Sub) zeile auf false zu setzen.
(4) Gut, dann muß das in der Schleife stehen, damit die Prüfung auch für jede Zeile gemacht wird:
Do Until zeile = True
If Worksheets(2).Cells(z, 1) = "" Then
z = 1
UserForm7.Hide
MsgBox "User nicht gefunden"
UserForm7.Show
zeile = True '### oder hier anders die Schleife abbrechen.
ElseIf TextBox1 = Worksheets(2).Cells(z, 1) Then
If TextBox2 = Worksheets(2).Cells(z, 2) Then
zeile = True
Unload Me
MsgBox "Zugang gewährt ...."
UserForm3.Show
Else
UserForm7.Hide
MsgBox "Zugang verweigert ...."
UserForm7.Show
z = 0
'### achja, hier muß die Schleife ja auch beendet werden
End If
Else
z = z + 1
End If
LoopWenn jeder User nur ein Passwort haben kann, könntest Du den Teil auch so schreiben (Irrtümer vorbehalten):
z = 2;
Do Until Worksheets(2).Cells(z, 1) = "" OR TextBox1 = Worksheets(2).Cells(z, 1)
z = z + 1
Loop
If TextBox1 = Worksheets(2).Cells(z, 1) Then
If TextBox2 = Worksheets(2).Cells(z, 2) Then
Unload Me
MsgBox "Zugang gewährt ...."
UserForm3.Show
Else
UserForm7.Hide
MsgBox "Zugang verweigert ...."
UserForm7.Show
End If
Else
UserForm7.Hide
MsgBox "User nicht gefunden"
UserForm7.Show
End IfGruß, kicia
Antwort 6 von varginator
ja, so funktioniert es, danke für deine hilfe, auf die schleife, die z nur hochsetzt bin ich nich gekommen
ich poste nochmal den ganzen code
ich poste nochmal den ganzen code
Private Sub CommandButton1_Click()
If TextBox2 = "" Then
UserForm7.Hide
MsgBox "Bitte das Passwort angeben!"
UserForm7.Show
Else
If z < 2 Then
z = 2
End If
If Worksheets(2).Cells(z, 1) = "" Then
z = 1
UserForm7.Hide
MsgBox "User nicht gefunden"
UserForm7.Show
Exit Sub
Else
z = 2
Do Until Worksheets(2).Cells(z, 1) = "" Or TextBox1 = Worksheets(2).Cells(z, 1)
z = z + 1
Loop
If TextBox1 = Worksheets(2).Cells(z, 1) Then
If TextBox2 = Worksheets(2).Cells(z, 2) Then
Unload Me
MsgBox "Zugang gewährt ...."
UserForm3.Show
Else
UserForm7.Hide
MsgBox "Zugang verweigert ...."
UserForm7.Show
End If
Else
UserForm7.Hide
MsgBox "User nicht gefunden"
UserForm7.Show
End If
End If
End If
End SubAntwort 7 von kicia
Hallo,
Du schreibst gute Feedbacks, finde ich.
Wenn ich das richtig überschaue, kannst du die If-Abfrage sogar weglassen:
Denn wenn die erste Zelle (z=2) schon leer ist, bricht die Schleife eben sofort ab.
Im Zweifel probiers einfach mal aus.
Gruß, kicia
Du schreibst gute Feedbacks, finde ich.
Wenn ich das richtig überschaue, kannst du die If-Abfrage sogar weglassen:
If Worksheets(2).Cells(z, 1) = "" Then ...usw. Denn wenn die erste Zelle (z=2) schon leer ist, bricht die Schleife eben sofort ab.
Im Zweifel probiers einfach mal aus.
Gruß, kicia
Antwort 8 von varginator
ok, danke für deine bemühungen, funktioniert jetz alles super
jetzt fragt er beim öffnen der datei nach username und passwort und lässt den Benutzer dann erst etwas machen
jetzt fragt er beim öffnen der datei nach username und passwort und lässt den Benutzer dann erst etwas machen
Antwort 9 von varginator
aber der benutzer kann es auch nicht mit dem X Beenden, weil dann Beendet er das ganze excel, dh man kommt ohne username + passwort nicht hin

