Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Mit If mehr als vier Argumente prüfen ???
#1
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. Huh
Bin für jede Hilfe dankbar.
Antworten Top
#2
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
Antworten Top
#3
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....
Antworten Top
#4
(20.02.2017, 13: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, 13: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
Antworten Top
#5
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?!
Antworten Top
#6
Hallo,

(20.02.2017, 13: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
Antworten Top
#7
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....
Antworten Top
#8
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
Antworten Top
#9
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
Antworten Top
#10
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste