Registriert seit: 28.04.2017
Version(en): 2010
11.08.2017, 11:02
(Dieser Beitrag wurde zuletzt bearbeitet: 12.08.2017, 10:41 von Rabe.
Bearbeitungsgrund: Betreff korrigiert: igniriert zu ignoriert
)
Und sowas zum Wochenende, Guten Tag, Ich weiß nicht was los ist, aber Excel Ignoriert die Speicher Baustein in meinem Code. Das hatte ich vorher mit der PW Abfrage und das Speichern ging, nun geht die PW Abfrage aber das speichern nicht mehr. Ich verzweifel noch hier. Da es in der UF1 und UF2 nicht mehr geht und ich keine Ahnung haben warum, in einer anderen Tabelle geht es nach wie vor. Code: Private Sub CommandButton1_Click() 'Passwortabfrage aus Tabbelle ("Passwörter") Zeile = 1 gefunden = False txtsuche = "" Do While Worksheets("Passwörter").Cells(Zeile, 1) <> "" If Worksheets("Passwörter").Cells(Zeile, 2) = txt_passwort.Text Then txtsuche = Worksheets("Passwörter").Cells(Zeile, 1) gefunden = True End If Zeile = Zeile + 1 Loop If gefunden Then Zeile = 2 Do While Worksheets("protokoll").Cells(Zeile, 1) <> "" Zeile = Zeile + 1 Loop Worksheets("protokoll").Cells(Zeile, 1) = txt_nachname Worksheets("protokoll").Cells(Zeile, 2) = Now() Dim lZeile As Long 'Wenn kein Datensatz in der ListBox1 markiert wurde, wird die Routine beendet If ListBox1.ListIndex = -1 Then Exit Sub 'Ich muss prüfen, ob die ID Spalte auch gefüllt ist!! If Trim(CStr(txt_nachname.Text)) = "" Then 'Meldung ausgeben MsgBox "Sie müssen mindestens einen Namen eingeben!", vbCritical + vbOKOnly, "FEHLER!" 'Abbrechen der Speicherroutine Exit Sub End If
'AB HIER FÄNGT ER AN DEN TEIL ZU ÜBERSPRIGEN ------------------------------------------------------------------------------------------------------------- 'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften 'Schleife solange etwas in der zweiten Spalte in Tabelle 1 drin steht Do While Trim(CStr(Worksheets("usernamen").Cells(lZeile, 2).Value)) <> "" 'Datensatz ID Spalte mit selektiertem Eintrag der ListBox vergleichen If ListBox1.Text = Trim(CStr(Worksheets("usernamen").Cells(lZeile, 2).Value)) Then 'Eintrag gefunden, TextBoxen in die Zellen schreiben Worksheets("usernamen").Cells(lZeile, 2).Value = Trim(CStr(txt_nachname.Text)) Worksheets("usernamen").Cells(lZeile, 3).Value = Trim(CStr(txt_vorname.Text)) Worksheets("usernamen").Cells(lZeile, 4).Value = txt_DG.Text Worksheets("usernamen").Cells(lZeile, 5).Value = txt_datum.Text 'UND AB HIER STEIGT ER WIEDER EIN ------------------------------------------------------------------------------------------------------------ 'Die ListBox muss nun neu geladen werden 'allerdings nur, wenn sich der txt_Nachname (ID) geändert hat If ListBox1.Text <> Trim(CStr(txt_nachname.Text)) Then If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0 End If Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist End If lZeile = lZeile + 1 'Nächste Zeile bearbeiten Loop Else MsgBox "Falsches PW" End If End Sub
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Moin! Vielleicht solltest Du die Datei noch kurz vor dem Wochenende hochladen. Natürlich anonymisiert und ungeschützt. By the way: Dein Code ist mit den Do While-Schleifen etwas anachronistisch, hat aber nix mit Deinem Problem zu tun.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 25.04.2016
Version(en): 2013
11.08.2017, 11:25
(Dieser Beitrag wurde zuletzt bearbeitet: 11.08.2017, 11:26 von Storax.)
(11.08.2017, 11:13)RPP63 schrieb: By the way: Dein Code ist mit den Do While-Schleifen etwas anachronistisch, hat aber nix mit Deinem Problem zu tun. Warum ist Do-While (genauer Do Loop) anachronistisch, oder meinst Du, wie das hier angewendet wird? Do-While Syntax ist doch korrekt eingehalten und wird aktuell so verwendet Code: Do { While | Until } condition [ statements ] [ Continue Do ] [ statements ] [ Exit Do ] [ statements ] Loop -or- Do [ statements ] [ Continue Do ] [ statements ] [ Exit Do ] [ statements ] Loop { While | Until } condition
Ich würde eher While Wend als anachronistisch bezeichnen
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
So etwas matche ich, ganz ohne Schleife, Storax. Ich schrieb auch nur von einem Anachronismus, nicht von einem Fehler.
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 28.04.2017
Version(en): 2010
Danke für die schnellen Antworten, ich bin kein Fachmann, weiß nur das, was ich aus copy paste haben und mir dadurch einiges an Wissen in den letzten Monaten zusammen getragen habe. Daher keine Ahnung was ihr meint XD Sorry :D:D Aber das mit dem Hochladen wird schwer. Es sind einige Verknüpfungen drin und da es eine Eingabemaske mit Benutzerprofilen sein soll, sind allerlei Passwörter schon eingefügt die alle raus zunehmen würde lange dauern. Grundsätzlich speichert auch auch, was er nicht tut ist die Termin Eingabe. txt_Nachname txt_Vorname txt_Dg wird gespeichert ( btw soll es gar nicht daher haben ich es auch gelöscht, da diese Infos über eine Verlinkung kommt ) aber Txt_Termin ( alter code txt_Datum ) wird beim drücken auf Com 1 gelöscht und verschwindet im Nirvana. Die userform will das Datum einfach nicht speichern. Das ist der komplette Code zu UserForm1 ( ich habe paar wirklich uninteressante Dinge gelöscht ) Code: Private Sub com_speichern_Click() 'Passwortabfrage aus Tabbelle ("Passwörter") Zeile = 1 gefunden = False txtsuche = "" Do While Worksheets("Passwörter").Cells(Zeile, 1) <> "" If Worksheets("Passwörter").Cells(Zeile, 2) = txt_Passwort.Text Then txtsuche = Worksheets("Passwörter").Cells(Zeile, 1) gefunden = True End If Zeile = Zeile + 1 Loop If gefunden Then Zeile = 2 Do While Worksheets("protokoll").Cells(Zeile, 1) <> "" Zeile = Zeile + 1 Loop Worksheets("protokoll").Cells(Zeile, 1) = txt_Nachname Worksheets("protokoll").Cells(Zeile, 2) = Now() Dim lZeile As Long 'Wenn kein Datensatz in der ListBox1 markiert wurde, wird die Routine beendet If ListBox1.ListIndex = -1 Then Exit Sub 'Ich muss prüfen, ob die ID Spalte auch gefüllt ist!! If Trim(CStr(txt_Nachname.Text)) = "" Then 'Meldung ausgeben MsgBox "Sie müssen mindestens einen Namen eingeben!", vbCritical + vbOKOnly, "FEHLER!" 'Abbrechen der Speicherroutine Exit Sub End If 'Ausbauoption: Prüfen, ob die ID in Tabelle1 Spalte 1 schon vorhanden ist! 'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften 'Schleife solange etwas in der zweiten Spalte in Tabelle 1 drin steht Do While Trim(CStr(Worksheets("usernamen").Cells(lZeile, 2).Value)) <> "" 'Datensatz ID Spalte mit selektiertem Eintrag der ListBox vergleichen If ListBox1.Text = Trim(CStr(Worksheets("usernamen").Cells(lZeile, 2).Value)) Then 'Eintrag gefunden, TextBoxen in die Zellen schreiben Worksheets("usernamen").Cells(lZeile, 5).Value = txt_termin.Text 'Die ListBox muss nun neu geladen werden 'allerdings nur, wenn sich der txt_Nachname (ID) geändert hat If ListBox1.Text <> Trim(CStr(txt_Nachname.Text)) Then If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0 End If Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist End If lZeile = lZeile + 1 'Nächste Zeile bearbeiten Loop Else MsgBox "Falsches PW" End If End Sub _________________________________________________________________________________________________________________ Private Sub ListBox1_Click() Dim lZeile As Long 'Wenn der Benutzer einen Namen anklickt, suchen wir 'diesen in der Tabelle1 heraus und tragen die Daten 'in die TextBoxen ein. 'Wir löschen standardmäßig alle bisherigen TextBoxen-Inhalte txt_Nachname = "" txt_Vorname = "" txt_DG = "" txt_termin = ""
'Nur wenn ein Eintrag selektiert/markiert ist If ListBox1.ListIndex >= 0 Then lZeile = 2 'Start in Zeile 7, Zeile 6 sind ja die Überschriften 'Schleife solange etwas in der zweiten Spalte in Tabelle 1 drin steht Do While Trim(CStr(Worksheets("usernamen").Cells(lZeile, 2).Value)) <> "" 'Wenn wir den Namen aus der ListBox1 in der Tabelle1 Spalte 2 'gefunden haben, übertragen wir die anderen Spalteninhalte 'in die TextBoxen! If ListBox1.Text = Trim(CStr(Worksheets("usernamen").Cells(lZeile, 2).Value)) Then 'TextBoxen füllen txt_Nachname = ListBox1.List(ListBox1.ListIndex, 0) txt_Vorname = ListBox1.List(ListBox1.ListIndex, 1) txt_DG = Worksheets("usernamen").Cells(lZeile, 4).Value txt_termin = Worksheets("usernamen").Cells(lZeile, 5).Value Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist End If lZeile = lZeile + 1 'Nächste Zeile bearbeiten Loop End If End Sub
_________________________________________________________________________________________________________________ Private Sub txt_termin_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If IsDate(Me.txt_termin) Then Me.txt_termin = Format(Me.txt_termin, "MM DD YYYY") ElseIf Me.txt_termin <> vbNullString Then Beep Cancel = True
End If End Sub
_________________________________________________________________________________________________________________
Private Sub txtSuche_Change() Dim i As Integer, ii As Integer Dim vntList, strTxt As String, arrSelected() strTxt = LCase(txtsuche) vntList = ListBox1.List ReDim arrSelected(ListBox1.ListCount - 1) For i = 0 To ListBox1.ListCount - 1 For ii = 0 To ListBox1.ColumnCount - 1 arrSelected(i) = InStr(LCase(vntList(i, ii)), strTxt) > 0 If arrSelected(i) Then Exit For Next Next With ListBox1 For i = 0 To .ListCount - 1 .Selected(i) = arrSelected(i) Next End With End Sub
_________________________________________________________________________________________________________________ Private Sub UserForm_Initialize() Dim lZeile As Long 'Wir löschen standardmäßig alle bisherigen TextBoxen-Inhalte txt_Nachname = "" txt_Vorname = "" txt_DG = "" txt_termin = ""
'In dieser Routine laden wir alle vorhandenen 'Einträge in die ListBox1 ListBox1.Clear 'Zuerst einmal die Liste leeren lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften 'Schleife solange etwas in der zweiten Spalte in Tabelle 1 drin steht Do While Trim(CStr(Worksheets("usernamen").Cells(lZeile, 2).Value)) <> ""
'Aktuelle Zeile in die ListBox eintragen ListBox1.AddItem ListBox1.List(ListBox1.ListCount - 1, 0) = Worksheets("usernamen").Cells(lZeile, 2).Text ListBox1.List(ListBox1.ListCount - 1, 1) = Worksheets("usernamen").Cells(lZeile, 3).Text lZeile = lZeile + 1 'Nächste Zeile bearbeiten Loop End Sub _________________________________________________________________________________________________________________
Registriert seit: 25.04.2016
Version(en): 2013
(11.08.2017, 11:29)RPP63 schrieb: So etwas matche ich, ganz ohne Schleife, Storax. Ich schrieb auch nur von einem Anachronismus, nicht von einem Fehler. Klar, da hast Du Recht, man braucht keine Schleife. Dann hatte ich das mißverstanden.
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo, (11.08.2017, 11:34)Kaywarri124 schrieb: Grundsätzlich speichert auch auch, was er nicht tut ist die Termin Eingabe.
txt_Nachname txt_Vorname txt_Dg
wird gespeichert ( btw soll es gar nicht daher haben ich es auch gelöscht, da diese Infos über eine Verlinkung kommt )
aber
Txt_Termin ( alter code txt_Datum ) wird beim drücken auf Com 1 gelöscht und verschwindet im Nirvana. Die userform will das Datum einfach nicht speichern. Setze vor einer Codezeile mit txt_termin einen Haltepunkt.
Gruß Stefan Win 10 / Office 2016
Registriert seit: 28.04.2017
Version(en): 2010
Guten Tag, Allen einen guten Start in die Woche. Danke für die Antworten. Ich habe das mit den Haltepunkten gemacht und habe gesehen das txt_Termin immer "" ist. Naja ich habe mal die PW Abfrage ausgeklammert und siehe da, es liegt an der PW Abfrage. Code: Zeile = 1 gefunden = False txtsuche = "" Do While Worksheets("Passwörter").Cells(Zeile, 1) <> "" If Worksheets("Passwörter").Cells(Zeile, 2) = txt_Passwort.Text Then txtsuche = Worksheets("Passwörter").Cells(Zeile, 1) gefunden = True End If Zeile = Zeile + 1 Loop If gefunden Then Zeile = 2 Do While Worksheets("protokoll").Cells(Zeile, 1) <> "" Zeile = Zeile + 1 Loop Worksheets("protokoll").Cells(Zeile, 1) = txt_Nachname Worksheets("protokoll").Cells(Zeile, 2) = Now()
'hier kommt dann der Speicher Code
Registriert seit: 28.04.2017
Version(en): 2010
Danke nochmal, echt immer wieder gute Hilfe, habe das Problem gelöst. Er fragt nach Benutzername und Passwort und speichert dann die Eingabe Code: 'Passwortabfrage aus Tabbelle ("Passwörter") zeile = 2 gefunden = False Do While Worksheets("Passwörter").Cells(zeile, 1) <> "" If Worksheets("Passwörter").Cells(zeile, 1) = txtsuche.Text Then If Worksheets("Passwörter").Cells(zeile, 2) = txt_Passwort.Text Then gefunden = True End If End If zeile = zeile + 1 Loop If gefunden Then zeile = 2 Do While Worksheets("protokoll").Cells(zeile, 1) <> "" zeile = zeile + 1 Loop Worksheets("protokoll").Cells(zeile, 1) = txt_Nachname Worksheets("protokoll").Cells(zeile, 2) = Now() Dim lZeile As Long
'Wenn kein Datensatz in der ListBox1 markiert wurde, wird die Routine beendet If ListBox1.ListIndex = -1 Then Exit Sub 'Ich muss prüfen, ob die ID Spalte auch gefüllt ist!! If Trim(CStr(txt_Nachname.Text)) = "" Then 'Meldung ausgeben MsgBox "Sie müssen mindestens einen Namen eingeben!", vbCritical + vbOKOnly, "FEHLER!" 'Abbrechen der Speicherroutine Exit Sub End If 'Ausbauoption: Prüfen, ob die ID in Tabelle1 Spalte 1 schon vorhanden ist! 'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften 'Schleife solange etwas in der zweiten Spalte in Tabelle 1 drin steht Do While Trim(CStr(Worksheets("usernamen").Cells(lZeile, 2).Value)) <> "" 'Datensatz ID Spalte mit selektiertem Eintrag der ListBox vergleichen If ListBox1.Text = Trim(CStr(Worksheets("usernamen").Cells(lZeile, 2).Value)) Then 'Eintrag gefunden, TextBoxen in die Zellen schreiben Worksheets("usernamen").Cells(lZeile, 5).Value = txt_termin.Text 'Die ListBox muss nun neu geladen werden 'allerdings nur, wenn sich der txt_Nachname (ID) geändert hat If ListBox1.Text <> Trim(CStr(txt_Nachname.Text)) Then If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0 End If Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist End If lZeile = lZeile + 1 'Nächste Zeile bearbeiten Loop Else MsgBox "Keine Übereinstimmung Nachname mit Passwort. Bitte wiederholen sie ihre Eingabe. Wenn sie noch kein Passwort haben gehen sie auf Passwort Anfrage melden sie sich beim Admin unter App.: 6513" End If End Sub
|