Registriert seit: 13.02.2017
Version(en): 2013
20.02.2017, 12:15
(Dieser Beitrag wurde zuletzt bearbeitet: 20.02.2017, 18:16 von Rabe.
Bearbeitungsgrund: Code-Tags und Standard-Fontgröße benutzt
)
Hallo, ich habe ein Userform in dem Daten eingegeben werden. Vor dem Speichern möchte ich das eine größere Anzahl von TextBoxen, Listfeldern auf Ihre Inhalte überprüft werden. Ich habe bereits vers. Varianten ausprobiert, leider werden nur bis zu vier Argumente geprüft und der Rest geht unter. Kann mir jemand helfen? Code: Private Sub InhalteCheck1() Dim MsgStr As String Dim IstSel As Boolean Dim Lauf As Long MsgStr = "" ' Für die Ausgabe der Hinweise IstSel = False ' Ist schon ein Eingabefeld selectiert?? Lauf = 0 ' Anzahl der "Fehler"
If EdtDatum.Value = "" Then ' Abfrage der einzelnen Felder Lauf = Lauf + 1 ' Zählen der "Fehler" MsgStr = MsgStr & CStr(Lauf) & ". Bitte Datum vorm Speichern eingeben" & vbCrLf ' MsgStr aufbauen If Not IstSel Then ' Fokus setzen IstSel = True EdtDatum.SetFocus End If End If
If lstOrgaeinheit.Value = "" Then ' Nächstes Feld Lauf = Lauf + 1 MsgStr = MsgStr & CStr(Lauf) & ". Bitte Organisationseinheit auswählen" & vbCrLf If Not IstSel Then IstSel = True lstOrgaeinheit.SetFocus End If End If
If lstFahrzeug.Value = "" Then Lauf = Lauf + 1 MsgStr = MsgStr & CStr(Lauf) & ". Bitte Fahrzeug auswählen" & vbCrLf If Not IstSel Then IstSel = True lstFahrzeug.SetFocus End If End If ' [....] noch weitere Argumente im Format siehe oben
If IstSel Then MsgBox "Es wurden noch " & CStr(Lauf) & " fehlerhafte Eingaben gefunden." & vbCrLf & "Bitte korrigieren:" & vbCrLf & vbCrLf & MsgStr, vbCritical, "ACHTUNG - Fehlende Eingaben" Else Speicherort End If End Sub
Also, der Code funktioniert in soweit, dass bis zu vier Argumente geprüft werden, dies sind jedoch nicht immer die gleichen vier, was die Sachen noch verwirrender macht.
Als Alternative habe ich für jedes zu prüfende Argument eine neue Prozedur :
Private Su InhalteCheck1() If Me.Edt Datum.Value="" Then MsgBox "Bitte Datum vorm Speichern eingeben", , p_CstrMsgTitel Else: InhalteCheck2 End if End Sub
Private Sub inhalteCkeck2() If me.lstOrgaeinheit.Value= "" Then MsgBox " " Else: InhalteCheck3 End If End Sub
......InhalteCheck4, InhalteCheck5.... gleiche Problem, prüft einige Argumente, aber nicht alle und auch scheinbar wahllos.  Bin für jede Hilfe dankbar.
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo, warum denn so umständlich? Was soll der Anwender mit gesammelten Daten anfangen, wenn in mehrere Textboxen nichts eingetragen ist? Praktischer ist es doch, sobald eine Pflicht-Textbox leer ist, dass der Focus auf diese gesetzt und der Code nicht mehr weiter ausgeführt wird. Ich mache es einfach der Reihe nach wie folgt: Code: If EdtDatum.Value = "" Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte Datum vorm Speichern eingeben" & vbCrLf ' MsgStr aufbauen EdtDatum.SetFocus Exit Sub End If
Gruß Atilla
Registriert seit: 13.02.2017
Version(en): 2013
Dass ist ja quasi die erste Variante, die ich habe... nur etwas abgespeckt. Problem ist, dass er nur vier "If Prozeduren prüft" und dann die anderen leeren Felder ignoriert und speichert. Gibt es eine max. Anzahl an If- Prozeduren???
Sehe gerade nicht, warum die "abgespeckte" Variante durchlaufen sollte....
Registriert seit: 14.04.2014
Version(en): 2003, 2007
(20.02.2017, 14:16)soldblub schrieb: Dass ist ja quasi die erste Variante, die ich habe... nur etwas abgespeckt. Nein, so ist das nicht. Der entscheidende unterschied liegt in der Antwort Deiner nächsten Frage: (20.02.2017, 14:16)soldblub schrieb: Sehe gerade nicht, warum die "abgespeckte" Variante durchlaufen sollte.... Sie läuft nicht durch!!. Der Ausführung des Codes wird abgebrochen. Wenn diese Textbox befüllt ist, muss der Code erneut gestartet werden. Und wenn dann eine weitere IF Abfarage auf die nächste leere Box stößt, wird wieder abgebrochen, und der User ehält die Möglichkeit diese zu Füllen. Und wenn das einige male passiert ist, ist das auch noch eine erzieherische Maßnahme für den User. :19:
Gruß Atilla
Registriert seit: 13.02.2017
Version(en): 2013
atilla,
habe es gerade versucht, er prüft dennoch nicht alle Argumente sondern springt irgendwann automatisch zu dem Schritt Speichern "Speicherort". Bin immer noch ratlos warum?!
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo, (20.02.2017, 14:31)soldblub schrieb: habe es gerade versucht, er prüft dennoch nicht alle Argumente sondern springt irgendwann automatisch zu dem Schritt Speichern "Speicherort". das kann nicht sein! Das Exit Sub hast Du schon übernommen?
Gruß Stefan Win 10 / Office 2016
Registriert seit: 13.02.2017
Version(en): 2013
ja, und trotzdem.... es ist so unlogisch... er prüft ja auch nicht die ersten vier Argumente sondern läßt einige zwischendrin aus, obwohl das "Pflichtfeld" leer ist....
Registriert seit: 13.02.2017
Version(en): 2013
20.02.2017, 15:11
(Dieser Beitrag wurde zuletzt bearbeitet: 20.02.2017, 18:17 von Rabe.
Bearbeitungsgrund: Code-Tags benutzt
)
Hier nochmal der neue Code, vielleicht hab ich dennoch einen Fehler drin: Code: 'Inhalteüberprüfen Private Sub InhalteCheck1()
Dim MsgStr As String Dim IstSel As Boolean Dim Lauf As Long
MsgStr = "" ' Für die Ausgabe der Hinweise IstSel = False ' Ist schon ein Eingabefeld selectiert?? Lauf = 0 ' Anzahl der "Fehler"
If EdtDatum.Value = "" Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte Datum vorm Speichern eingeben" & vbCrLf ' MsgStr aufbauen EdtDatum.SetFocus Exit Sub End If
If lstOrgaeinheit.Value = "" Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte ....eingeben" & vbCrLf ' MsgStr aufbauen lstOrgaeinheit.SetFocus Exit Sub End If
If lstFahrzeug.Value = "" Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte ...eingeben" & vbCrLf ' MsgStr aufbauen lstFahrzeug.SetFocus Exit Sub End If
If lstKennzeichen.Value = "" Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte ...eingeben" & vbCrLf ' MsgStr aufbauen lstFahrzeug.SetFocus Exit Sub End If
If lstTechnik.Value = "" Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte .... eingeben" & vbCrLf ' MsgStr aufbauen lstTechnik.SetFocus Exit Sub End If
If edtKilometer.Value > 999 Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte ...eingeben" & vbCrLf ' MsgStr aufbauen edtKilometer.SetFocus Exit Sub End If
If lstBe1.Value = "" Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte ....eingeben" & vbCrLf ' MsgStr aufbauen lstBe1.SetFocus Exit Sub End If
If lstBe2.Value = "" Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte....eingeben" & vbCrLf ' MsgStr aufbauen lstBe2.SetFocus Exit Sub End If
If edtGesamtzeitBAB.Value + edtGesamtzeitAStr.Value <= 0 Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte.....eingeben" & vbCrLf ' MsgStr aufbauen edtGesamtzeitBAB.SetFocus Exit Sub End If
Speicherort
End Sub
Registriert seit: 14.04.2014
Version(en): 2003, 2007
20.02.2017, 15:18
(Dieser Beitrag wurde zuletzt bearbeitet: 20.02.2017, 15:18 von atilla.)
Hallo,
die Antworten haben sich überschnitten, deswegen meine Antwort gelöscht.
So auf den ersten Blick alles in Ordnung. Welche der Aufgeführten Boxen wäre leer und würde nicht den Focus erhalten???
Gruß Atilla
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo, TextBoxen enthalten wie der Name schon sagt Text. Und beim Vergleich mit Zahlen mußt Du vorher den Inhalt der TextBox in eine Zahl umwandeln. Code: 'Inhalteüberprüfen Private Sub InhalteCheck1()
Dim MsgStr As String Dim IstSel As Boolean Dim Lauf As Long
MsgStr = "" ' Für die Ausgabe der Hinweise IstSel = False ' Ist schon ein Eingabefeld selectiert?? Lauf = 0 ' Anzahl der "Fehler"
If EdtDatum.Value = "" Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte Datum vorm Speichern eingeben" & vbCrLf ' MsgStr aufbauen EdtDatum.SetFocus Exit Sub End If
If lstOrgaeinheit.Value = "" Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte ....eingeben" & vbCrLf ' MsgStr aufbauen lstOrgaeinheit.SetFocus Exit Sub End If
If lstFahrzeug.Value = "" Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte ...eingeben" & vbCrLf ' MsgStr aufbauen lstFahrzeug.SetFocus Exit Sub End If
If lstKennzeichen.Value = "" Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte ...eingeben" & vbCrLf ' MsgStr aufbauen lstFahrzeug.SetFocus Exit Sub End If
If lstTechnik.Value = "" Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte .... eingeben" & vbCrLf ' MsgStr aufbauen lstTechnik.SetFocus Exit Sub End If
If CLng(edtKilometer.Value) > 999 Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte ...eingeben" & vbCrLf ' MsgStr aufbauen edtKilometer.SetFocus Exit Sub End If
If lstBe1.Value = "" Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte ....eingeben" & vbCrLf ' MsgStr aufbauen lstBe1.SetFocus Exit Sub End If
If lstBe2.Value = "" Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte....eingeben" & vbCrLf ' MsgStr aufbauen lstBe2.SetFocus Exit Sub End If
If CDbl(edtGesamtzeitBAB.Value) + CDbl(edtGesamtzeitAStr.Value) <= 0 Then ' Abfrage der einzelnen Felder MsgBox CStr(Lauf) & ". Bitte.....eingeben" & vbCrLf ' MsgStr aufbauen edtGesamtzeitBAB.SetFocus Exit Sub End If
Speicherort
End Sub
Gruß Stefan Win 10 / Office 2016
|