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

Frage an Erich aus Kamp-Lintfort

Frage an Erich aus Kamp-Lintfort
20.02.2014 05:24:18
Michael
Hallo Erich,
habe mich noch gar nicht für Deine excellente Hilfe bedankt... Das möchte ich jetzt noch nachholen.
Danke dir, hast mir wirklich sehr gut geholfen! Ohne diese Hilfe hätte ich das niemals hinbekommen...:-))
Noch eine Frage zu deinem Code.
Das ganze wird ja ausgelöst auf einem Excelsheet nach Eingabe Datum und Enter.
Ist es auch möglich die Auslösung auf einer Userform nach Change einer ComboBox?
Hier nochmal der ganze Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wsMon As Worksheet, lngC As Long, arD, arA, qq As Long
Dim arE(), arF(), ee As Long, ff As Long, bolPr As Boolean
If Not Target.Address(0, 0) = "C7" Then Exit Sub
If Not IsDate(Target) Then MsgBox "Kein Datum - Abbruch": Exit Sub
Set wsMon = Sheets(Format(Target, "mmmm"))   ' Tabellenblatt mit dem Monat
lngC = Day(Target) + 3                       ' Spalte mit dem Tag
arD = wsMon.Cells(9, lngC).Resize(52)        ' Werte Spalte des Tages
arA = wsMon.Cells(9, 1).Resize(52)           ' Werte Spalte A
ReDim arE(1 To UBound(arD), 3)
ReDim arF(1 To UBound(arD), 3)
For qq = 1 To UBound(arD)
Select Case arD(qq, 1)
Case " "                                ' leer
Case "F", "S", "N", "Alt/F", "Alt/S", "T", "T1", "T2"  ' "Bedingung primär"
ee = ee + 1
arE(ee, 0) = arA(qq, 1)
arE(ee, 1) = arD(qq, 1)
bolPr = True
Case Else
If IsEmpty(arA(qq, 1)) And IsNumeric(arD(qq, 1)) Then
If bolPr Then
arE(ee, 2) = arD(qq, 1)          ' Uhrzeit
Else
arF(ff, 2) = arD(qq, 1)          ' Uhrzeit
End If
If qq 
Ich hoffe du kannst mir dabei nochmal helfen?
Gruß Michael

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Makro ändern auf Abfrage mit cbo Box
20.02.2014 23:59:41
Michael
Hallo Forum,
Möchte die Frage auch an alle Anderen weitergeben...
Gruß michael

Rückfragen
21.02.2014 10:27:16
Erich
Hi ,
danke für deinen Dank (auch wenn er besser in den Januar gepasst hätte :-) ).
Gut wäre gewesen, wenn du gleich mitgeteilt hättst, auf welchen alten Thread sich dein Beitrag bezieht:
https://www.herber.de/forum/archiv/1344to1348/t1346781.htm
(suchen, kopieren, weitersuchen von Michael vom 26.01.2014 22:27:05)
Die Frage "Ist es auch möglich die Auslösung auf einer Userform nach Change einer ComboBox?"
kann ich wohl mit "Vermutlich ja" beantworten.
Die zweite Frage: "Ich hoffe du kannst mir dabei nochmal helfen?" eher mit "Noch kaum".
Da sind einige Fragen offen:
Wie heißt die ComboBox?
Wie steht darin der Suchbegriff?
Wird schon geeprüft, dass nur ein Datum eingegeben werden kann?
Soll es das (ähnlich reagierende) bisherige Worksheet_Change() weiterhin geben?
usw.
Gut wäre eine kleine Beispielmappe!
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Rückfragen
21.02.2014 18:39:45
Michael
Hallo Erich,
ComboBox wird so gefüllt:
Private Sub UserForm_Initialize()
Dim i As Long
Dim A
A = Year(Date)
a_start = "01.01." & A
a_ende = "31.12." & A
For Datum = CLng(CDate(a_start)) To CLng(CDate(a_ende))
UserForm1.cbo_Tagesplanung.AddItem CDate(Datum)
Next Datum
cbo_Tagesplanung.ListIndex = CLng(Now) - 0 - CLng(CDate(a_start))
End Sub
Nach dem Change soll das Makro ablaufen, also nicht nach Eingabe des Datum im Tabellenblatt und Enter, sondern Change der Cbo.
Alles weitere soll so bleiben wie es ist. Übernahme der Daten auf dem Tabellenblatt.
Gruß Michael

Anzeige
für ComboBox
21.02.2014 19:53:11
Erich
Hi Michael,
da muss nicht so viel geändert werden. Deswegen habe ich mir erst mal die 'Initialize' vorgenommen...
Darin kommt "CLng(Now)" vor. Soll das so sein, dass ab 12 Uhr mittags das morgige Datum ausgewählt wird?
In der Change-Prozedur hast du im "Select Case arD(qq, 1)" den Case " " - also mit einem Leerzeichen.
Da stand mal Case "" - also ohne Zeichen (auch ohne Leerzeichen). Was ist hier richtig/nötig/sinnvoll?
Probier mal

Option Explicit                           ' IMMER zu empfehlen
Private Sub UserForm_Initialize()
Dim datBeg As Date, datD As Date
With cbo_Tagesplanung
.Tag = "init"
datBeg = DateSerial(Year(Date), 1, 1)
For datD = datBeg To DateSerial(Year(Date), 12, 31)
.AddItem datD
Next datD
.ListIndex = CLng(Now) - datBeg  ' bis 11:529 heute, ab 12:00 morgen
'     .ListIndex = Date - datBeg       ' heute
.Tag = ""
End With
End Sub
Private Sub cbo_Tagesplanung_Change()
Dim wsMon As Worksheet, lngC As Long, arD, arA, qq As Long
Dim arE(), arF(), ee As Long, ff As Long, bolPr As Boolean
Dim vDatum
If cbo_Tagesplanung.Tag = "init" Then Exit Sub
vDatum = cbo_Tagesplanung.Value
If Not IsDate(vDatum) Then MsgBox "Kein Datum - Abbruch": Exit Sub
Set wsMon = Sheets(Format(vDatum, "mmmm"))   ' Tabellenblatt mit dem Monat
lngC = Day(vDatum) + 3                       ' Spalte mit dem Tag
arD = wsMon.Cells(9, lngC).Resize(52)        ' Werte Spalte des Tages
arA = wsMon.Cells(9, 1).Resize(52)           ' Werte Spalte A
ReDim arE(1 To UBound(arD), 3)
ReDim arF(1 To UBound(arD), 3)
For qq = 1 To UBound(arD)
Select Case arD(qq, 1)
Case ""                                ' wirklich leer
Case " "                               ' ein Leerzeichen          ##### ?
Case "F", "S", "N", "Alt/F", "Alt/S", "T", "T1", "T2"  ' "Bedingung primär"
ee = ee + 1
arE(ee, 0) = arA(qq, 1)
arE(ee, 1) = arD(qq, 1)
bolPr = True
Case Else
If IsEmpty(arA(qq, 1)) And IsNumeric(arD(qq, 1)) Then
If bolPr Then
arE(ee, 2) = arD(qq, 1)          ' Uhrzeit
Else
arF(ff, 2) = arD(qq, 1)          ' Uhrzeit
End If
If qq 
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige