Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1964to1968
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Befüllen der Comboboxen läuft schief

Befüllen der Comboboxen läuft schief
13.02.2024 13:39:08
Lefty
Hallo liebe Herber Community,

ich bins mal wieder ;D

Ich habe mir eine UF erstellt in der ich mit 3 Comboboxen (jeweils 1 für Tag, Monat und Jahr) das Datum eingeben und in eine Tabelle einfügen kann. Vielen Dank an der stelle an HaJo für den Code.

Nun wollte ich weitergehen und mir eine neue UF erstellen in der ich daten einer Tabelle lade, bearbeite und wieder in die Tabelle Speichere.
In dieser UF brauche ich allerdings 2x das Datum und somit 6 Comboboxen, die ersten Drei funktionieren einwandfrei, beim 2. Datum habe ich das Problem das ein Laufzeitfehler beim ändern des Monats auftritt (Laufzeitfehler 6, Überlauf).

Hier mal der gesamte Code aus der UF_Ferien

Private Sub UserForm_Initialize()

' Eigenschaft setzen damit der Code im Change
' der ComboBoxen bei Auswahl (z.B. ComboBox1.Value = ... )
' nicht ausgeführt wird
CBvonTag.Tag = "1"
Me.StartUpPosition = 1 ' Startposition der Userform links oben
' Tage des aktuellen Monats in ComboBox1 eintragen
For InI = 1 To Day(CDate("01." & Month(Date) + 1 & "." _
& Year(Date)) - 1)
CBvonTag.AddItem InI
Next InI
For InI = 1 To 12 ' Monate als Wort in ComboBox2 eintragen
CBvonMonat.AddItem Format(DateSerial(1900, InI, 1), _
"MMMM")
Next InI
' Jahre in Combobox3 eintragen
For InI = 1900 To 2222
CBvonJahr.AddItem InI
Next InI

CBvonTag.Value = Day(Date) ' Aktuelles Datum als Startwert setzen
CBvonMonat.Value = Format(Date, "MMMM")
CBvonJahr.Value = Year(Date)
CBvonTag.ListRows = 31 ' Länge der angezeiten Liste für Tag und Monat anpassen
CBvonMonat.ListRows = 12
CBvonTag.Tag = "" ' Eigenschaft zurücksetzen

' Eigenschaft setzen damit der Code im Change
' der ComboBoxen bei Auswahl (z.B. ComboBox1.Value = ... )
' nicht ausgeführt wird
CBbisTag.Tag = "1"
Me.StartUpPosition = 1 ' Startposition der Userform links oben
' Tage des aktuellen Monats in ComboBox1 eintragen
For InI = 1 To Day(CDate("01." & Month(Date) + 1 & "." _
& Year(Date)) - 1)
CBbisTag.AddItem InI
Next InI
For InI = 1 To 12 ' Monate als Wort in ComboBox2 eintragen
CBbisMonat.AddItem Format(DateSerial(1900, InI, 1), _
"MMMM")
Next InI
' Jahre in Combobox3 eintragen
For InI = 1900 To 2222
CBbisJahr.AddItem InI
Next InI

CBbisTag.Value = Day(Date) ' Aktuelles Datum als Startwert setzen
CBbisMonat.Value = Format(Date, "MMMM")
CBbisJahr.Value = Year(Date)
CBbisTag.ListRows = 31 ' Länge der angezeiten Liste für Tag und Monat anpassen
CBbisMonat.ListRows = 12
CBbisTag.Tag = "" ' Eigenschaft zurücksetzen

End Sub

Private Sub CBvonTag_Change()
' ausgewählte Zeile auf Variable schreiben
If CBvonMonat.Tag = "" Then ByWert = CBvonTag.ListIndex
End Sub

Private Sub CBbisTag_Change()
' ausgewählte Zeile auf Variable schreiben
If CBbisMonat.Tag = "" Then ByWert = CBbisTag.ListIndex
End Sub

Private Sub CBvonMonat_Change()
If CBvonTag.Tag = "1" Then Exit Sub ' Start der UserForm
' Eigenschaft setzen damit der Code im Change Ereignis der ComboBox1
' beim Auswahl (ComboBox1.ListIndex =... ) nicht ausgeführt wird
CBvonMonat.Tag = 1
' ausgewählte Zeile in ComboBox1 merken,
' da ComboBox1 gelöscht geleert wird
ByWert = CBvonTag.ListIndex
CBvonTag.Clear ' ComboBox1 leeren
If CBvonMonat.ListIndex = 11 Then ' Dezember gewählt
For InI = 1 To 31
CBvonTag.AddItem InI
Next InI
Else
' Ende Schleife 1. des Folgemonats -1,
' damit Monatsende vom ausgewählten Monat
For InI = 1 To Day(CDate("01." _
& CBvonMonat.ListIndex + 2 & "." & CBvonJahr) - 1)
CBvonTag.AddItem InI
Next InI
End If
' ausgewählten Tag in ComboBox1 wieder anzeigen
If ByWert > CBvonTag.ListCount - 1 Then
' falls ausgewählter Tag größer als Tage
' im ausgewählten Monat, wird der letzten Tag angezeigt
CBvonTag.ListIndex = CBvonTag.ListCount - 1
Else
CBvonTag.ListIndex = ByWert
End If
CBvonMonat.Tag = "" ' Eigenschaft zurücksetzen
End Sub
Private Sub CBbisMonat_Change()
If CBbisTag.Tag = "1" Then Exit Sub ' Start der UserForm
' Eigenschaft setzen damit der Code im Change Ereignis der ComboBox1
' beim Auswahl (ComboBox1.ListIndex =... ) nicht ausgeführt wird
CBvonMonat.Tag = 1
' ausgewählte Zeile in ComboBox1 merken,
' da ComboBox1 gelöscht geleert wird
ByWert = CBbisTag.ListIndex
CBbisTag.Clear ' ComboBox1 leeren
If CBbisMonat.ListIndex = 11 Then ' Dezember gewählt
For InI = 1 To 31
CBbisTag.AddItem InI
Next InI
Else
' Ende Schleife 1. des Folgemonats -1,
' damit Monatsende vom ausgewählten Monat
For InI = 1 To Day(CDate("01." _
& CBbisMonat.ListIndex + 2 & "." & CBvonJahr) - 1)
CBbisTag.AddItem InI
Next InI
End If
' ausgewählten Tag in ComboBox1 wieder anzeigen
If ByWert > CBbisTag.ListCount - 1 Then
' falls ausgewählter Tag größer als Tage
' im ausgewählten Monat, wird der letzten Tag angezeigt
CBbisTag.ListIndex = CBbisTag.ListCount - 1
Else
CBbisTag.ListIndex = ByWert
End If
CBbisMonat.Tag = "" ' Eigenschaft zurücksetzen
End Sub


Private Sub CBvonJahr_Change()
If CBvonTag.Tag = "" Then
' Schleife verlassen, wenn Monat verschieden von Februar
If CBvonMonat.ListIndex = 1 Then
' Eigenschaft setzen damit der Code im
' Change Ereignis der ComboBox1 beim Auswahl
' (ComboBox1.ListIndex =... ) nicht ausgeführt wird
CBvonMonat.Tag = 1
' ausgewählte Zeile in ComboBox1 merken,
' da ComboBox1 gelöscht geleert wird
ByWert = CBvonTag.ListIndex
' Tage entsprechend Jahr und Monat füllen
CBvonTag.Clear
For InI = 1 To Day(CDate("01.03." & CBvonJahr) - 1)
CBvonTag.AddItem InI
Next InI
If ByWert > CBvonTag.ListCount - 1 Then
' falls ausgewählter Tag größer als Tage
' im ausgewählten Monat, wird der letzten Tag angezeigt
CBvonTag.ListIndex = CBvonTag.ListCount - 1
Else
CBvonTag.ListIndex = ByWert
End If
CBvonMonat.Tag = "" ' Eigenschaft zurücksetzen
End If
End If
End Sub
Private Sub CBbisJahr_Change()
If CBbisTag.Tag = "" Then
' Schleife verlassen, wenn Monat verschieden von Februar
If CBbisMonat.ListIndex = 1 Then
' Eigenschaft setzen damit der Code im
' Change Ereignis der ComboBox1 beim Auswahl
' (ComboBox1.ListIndex =... ) nicht ausgeführt wird
CBbisMonat.Tag = 1
' ausgewählte Zeile in ComboBox1 merken,
' da ComboBox1 gelöscht geleert wird
ByWert = CBbisTag.ListIndex
' Tage entsprechend Jahr und Monat füllen
CBbisTag.Clear
For InI = 1 To Day(CDate("01.03." & CBbisJahr) - 1)
CBbisTag.AddItem InI
Next InI
If ByWert > CBbisTag.ListCount - 1 Then
' falls ausgewählter Tag größer als Tage
' im ausgewählten Monat, wird der letzten Tag angezeigt
CBbisTag.ListIndex = CBbisTag.ListCount - 1
Else
CBbisTag.ListIndex = ByWert
End If
CBbisMonat.Tag = "" ' Eigenschaft zurücksetzen
End If
End If
End Sub


'Private Sub btn_Eintragen_Click()
'
'With Tabelle4.ListObjects("tab_Termine").ListRows.Add
' .Range(, 1) = CDate(ComboBox1 & "." & ComboBox2 & "." & ComboBox3)
'
' '.Range(, 1).Value = txt_Datum.Value
' .Range(, 2).Value = txt_Anlass.Value
'
'
'End With
'
'Unload Me
'
'End Sub
'



und natürlich die Tabelle zum besseren Verständnis
https://www.herber.de/bbs/user/167030.xlsm

wen es dann um das befüllen und Speichern geht melde ich mich bestimmt wieder.

Vielen Dank schonmal für die Hilfe

Viele Grüße
Lefty

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Befüllen der Comboboxen läuft schief
13.02.2024 14:14:20
onur
Sehr wirrer Code,

Private Sub CBbisMonat_Change()

If CBbisTag.Tag = "1" Then Exit Sub ' Start der UserForm
' Eigenschaft setzen damit der Code im Change Ereignis der ComboBox1
' beim Auswahl (ComboBox1.ListIndex =... ) nicht ausgeführt wird
CBvonMonat.Tag = 1
' ausgewählte Zeile in ComboBox1 merken,
' da ComboBox1 gelöscht geleert wird
ByWert = CBbisTag.ListIndex
CBbisTag.Clear
.....
.....

Sobald CBbisTag.Clear ausgeführt wurde, wird automatisch DAS aufgerufen:
Private Sub CBbisTag_Change()

' ausgewählte Zeile auf Variable schreiben
If CBbisMonat.Tag = "" Then ByWert = CBbisTag.ListIndex
End Sub


Aber CBbisTag.ListIndex ist doch -1, da CBbisTag gerade eben geleert wurde.
Aber ByWert wurde als BYTE dimensioniert (Warum? Hast du nur 1MB RAM ???).
Anzeige
AW: Befüllen der Comboboxen läuft schief
13.02.2024 14:16:18
Yal
Hallo Lefty,

wenn innerhalb einer Ereignis-Prozedure eine Element angefasst, das selber eine Ereignisprozedure unterliegt, dann muss diese Aktion unter Blockierung vom Ereignis stattfinden, sonst bekommt ev. "ein Hund, der seinen Schwanz hinterherläuft" (gilt nicht für UserForm_Initialize, der sowieso Ereignis nicht zulässt).

Es scheint mir unsinnig, zu ermitteln, wie viele Tage das aktuelle Monat hat, um die von/bis-Tage zu befüllen und nachträglich diese Liste anpassen. Lass diese Dropdown 31 Tage haben, und wenn eine Kombi Tag+Monat+Jahr nicht möglich ist, dann setze den Tag auf dem letzten moglichen in dem Monat.
Es ist allgemein unsinn, immer wieder die Combo-Listen immer aufs neu zu ändern. Kann nur schief gehen.

Private Sub CBvonTag_Change()

Dim Jahr As Integer
Dim Monat As Integer
Dim Tag As Integer
Jahr = CBvonJahr.ListIndex + 1
Monat = CBvonMonat.ListIndex + 1
Tag = CBvonTag.ListIndex + 1
Application.EnableEvents = False
If Monat(DateSerial(Jahr, Monat, Tag)) > Monat Then CBvonTag.Value = Day(DateSerial(Jahr, Monat + 1, 0)) 'erster Tag vom Folgemonat minus 1
Application.EnableEvents = True
End Sub


Verwende immer (siehe "Extras", "options") die "Variable-Deklaration" erforderlich. Profis machen es immer so. Warum wohl...

Das Initialisieren der Tag/Monat/Jahr könnte ein bischen aufgeräumter sein:
Private Sub UserForm_Initialize()

Dim Ini

' Tage des aktuellen Monats in ComboBox1 eintragen
For Ini = 1 To 31
CBvonTag.AddItem Ini
CBbisTag.AddItem Ini
Next Ini
'Monat
For Each Ini In Split("Januar Februar März April Mai Juni Juli August September Oktober November Dezember") ' Monate als Wort in ComboBox2 eintragen
CBvonMonat.AddItem Ini
CBbisMonat.AddItem Ini
Next Ini
'Jahr
For Ini = 1900 To 2222
CBvonJahr.AddItem Ini
CBbisJahr.AddItem Ini
Next Ini
'Set up
CBvonTag.Tag = "1"
CBvonTag.Value = Day(Date) ' Aktuelles Datum als Startwert setzen
CBvonMonat.Value = Format(Date, "MMMM")
CBvonJahr.Value = Year(Date)
CBvonTag.ListRows = 31 ' Länge der angezeiten Liste für Tag und Monat anpassen
CBvonMonat.ListRows = 12
CBvonTag.Tag = "" ' Eigenschaft zurücksetzen

CBbisTag.Tag = "1"
CBbisTag.Value = Day(Date) ' Aktuelles Datum als Startwert setzen
CBbisMonat.Value = Format(Date, "MMMM")
CBbisJahr.Value = Year(Date)
CBbisTag.ListRows = 31 ' Länge der angezeiten Liste für Tag und Monat anpassen
CBbisMonat.ListRows = 12
CBbisTag.Tag = "" ' Eigenschaft zurücksetzen

Me.StartUpPosition = 1 ' Startposition der Userform links oben
End Sub


VG
Yal
Anzeige
AW: Befüllen der Comboboxen läuft schief
13.02.2024 14:54:46
Lefty
Hallo zusammen,

Danke für die Anregungen, ich sollte jetzt jedoch zur Arbeit und werde mich heute Abend genauer mit euren Antworten befassen.

Bis Später

Viele Grüße
Lefty
Bedeutet Lefty, dass die linke Maustaste durch ist?
13.02.2024 17:29:36
RPP63
Moin!
Ernsthaft: Ich habe noch niemals so einen … überflüssigen Code gesehen!
Ich gebe (wenn ich denn unbedingt ein Userform verwenden will) ein gültiges Datum in eine Textbox ein.
Im _Exit prüfe ich auf IsDate() und wandle mittels CDate() um.
Dazu benutze ich den Ziffernblock (die Maus bleibt im Loch).
29-2 ist (in diesem Jahr) ein gültiges Datum (29.02.2024), genauso wie 2/7 (02.07.2024) oder auch 3-5-63 (03.05.1963)

Gruß Ralf
Anzeige
AW: Befüllen der Comboboxen läuft schief
13.02.2024 20:58:29
Lefty
Schönen guten Abend zusammen,

mit eurer Hilfe läuft die UF jetzt, zumindest die Datumseingabe.
An Textfelder hatte ich auch gedacht aber mit der CB finde ich die Eingabe etwas User-Freundlicher und es schließt Fehler bei der Eingabe aus
da jeder seine eigene Schreibweise bei der Datumseingabe hat.
Nun hab ich gelesen das man diese mit CDate etc. anpassen kann aber dazu kenne ich mich zu wenig aus was nicht heißt dass ich mir das nicht mal anschaue.

Vielen Dank nochmal für die ganzen Anregungen und auch Lösungen

Auf Bald und viele Grüße
Lefty

Anzeige
Usability
14.02.2024 06:51:17
RPP63
An Textfelder hatte ich auch gedacht aber mit der CB finde ich die Eingabe etwas User-Freundlicher
User-Freundlich?
Mit Verlaub, das ist nicht userfreundlich, sondern eine unsägliche Verlangsamung des Workflows!
Beispiel:
Um den 07.09.2024 "einzugeben", musst Du erst mal die Maus greifen,
• klickst auf Tag, scrollst bis 17
• klickst auf Monat, scrollst bis 10
• klickst auf Jahr, scrollst bis 2024
(geschätzte Zeit: mindestens 10 Sekunden)

Bei einer Textbox gibst Du 7-9 ein und drückst Tab oder Enter (geschätzt: 2 Sekunden)

und es schließt Fehler bei der Eingabe aus
Dies kann man sehr einfach mit extrem wenig Code lösen!
Hier mal mit einer Inputbox:
Sub Check_Date()

Dim Datum As Variant
Datum = Application.InputBox( _
"Bitte ein Datum im Format d.m[.y] eingeben")
If IsDate(Datum) Then
MsgBox "Glückwunsch!" & vbLf & _
"Deine Eingabe " & Datum & _
" konnte erfolgreich als folgendes Datum interpretiert werden:" & vbLf & _
Format(CDate(Datum), "dddd, dd.mm.yyyy"), vbInformation
Else
MsgBox "Sorry!" & vbLf & _
Datum & " ist für VBA kein gültiges Datum!", vbCritical
End If
End Sub


ergibt:



Conclusio:
Jeder, wie er mag!
Ich persönlich halte aber wenig bis nichts davon, einen User gängelnd einzubremsen.

Gruß Ralf
Anzeige
AW: Usability
14.02.2024 11:16:04
Lefty
Guten Morgen Ralf,

manchmal muss man die unwissenden doch in die "richtige" Richtung schubsen.

Ich habe mal deinen Rat befolgt und die UF etwas abgeändert, bis auf dass excel
Fehleingaben wie z.b. 31/4/24 in 24.04.2031 ändert, finde ich die Lösung mit den Textfeldern doch
angenehm. Ich denke die Fehleingaben lassen sich sicherlich einfangen aber das ist ein anderes Thema.

Ein Problemchen habe ich jetzt aber noch mit meiner Tabelle in der die Daten eingetragen werden.
Jedes mal wen eine neue Zeile zugefügt wird ändert die Tabelle ihr Datumsformat in Benutzerdefiniert "M.T.JJJJ"
Das Datum wird jedoch, wie ausgegeben, in "dddd dd.mm.yyyy" angezeigt.
Ich glaube auch das es sich auf die bedingte Formatierung zum einfärben der Zeilen Auswirkt.

https://www.herber.de/bbs/user/167047.xlsm

Viele Grüße
Lefty
Anzeige
AW: Usability
14.02.2024 11:38:47
Alwin Weisangler
Hallo,

über dieses Problem bin ich auch vor kurzem gestolpert. Bei der Kombin Win10 und Office2019 passiert das nicht.

Wenn man diese so erzeugte Datei dann auf Win11 und Office2021 öffnet und speichert passiert genau dieses Problem.
Du kannst einfach die Spalte markieren und das Format auf das von dir gewünschte Format einstellen. Dann bleibt das Problem weg.

Es hat auch nichts mit amerikanischer Lizenz (was mein anfänglicher Verdacht war) zu tun. Es kann sein, dass dieses Problem von selbst bei einem der nächsten Updates verschwindet, oder es bleibt gar dauerhaft so.

Anbei meine beim Bier entstandene Lösung. Ich weiß natürlich, dass es besser ist dies mit Textboxen zu machen, oder einfach in die Zellen reinschreiben.
https://www.herber.de/bbs/user/167049.xlsm

Gruß Uwe
Anzeige
AW: Usability
14.02.2024 22:11:54
Uduuh
Hallo,
mit
.Range(, 1) = Format(CDate(datumVon), "dddd, dd.mm.yyyy")

schreibst du einen TEXT in die Zelle und kein Datum.
Statt dessen solltest du den dem Datum entsprechenden LONG-Wert in die Zelle schreiben.
.Range(, 1) = CLng(CDate(datumVon))

Das vermeidet auch, dass (da VBA englisch spricht) Monat und Tag (wo möglich) vertauscht werden. z.B. wird der 11.2. zum 2.11. Nicht aber der 13.2. zum 2.13., da es den 2.13. nicht gibt.

Gruß aus'm Pott
Udo
AW: Usability
14.02.2024 23:24:05
Alwin Weisangler
Hallo Udo,

ja, das hatte ich u.a. auch getestet/ausprobiert. Da passiert dann folgendes:
Es ist das Datum TT.MM.JJJJ lesbar in der Zelle. Wenn man diese Zelle in eine Variant Variable oder Array einliest hat man dann m/d/yyyy drinstehen.
Wie schon gesagt in Konstellation Win10 und Office2019 alles in Butter.
In einer meiner letzten Projekte waren bis Oktober alle Datumseintragungen in Listobjekt i.O. und die letzten beiden standen lesbar TT.MM.JJJJ drin und im Array zwecks Weiterverarbeitung m/d/yyyy.
Im Oktober hatte ich den Rest auf meinem Laptop fertig programmiert und einige kleine Schwächen weggemacht. Da war es dann passiert. Man kanns im Array problemlos wieder #dd.mm.yyyy# gerade rücken --> Split --> Dateserial.

Gruß Uwe
Anzeige
AW: Befüllen der Comboboxen läuft schief
14.02.2024 10:07:36
Yal
Moin,

ich schliesse mich die Anmerkung von Ralf an und ergenze folgendes (aus langer beruflicher Erfahrung):

"die Eingabe etwas User-Freundlicher und es schließt Fehler bei der Eingabe aus, da jeder seine eigene Schreibweise bei der Datumseingabe hat."
Ist es sinnvoll, mit sehr viel Aufwand nur eine minimale Unterstützung dem User anzubieten, die am Ende nur den Effekt haben, dass erstens die User "fauler" werden und zweitens alle "Problem" dem Programmierer zugeschrieben werden?

Es sieht so aus, als diese Code in beruflichen Umfeld verwenden wird. Hier gilt "mit Profis arbeiten". Und ein Profi hat zu wissen, was er zu tun hat. Wer sich nicht die Mühe gibt oder nicht in der Lage, eine Datum korrekt einzugeben (spricht von Excel als korrekte Datum akzeptiert), ist fehl am Platz.

Fazit: gut gemeint, aber das Aufwand steht in solche Fälle nicht im Verhältnis zu dem Nutzen (auf langer Sicht).

VG
Yal
Anzeige
AW: Befüllen der Comboboxen läuft schief
13.02.2024 15:08:44
Alwin Weisangler
Hallo,

aus deinen Vorgaben mein Vorschlag:
in die Userform:


Option Explicit
Dim Block As Boolean

Private Sub CBvonJahr_Change()
TageVon
End Sub

Private Sub CBvonMonat_Change()
TageVon
End Sub

Private Sub CBbisJahr_Change()
TageBis
End Sub

Private Sub CBbisMonat_Change()
TageBis
End Sub

Private Sub TageVon()
Dim i&, Letzter&, arrTage
If Block = True Then Exit Sub
Letzter = DateSerial(CBvonJahr, CBvonMonat.ListIndex + 2, 0) + 1 - DateSerial(CBvonJahr, CBvonMonat.ListIndex + 1, 1)
ReDim arrTage(1 To Letzter)
For i = 1 To Letzter
arrTage(i) = i
Next i
CBvonTag.List = arrTage
End Sub

Private Sub TageBis()
Dim i&, Letzter&, arrTage
If Block = True Then Exit Sub
Letzter = DateSerial(CBbisJahr, CBbisMonat.ListIndex + 2, 0) + 1 - DateSerial(CBbisJahr, CBbisMonat.ListIndex + 1, 1)
ReDim arrTage(1 To Letzter)
For i = 1 To Letzter
arrTage(i) = i
Next i
CBbisTag.List = arrTage
End Sub

Private Sub Tageaktuell()
Dim i&, Letzter&, arrTage
CBvonJahr.ListIndex = Year(Date) - 1900
CBbisJahr.ListIndex = Year(Date) - 1900
CBvonMonat.ListIndex = Month(Date) - 1
CBbisMonat.ListIndex = Month(Date) - 1
Letzter = DateSerial(Year(Date), Month(Date) + 1, 0) + 1 - DateSerial(Year(Date), Month(Date), 1)
ReDim arrTage(1 To Letzter)
For i = 1 To Letzter
arrTage(i) = i
Next i
With CBvonTag
.List = arrTage
.ListIndex = Day(Date) - 1
End With
With CBbisTag
.List = arrTage
.ListIndex = Day(Date) - 1
End With
End Sub

Private Sub UserForm_Initialize()
Dim arrJahr(0 To 322), arrMonat(1 To 12), i&
Block = True
For i = 0 To 322
arrJahr(i) = 1900 + i
Next i
For i = 1 To 12
arrMonat(i) = Format(DateSerial(1900, i, 1), "mmmm")
Next i
CBvonJahr.List = arrJahr
CBbisJahr.List = arrJahr
CBvonMonat.List = arrMonat
CBbisMonat.List = arrMonat
Tageaktuell
Block = False
End Sub


Gruß Uwe
@Yal
13.02.2024 14:31:23
Uduuh
Hallo,
und wenn eine Kombi Tag+Monat+Jahr nicht möglich ist,
Für Excel ist bis zum 25.11.4637 (999999) jede Kombi möglich. Aus DateSerial(2024, 2, 31) wird einfach der 2. März 2024. Das erfordert dann doch eine detaillierte Analyse. ;-)

Ich würde für die Datumseingabe sowieso keine Comboboxen verwenden. Einfach Textfelder. Schneller zu füllen und einfacher zu handhaben.

Gruß aus'm Pott
Udo
AW: @Yal
13.02.2024 16:34:18
Yal
Hallo Udo,

haarscharf erkannt. Dementsprechend folgender Test (die Combo vom TO sind tatsächlich Text (Monat) + Zahl (Tag & Jahr):
If Monat(DateSerial(Jahr, Monat, Tag)) > Monat Then CBvonTag.Value = Day(DateSerial(Jahr, Monat + 1, 0)) 'erster Tag vom Folgemonat minus 1


am Beispiel
Month(DateSerial(2024, 2, 30)) ergibt 3, also ungleich 2. Wird auf Day(DateSerial(2024, 3, 0)) aka 29.

VG
Yal

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige