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

Kombinationsfeld mit Auswahl + Übergabe befüllen

Kombinationsfeld mit Auswahl + Übergabe befüllen
16.07.2013 19:41:15
Udo
Hallo zusammen,
ich möchte ein Kombinationsfeld eimal per Auswahl ausfüllen (was auch funktioniert), aber zusätzlich auch per Übergabe ausfüllen können.
Hintergrund:
In meinem Kassenbuch kann ich die Blattauswahl (je Monat ein Blatt) über Kombinationsboxen auswählen lassen. 1 Kobinationsfeld für den Tag, eines für den Monat. Das Jahr wird automatisch hinzugefügt. Um die Eingabe des Datums zu vereinfachen, habe ich nun ein Textfeld hinzugefügt in welchem ich nur noch 0107 oder 29.11 eingeben muß. Daraus wird ein komplettes Datum generiert und in ein Label.Caption geschrieben (das wird zur Zeilensuche gebraucht).
Der Tag wird korrekt in das Kombinationsfeld für den Tag geschrieben und das Kombinationsfeld für den Monat wird aktiviert - ABER nicht ausgefüllt (und somit auomatsch das dem Monat entsprechende Tabellenblatt ausgewäht)
Im Archiv habe ich einige Ansätze gefunden - aber ich bekomme das nicht hin...
Kann mir jemand von Euch helfen?
Im Voraus vielen Dank,
Udo
Diesen Code habe ich hinter meinem Textfeld:
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim sDatum    As String
Dim sEingabe  As String
Dim sMonat    As String
Dim sTag      As String
If Not Me.TextBox1.Value = "" Then ' TextBox ist nicht leer ?
Application.EnableEvents = False
On Error GoTo Fehler
'     die eingegebenen Punkte eliminieren - leider auch führende Nullen
sEingabe = CStr(CLng(Trim(Me.TextBox1.Value)))
'     ist der Tag mit führender Null eingegeben worden - z. B. 01.04 ?
If Left(Me.TextBox1.Value, 1) = "0" Or _
Len(sEingabe) = 3 Then
sEingabe = "0" & sEingabe
End If
If Len(sEingabe) = 4 Then       ' als TTMM/TT.MM
sTag = Left(sEingabe, 2)
sMonat = Mid(sEingabe, 3, 2)
End If
sDatum = sTag & "." & sMonat & "." & TextBox_Jahr.Value
If IsDate(sDatum) Then
Label10.Caption = sDatum
CBTag.Value = sTag
CBMonat.SetFocus
If sMonat = "01" Then CBMonat.Value = "Januar"
ElseIf sMonat = "02" Then CBMonat.Value = "Februar"
ElseIf sMonat = "03" Then CBMonat.Value = "März"
ElseIf sMonat = "04" Then CBMonat.Value = "April"
ElseIf sMonat = "05" Then CBMonat.Value = "Mai"
ElseIf sMonat = "06" Then CBMonat.Value = "Juni"
ElseIf sMonat = "07" Then CBMonat.Value = "Juli"
ElseIf sMonat = "08" Then CBMonat.Value = "August"
ElseIf sMonat = "09" Then CBMonat.Value = "September"
ElseIf sMonat = "10" Then CBMonat.Value = "Oktober"
ElseIf sMonat = "11" Then CBMonat.Value = "November"
ElseIf sMonat = "12" Then CBMonat.Value = "Dezember"
End If
Worksheets(CBMonat.Text).Activate
Application.EnableEvents = True
On Error GoTo 0
End If
Exit Sub
Fehler:
Application.EnableEvents = True
End Sub

Und diesen Code habe ich hinter meinen Kombinationsfeldern:
Private Sub CBMonat_Change()
Worksheets(CBMonat.Text).Activate
Label10.Caption = CDate(CBTag.Value & "." & CBMonat.Value & "." & TextBox_Jahr.Value)
Frame2.Visible = True
Range("B9:E54").Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
Formula1:="0", Formula2:="0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Bold = False
.Italic = False
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.14996795556505
End With
Selection.FormatConditions(1).StopIfTrue = False
Cells(5, 6).Activate
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Kombinationsfeld mit Auswahl + Übergabe befüllen
16.07.2013 20:13:21
Udo
Ups - noch offen...
(sorry)

da sind aber noch ein paar Fehler "chen" drin
17.07.2013 00:34:49
Matthias
Hallo
Also ein paar Fehler"chen" sind schon noch drinn in Deinem Programm
In Private Sub CBMonat_Change() muss unbedingt eine Fehlerroutine rein.
Gibt man z.B. 3102 ein steigt VBA komplett aus, da es den 31.02 nicht gibt.
Genauso bei anderen ungültigen Eingaben


Ansonsten kannst Du Dein Problem so lösen:
Im TextBox1_BeforeUpdate
Unmittelbar nach:
CBMonat.SetFocus
schreibst Du:
CBMonat.ListIndex = Month(sDatum) - 1
Die ganzen ElseIf-Anweisungen sind dann überflüssig.
Userbild

Anzeige
AW: da sind aber noch ein paar Fehler "chen" drin
17.07.2013 09:43:11
Udo
Hallo Mathias,
deine Lösung funktioniert super. DANKE
Das mit der Fehlerroutine kann sein... mit den Jahren habe ich an der Datei immer mal wieder "rumgebastelt" und viele kleine Sachen geändert - meist aus Beispielen in diesem Forum hier. Ursprünglich (so vor 8 - 9 Jahren) hat mir mal jemand hier enorme Hilfe geleistet (dank an Hajo).
Da ich aber das Datum immer von den Rechnungen abtippe, denke ich mal das ich damit leben kann...
Trotzdem Danke für den Hinweis! (Hab´ich mal probiert - Du hattest recht)
Vielen Dank nochmal,
Udo

noch ein paar Anmerkungen ...
17.07.2013 10:09:25
Matthias

Hallo Udo


For i = 1 To Worksheets.Count - 2

nicht -2, denn sonst fehlt der Dezember!
sondern:
For i = 1 To Worksheets.Count - 1

Desweiteren ...
Wenn man zuerst den Monat auswählt steigt VBA aus.
Du solltest also evtl. den Monat erst freigeben ,wenn ein Tag gewählt wurde.
bzw. nur die Monate zur Verfügung stellen, die z.B. auch 31 Tage haben(wenn man 31 als Tag wählt).
Ist F1 bereits die aktive Zelle
Dann musst Du die Zelle erst wieder verlassen und dann wieder Aktivieren, damit sich das Formular öffnet.
Auch nicht gerade optimal!
Desweiteren:
Bei leeren Formular und Klick auf Suchen (VBA-Fehler) da es UserForm3 nicht gibt.
Du siehst es ist noch etwas Handlungsbedarf
Wenn Du möchtest bleib ich am Objekt dran und teste weiter
Gruß Matthias

Anzeige
AW: noch ein paar Anmerkungen ...
17.07.2013 11:03:37
Udo
Hallo Mathias,
hier mal die "komplette" Datei - inkl. aller Userformen. (die hatte ich der Einfachheit-halber rausgenommen)
https://www.herber.de/bbs/user/86415.xlsm
Es freut mich natürlich das Du mir da hifst, aber bedenke bitte das ich kaum Ahnung von VBA habe...
Vorab vielen Dank,
Udo

CBMonat.Visible = True nützt da nicht viel
17.07.2013 11:34:27
Matthias
Hallo
Private Sub CBTag_Change()
CBMonat.Visible = True
End Sub
nützt so aber nichts, da wenn Du z.B. den Tag 31 wählst immernoch z.B. Febrauar als Auswahl zur Verfügung steht.
Zitat
Es freut mich natürlich das Du mir da hifst, aber bedenke bitte das ich kaum Ahnung von VBA habe...
Ich werde Dir natürlich nur Tipps geben können und Testen
Die Änderungen am Programm musst Du dann selbst realisieren.
Muss jetzt aber den Rechner abschalten, ich schau erst heute Abend wieder rein
Viel Erfolg bis dahin
Gruß Matthias

Anzeige
AW: noch ein paar Anmerkungen ...
18.07.2013 08:40:14
Matthias
Hallo Udo
Noch Interesse?
Nun muss es wieder heißen -3
Private Sub UserForm_Initialize()
For i = 1 To Worksheets.Count - 3
'...
Da jetzt am Ende 2 Tabellen stehen.
Gruß Matthias

AW: noch ein paar Anmerkungen ...
18.07.2013 09:35:53
Udo
Hallo Mathias,
ja natürlich, gern...
Gestern war ich arbeitsbedingt bis 9,30 Uhr unterwegs ...
Obigen Code habe ich geändert.
Gruß, Udo

CBTag_Change geändert ...
20.07.2013 07:56:34
Matthias
Hallo Udo
So werden nur Monate in die Box geschrieben, deren gewählter Tag auch im Monat vorhanden ist
Private Sub CBTag_Change()
Dim i&
If CBTag  "" Then
If IsNumeric(CBTag) Then
With CBMonat
.Clear
.Visible = True
For i = 1 To Worksheets.Count - 3
If CInt(Day(DateSerial(TextBox_Jahr.Value, i, CBTag.Value))) = CInt(CBTag.Value) Then
.AddItem (Worksheets(i).Name)
End If
Next i
End With
End If
End If
End Sub
Gruß Matthias

Anzeige
AW: CBTag_Change geändert ...
20.07.2013 12:52:25
Udo
Hallo Mathias,
stört es denn nicht, das in in "UserForm_Initialize()" auch schon eine Routine für die Monatseingabe drin habe? Und was wird dann aus der automatischen Blattauswahl und der Formatierungen?
Gruß, Udo

Version2
22.07.2013 12:06:23
Matthias
Hallo
Hab mich mal nur mit CBTag und CBMonat befasst
Textbox1 habe ich mal komplett auskommentiert.
Bei Auswahl in CBTag z.B. von 31 werden nur die Monate eingelesen die auch 31 Tage haben.
Könnte man auch mit Select Case lösen, ich wollte aber nicht zu viel in Deinem Projekt ändern.
Wenn Du also auf Textbox1 verzichten kannst, könntest Du evtl. mit dieser Version arbeiten.
https://www.herber.de/bbs/user/86503.xlsm
Gruß Matthias
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige