30.06.2021, 16:09
Hallo VBA Freunde!
Ich habe mir den Code für ein Userform nach Ewigkeiten mal wieder rausgekramt und wollte die Experten in der Runde fragen ob ihr Optimierungspotential am Quelltext seht.
Am meisten stört mich die Datumsüberprüfung. Macht hier eine eigene ausgelagerte Funktion vielleicht mehr Sinn oder reich es wenn ich die ifs so umschreibe, dass ich ohne goto auskomme. (bzw. ist dieses goto hier gar nicht so schlimm- hab mal gehört dass man dies eigentlich nur bei der Fehlerbehandlung nutzen sollte...)
Wenn ich es richtig verstanden habe, lässt der Quelltext von Userforms nicht durchs errorhandling abfragen, ist dies richtig? Aber integrierte Unter- bzw- Funktionsroutinen in dem Userformcode können dann ja schon wieder per Fehlerabfrage gehandelt werden. Gibt's hier ein "Best Practice" wie Ihr die Fehlerbehandlung in Userformcode behandelt.
Vielen Dank für Eure Ideen und jede Hilfestellung
Liebe Grüße aus dem Allgäu
Ingo
Hier der bisherige Quelltext des Userforms zum anlegen von Datensätzen, welcher funktionell auch sehr gut funktioniert :
Ich habe mir den Code für ein Userform nach Ewigkeiten mal wieder rausgekramt und wollte die Experten in der Runde fragen ob ihr Optimierungspotential am Quelltext seht.
Am meisten stört mich die Datumsüberprüfung. Macht hier eine eigene ausgelagerte Funktion vielleicht mehr Sinn oder reich es wenn ich die ifs so umschreibe, dass ich ohne goto auskomme. (bzw. ist dieses goto hier gar nicht so schlimm- hab mal gehört dass man dies eigentlich nur bei der Fehlerbehandlung nutzen sollte...)
Wenn ich es richtig verstanden habe, lässt der Quelltext von Userforms nicht durchs errorhandling abfragen, ist dies richtig? Aber integrierte Unter- bzw- Funktionsroutinen in dem Userformcode können dann ja schon wieder per Fehlerabfrage gehandelt werden. Gibt's hier ein "Best Practice" wie Ihr die Fehlerbehandlung in Userformcode behandelt.
Vielen Dank für Eure Ideen und jede Hilfestellung
Liebe Grüße aus dem Allgäu
Ingo
Hier der bisherige Quelltext des Userforms zum anlegen von Datensätzen, welcher funktionell auch sehr gut funktioniert :
Code:
Private Sub cmdEintragen_Click()
' Deklaration der Variablen
Dim ErsteLeereZeile As Long
Dim geburtstag As String
ErsteLeereZeile = wksKontakt.UsedRange.Rows.Count + 1
geburtstag = Me.txtGeburtstag.Value
'Geburtstag überprüfen
'Überprüfen ob Datumstextfeld leer ist
If geburtstag = "" Then
GoTo KeinDatumEingegeben
ElseIf Not IsDate(geburtstag) Then
MsgBox "Keine richtige Datumseingabe"
Exit Sub
' Datum Kleiner 1.3.1900
ElseIf CDate(geburtstag) <= CDate("1.3.1900") Then
MsgBox "Datumswerte erst ab 1.3.1900 möglich"
Exit Sub
' Datum Größer als Heute
ElseIf CDate(geburtstag) > Date Then
MsgBox "Datum liegt in der Zukunft! Beam me up Scotty!!!"
Exit Sub
Else
End If
KeinDatumEingegeben:
'Ende Geburtstagüberprüfung
' Werte Eintragen
wksKontakt.Cells(ErsteLeereZeile, 1).Value = wert
wksKontakt.Cells(ErsteLeereZeile, 2).Value = Me.txtNachname.Value
wksKontakt.Cells(ErsteLeereZeile, 3).Value = Me.txtVorname.Value
wksKontakt.Cells(ErsteLeereZeile, 4).Value = Me.txtStrasse.Value
wksKontakt.Cells(ErsteLeereZeile, 5).Value = Me.txtPLZ.Value
wksKontakt.Cells(ErsteLeereZeile, 6).Value = Me.txtOrt.Value
wksKontakt.Cells(ErsteLeereZeile, 7).Value = Me.txtTelefon.Value
wksKontakt.Cells(ErsteLeereZeile, 8).Value = Me.txtHandy.Value
wksKontakt.Cells(ErsteLeereZeile, 9).Value = Me.txtEmail.Value
wksKontakt.Cells(ErsteLeereZeile, 10).Value = Me.txtWebseite.Value
wksKontakt.Cells(ErsteLeereZeile, 14).Value = Me.txtFirma.Value
'Weitere Steuerelemente
'Comboxeintrag in Spalte Gruppe Eintragen
wksKontakt.Cells(ErsteLeereZeile, 11).Value = Me.cboGruppe.Value
' Kontollkästchen eintragen
wksKontakt.Cells(ErsteLeereZeile, 12).Value = Me.chkReferenz.Value
' Optionsfelder aus Frame eintragen (Geschlechtauswahl)
Dim geschlecht As String
Dim Optionsfeld As MSforms.Control
For Each Optionsfeld In fraGeschlecht.Controls
If Optionsfeld.Value = True Then
geschlecht = Optionsfeld.Tag
End If
Next Optionsfeld
' Optionsfeld eintragen
wksKontakt.Cells(ErsteLeereZeile, 13).Value = geschlecht
' Optionsfelder aus Frame eintragen (Regionsauswahl)
Dim region As String
Dim OptionsfeldRegion As MSforms.Control
For Each OptionsfeldRegion In fraRegion.Controls
If OptionsfeldRegion.Value = True Then
region = OptionsfeldRegion.Tag
End If
Next OptionsfeldRegion
' Optionsfeld eintragen (Regionsauswahl)
wksKontakt.Cells(ErsteLeereZeile, 15).Value = region
If geburtstag <> "" Then
' Geburtstag
wksKontakt.Cells(ErsteLeereZeile, 16).Value = CDate(geburtstag)
' Altersberechnung anhand des Geburtstags
wksKontakt.Cells(ErsteLeereZeile, 17).Value = "=DATEDIF([@Geburtsdatum],TODAY(),""y"")"
Else
wksKontakt.Cells(ErsteLeereZeile, 17).Value = ""
End If
proSortIdAuf
Unload frmEintrag
End Sub