Supportnet Computer
Planet of Tech

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 '###):
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:
                            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:
          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:
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
Loop


Wenn 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 If


Gruß, 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


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 Sub


Antwort 7 von kicia

Hallo,

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

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