Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1828to1832
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

Comboboxen anpassen

Comboboxen anpassen
05.05.2021 18:44:18
Andreas
Hallo Excelprofis,
ich hab mal wieder ein Problem, bei dem ich nicht weiter komme. Ich habe hier eine Möglichkeit gefunden mit 3 Comboboxen ein Jahr, Monat und Tag auszuwählen.
Leider kann ich die Boxen nicht an meine Anforderungen anpassen.
Folgende Vorgaben habe ich.
1. In der Combobox_Jahr soll immer der Wert aus A1 des aktiven Blattes stehen. Hier steht immer ein Datum im Format JJJJ.
2. In den Comboboxen Monat und Tag sollen dann der entsprechende Werte stehen. Hier soll aber kein Wert vorausgewählt sein, also Index-1.
Kann mir das bitte Jemand umschreiben.
Für die Hilfe und Mühe bedanke ich mich.

Private Sub UserForm_Initialize()
' Eigenschaft setzen damit der Code im Change
' der ComboBoxen bei Auswahl (z.B. ComboBox_Tag.Value = ... )
' nicht ausgeführt wird
ComboBox_Tag.Tag = "1"
Me.StartUpPosition = 0                          ' Startposition der Userform links oben
' Tage des aktuellen Monats in ComboBox_Tag eintragen
For InI = 1 To Day(CDate("01." & Month(Date) + 1 & "." _
& Year(Date)) - 1)
ComboBox_Tag.AddItem InI
Next InI
For InI = 1 To 12                               ' Monate als Wort in ComboBox_Monat eintragen
ComboBox_Monat.AddItem Format(DateSerial(1900, InI, 1), "MMMM")
Next InI
' Jahre in Combobox_Jahr eintragen
For InI = 1900 To 2222
ComboBox_Jahr.AddItem InI
Next InI
ComboBox_Tag.Value = Day(Date)                     ' Aktuelles Datum als Startwert setzen
ComboBox_Monat.Value = Format(Date, "MMMM")
ComboBox_Jahr.Value = Year(Date)
ComboBox_Tag.ListRows = 31                         ' Länge der angezeiten Liste für Tag und Monat anpassen
ComboBox_Monat.ListRows = 12
ComboBox_Tag.Tag = ""                              ' Eigenschaft zurücksetzen
End Sub

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

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

mfg, Andreas

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachbau macht keiner!
06.05.2021 07:25:19
MCO
Hallo Andreas!
Das ist ja schon ausführlich, aber besser wäre es wenn du eine Beispieldatei dazugepackt hättest.
Ich bau das nicht nach und viele andere (gute) Helfer tun das auch nicht.
Im Endeffekt sparst du dir damit lästige Rückfragen und erhälst nachher eine geprüfte Lösung.
Gruß, MCO
AW: Nachbau macht keiner!
06.05.2021 08:08:07
Andreas
Hallo MCD,
vielen Dank für die Antwort. Eine Beispielarbeitsmappe wird dauern. Das Projekt ist so groß, da muss ich eine neue Arbeitsmappe erstellen. Ich werde heute Abend mal eine Mappe erstellen.
Im Grunde benötige ich eigentlich nur 3 Boxen. In der ersten steht der Wert aus A1, in der 2. die 12 Monate und in der 3. sollen die Tage, abhängig von Jahr und Monat stehen.
mfg, Andreas
Anzeige
AW: Nachbau macht keiner!
06.05.2021 19:03:05
Andreas
Hallo,
ich habe mal eine Beispielmappe erstellt.
https://www.herber.de/bbs/user/146040.xlsm
Mit der ComboBoxAendern wähle ich das jeweilige Blatt. Mit der ComboBox_Mitglied wähle ich aus dem Bereich B:B60 eine Zeile aus.
Die Coboboxen Jahr, Monat und Tag und den dazugehörigen Code habe ich aus dem Archiv hier.
Leider kann ich den Code nicht an meine Bedingungen anpassen.
In ComboBox_Jahr soll das Datum aus A1 stehen. Oh, ich sehe gerade ich hab das Datum vergessen. In A1 steht immer ein Datum im Format JJJJ.
In ComboBox_Monat sollen die 12 Monate stehen.
In ComboBox_Tag sollen dann die Tage unter Berücksichtigung des Monates und Jahres stehen.
Das Jahr aus ComboBox_Jahr soll nach Auswahl in ComboBox_Mitglied aktiv sein, weil die ComboBox_Jahr ausgeblendet ist.
In ComboBox_Monat und ComboBox_Tag soll kein Wert vorausgewählt sein, also Listindex-1.
Nach Auswahl des Datums, durch die Comboboxen, wird das Datum dann ins Blatt geschrieben.
Ich hoffe ich habe nichts vergessen und mich Verständlich ausgedrückt.
Vieleicht kann mir Jemand helfen. Vielen Dank für's Lesen und die Mühe.
MFG, Andreas
Anzeige
AW: Nachbau macht keiner!
06.05.2021 21:08:57
Yal
Hallo Andreas,
im allgemein geht es darum, die Tage anhand des Jahres und Monats zu beschränken. Was der tatsächlich Aufgabe angeht, habe ich noch nicht durchgeblickt. In diesem Sinn, bitte nicht böse sein, falls nicht alles funktioniert wie gewünscht. Der Wunsch ist mir nicht klar genug.
Ich habe "Combo_Tag_ausfüllen" als separate Sub rausgenommen. Bei Init, Jahr_Change und Monat_Change wird den Sub gerufen. Du wirst vielleicht merken (aber nur wenn Du den Code im Schrittmodus laufen lässt), dass diese Tag-Ausfüllen zweimal gerufen wird: einmal bei Jahr setzen. Fehlerhaft. Einmal bei Monat setzen. Dann richtig. Es bewegt sich in Micro-Sekundenbereich. Eine Optimierung "nur bei Februar" wäre auch nicht notwendig. Ich habe es trotzdem drin belassen.
Um die wiederausrufende Erreignis zu blockieren, immer mit Application.EnableEvents = False am Anfang eines Sub/Function und = True am Ende setzen.
https://www.herber.de/bbs/user/146043.xlsm
Ich habe im VB-Editor unter "Extras", "Optionen" den "Variabledeklaration erforderlich" angeklickt. Führt zu besseren Code.
Viel Erfolg damit
Yal
Anzeige
AW: Nachbau macht keiner!
06.05.2021 21:37:20
Andreas
Hallo Yal,
vielen Dank für die Hilfe und Mühe. Das ist aber nicht was ich wollte.
Es gibt in der Originalmappe natürlich mehrere Blätter.
In Combobox_Jahr soll keine Auswahl möglich sein. Hier soll immer nur ein Wert stehen, der Wert aus Zelle A1 des aktiven Blattes. Ich habe in meiner Beispielmappe nur vergessen in A1 einen Wert einzutragen. Dort steht immer ein Datum im Format JJJJ.
In der Comboboxen_Monat und Combobox_Tag soll nicht der aktuelle Monat und der aktuelle Tag vorausgewählt sein, also so wie Listindex -1.
Ansonsten ist das schon richtig. Durch den Commandbutton soll der Wert aus den 3 Comboboxen in die Zelle geschrieben werden.
Viele Grüße
Andreas
Anzeige
AW: Nachbau macht keiner!
07.05.2021 16:46:33
Oberschlumpf
Hi Andreas,
tja, dann zeig uns doch per Upload eine Bsp-Datei, die auch dann hilfreich ist, wenn es darum geht, die für die Bsp-Datei vorgeschlagenen Lösungen auf dein Original zu übertragen.
Und wenn - du - vergisst, z Bsp in A1, wichtige Informationen einzutragen, dann darfst du dich nich wundern, wenn das von Antwortern nicht berücksichtigt wird - denn - woher sollen wir denn wissen, wo etwas geändert werden darf oder nicht?! :-)
Ciao
Thorsten
AW: Nachbau macht keiner!
08.05.2021 09:20:37
Andreas
Hallo Torsten,
hier eine Beispielmappe in der das Datum drinn steht.
https://www.herber.de/bbs/user/146069.xlsm
Vieleicht noch mal zur Erklärung. Es gibt in dieser Mappe mehrere Tabellen Abrechnung, immer für ein Jahr. Mit der ComboBoxAendern wähle ich das zu bearbeitende Blatt aus. Mit der ComboBox_Mitglied wähle ich die Zeile, in die das Datum aus den Comboboxen Jahr, Monat und Tag zurückgeschrieben wird.
Das Datum aus den 3 Comboboxen muss mit dem Jahr aus Zelle A1 übereinstimmen. Mit dem Datum wird dann später noch gerechnet, deshalb darf es hier zu keinen Fehleingaben kommen.
Aus diesem Grund soll in Combobox_Jahr nur das Jahr aus A1 stehen und auch aktiv sein, da die Combobox_Jahr später ausgeblendet wird.
Im Grunde wird die Combobox_Jahr nur dazu gebraucht um die Anzahl der Tage in Combobox_Tag, abhängig von jahr und Monat darzustellen.
In den Comboboxen Monat und Tag sollen dann die 12 Monate und die dazugehörigen Tage stehen. In den Comboboxen Monat und Jahr soll bei Aufruf der UserForm aber nicht das aktuelle Datum vorausgewählt sein, sondern gar nichts. Das ist wirklich wichtig, damit der Nutzer aktiv ein Datum wählen muss.
Ich hoffe es ist verständlich. Und sorry für das fehlende Datum.
mfg, Andreas
Anzeige
AW: Nachbau macht keiner!
08.05.2021 18:44:56
Andreas
Hallo Torsten,
vielen Dank für Deine Hilfe.
hast Du vieleicht die falsche Datei hochgeladen? Die Comboboxen Jahr, Monat und Tag. Sind beim Aufruf der UserForm genauso gefüllt wie vorher.
mfg, Andreas
AW: Nachbau macht keiner!
09.05.2021 08:42:01
Andreas
Hallo,
ich habe mich im letzten Beitrag etwas unpräzise ausgedrückt. Die Comboboxen Jahr, Mooat und Tag können ja nicht nach Aufruf der UserForm gefüllt sein, sondern erst nach der Wahl des Blattes durch die ComboBoxAendern, da ja die ComboBox_Jahr nur mit dem Jahr aus der Zelle A1 des aktiven Blattes gefüllt sein soll.
Ich habe mal zum besseren Verständnis eine Mappe mit 2 Blatter hochgeladen.
Wähle ich in der ComboBoxAendern das Blatt "Abrechnung 2020" soll in der ComboBox_Jahr nur der Wert 2020 stehen, sonst nix.
Wähle ich in der ComboBoxAendern das Blatt "Abrechnung 2021" soll in der ComboBox_Jahr nur der Wert 2021 stehen, sonst nix.
https://www.herber.de/bbs/user/146095.xlsm
Vielen Dank für die Mühe und die Hilfe.
mfg, Andreas
Anzeige
AW: Nachbau macht keiner!
09.05.2021 09:15:02
Oberschlumpf
Hi Andreas,
unabgängig von deiner neuen Bsp-Datei, die ich noch nicht gesehen habe.....hast denn du in meiner Datei mal versucht, im Userform(luar) den Jahreseintrag in der Combobox zu ändern?
Dann hättest du merken müssen, dass genau dieser Änderungsversuch verhindert wird.
Bin auf deine Antwort neugierig.
Ciao
Thorsten
AW: Nachbau macht keiner!
10.05.2021 09:15:20
Andreas
Hallo Torsten,
sorry, dass hab ich nicht gemerkt. Allerdings wird eine Falscheingabe dadurch nicht verhindert. Wenn ich das Blatt Abrechnung 2020 über die Combobox_Aenderung auswähle und keine Änderung der Combobox_Jahr vornehme wird das Datum trotzdem in die Tabelle geschrieben.
Genau das sollte ja nicht passieren, dass ein Datum aus 2021 in die Tabelle 2020 geschrieben wird.
Ich habe inzwischen eine andere Lösung gefunden, die 3 Comboboxen zu füllen.
Vielen Dank für Deine Mühe und Hilfe.
mfg, Andreas
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige