Herbers Excel-Forum - das Archiv

Datumsauswahl

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Datumsauswahl
von: Ronny

Geschrieben am: 03.01.2007 09:36:59
Hallo Excel-Profis,
benötige eure Hilfe bei der Datumsauswahl. Habe eine Datei, in der ich durch ein Zeitfenster nur bestimmte zugehörige Werte entnehme und kann im Zeitfenster Jahr, Datum und Tag einstellen, bzw. habe jeweils ein Auswahlfenster dafür. Da mir die Lösung jemand in VBA netter weise geschrieben hat und ich nun eine kleine Änderung daran wünsche, weis ich nicht genau wie ich das anpacken muss und hoffe einer von euch kann mir helfen?
Die Bsp.-Datei ist https://www.herber.de/bbs/user/39038.xls
Also ich möchte hier anstatt der Jahresauswahl, dass das Jahr feststeht, d.h. das Jahr soll bereits eingestellt sein und kann vom Wert her aus der Zelle "A5" der Tabelle "Tmw 1-126" entnommen werden. Das liegt einfach daran, dass aus Speicherplatzgründen nur ein Jahr in der Exceldatei abgelegt wird und eine Auswahlliste für das Jahr somit überflüssig ist.
Dazu sei noch erwähnt, dass es gewollt ist, dass immer nur das Datum angezeigt werden soll, was bereits gelaufen ist (Vergangenheit) und der aktuelle Tag ebenfalls nicht in der Auswahl zur Verfügung steht, da der Mittelwert erst am Ende des Tages gebildet wird! Also es geht mir nur um die Auswahlliste für das Jahr!
Bin für jede Hilfe dankbar! ^^
Gruß,
Ronny
Bild

Betrifft: AW: Datumsauswahl
von: fcs

Geschrieben am: 03.01.2007 11:57:08
Hallo Ronny,
passe für das Userform folgende Prozedur an:
Private Sub OptionButtonZeitfenster_Click()
'Datumseingaben einblenden
Dim Jahr '############
Jahr = Val(Right(Worksheets("Tmw 1-126").Range("A5").Value, 4)) '############
Me.CBox_vonTag.Value = 1
Me.CBox_vonMonat.Value = 1
Me.CBox_vonJahr.Value = Jahr '############
Call Datum_von
Me.CBox_bisTag.Value = Day(Date - 1)
Me.CBox_bisMonat.Value = Month(Date - 1)
Me.CBox_bisJahr.Value = Jahr '############
Call Datum_bis
Me.Label_von.Visible = True
Me.Label_bis.Visible = True
Me.CBox_vonTag.Visible = True
Me.CBox_vonMonat.Visible = True
Me.CBox_vonJahr.Visible = True
Me.CBox_vonJahr.Locked = True '############
Me.CBox_bisTag.Visible = True
Me.CBox_bisMonat.Visible = True
Me.CBox_bisJahr.Visible = True
Me.CBox_bisJahr.Locked = True '############
Call OptionABzurueck
End Sub

Die geänderten/ergänzten Zeilen sind markiert. Der Jahreswert wird aus der gewünschten Zelle geholt und die weitere Auswahl der Jahreszahl in den Combo-Boxen wird blockiert.
Gruß
Franz
Bild

Betrifft: AW: Datumsauswahl
von: Ronny

Geschrieben am: 03.01.2007 14:04:59
Hallo Franz,
ein gesundes neues wünsch ich dir noch, vielen Dank auch nochmal für die UserForm, hab sie gestern auf Arbeit getestet und an meine Datei angepasst. Hab noch Kleinigkeiten geändert und hatte dir dass alles geschrieben im Forum aber vielleicht ist das unter gegangen. War leider Krank vor Weihnachten und Weihnachten bis Neujahr über nicht am PC, daher konnte ich mich erst später bei dir melden, zumal ichs ja eh erst gestern auf Arbeit testen konnte.
Auch diese Lösung klappt super von dir, vielen dank Franz! Bist der Beste ^^
Gruß,
Ronny
Bild

Betrifft: AW: Datumsauswahl
von: Ronny

Geschrieben am: 04.01.2007 16:57:45
Hallo Franz,
habe heute auf Arbeit bei mehreren Tests festgestellt, dass es sinnvoller und übersichtlicher wäre die Aufsteigende Sortierung nicht für jeden Monat durchzuführen, sondern insgesamt. Gerade wenn ich das Zeitfenster nutze, habe ich das Problem, wenn der Zeitraum zu Groß wird, wie z.B. 7 Monate, dass der größte zu findende Wert oder der kleinste usw. mit jeden Monat optisch abgeglichen werden muss und dies ist nicht sehr konfortabel.
Denn noch würde ich die jetzige Einstellung der Sortierung für jeden Monat gern behalten aber über einen Extra-Haken vielleicht separat aktivieren lassen, d.h. standardmäßig soll immer Aufsteigend sortiert sein und wenn man den Haken bei z.B. Monate aufsteigend sortieren macht, dann soll die jetzige Einstellung in der Datei aktiviert werden.
Kannst du mir da bitte nochmal helfen Franz? oder irgendwer der weiter weis???
Gruß,
Ronny
Bild

Betrifft: AW: Datumsauswahl
von: fcs
Geschrieben am: 04.01.2007 23:10:37
Hallo Ronny,
ich schau mir das am Wochenende mal an, wie man die beiden Sortierungen für das Zeitfenster am besten im Userform einbauen kann. Wahrscheinlich mit einem Toggle-Button, der die Auswahlliste umsortiert.
Gruss
Franz
Bild

Betrifft: AW: Datumsauswahl
von: fcs

Geschrieben am: 06.01.2007 20:45:53
Hallo Ronny,
hier die Datei mit dem angepassten Userform und den entsprechend modifizierten Makros.
Die Sortierung der Auswahl (Alle oder Zeitfenster) kann per Options-Buttons gewählt werden.
https://www.herber.de/bbs/user/39442.xls
Gruss
Franz
Bild

Betrifft: AW: Datumsauswahl
von: Ronny

Geschrieben am: 07.01.2007 15:42:24
Hallo Franz,
hab alles integriert und angepasst, so dass auf den ersten Blick auch alles zu funktionieren schien, doch dann stellte ich fest, dass es ein Problem beim Sortieren geben muss. Er sortiert (auch schon vorher gewesen und mir leider erst heute aufgefallen) zwar aufsteigend von klein bis groß, aber macht dort große Fehler! z.B. sortiert er momentan:
1,0
1,1
1,4
19,2
19,3
2,5
2,8
20,8
4,5
usw., d.h. er bemerkt beim sortieren nicht, dass z.B. die 19 nicht nach der 1 kommen kann, wenn es eine 2 gibt! Was kann man da tun, dass dieser Fehler nicht mehr gemacht wird?
Des Weiteren ist es bei den "PE" Nummern so, dass es dort mehrere Parameter gibt die zu einer PE Nr. gehören und nicht wie bei den Strom Nummern ohne PE nur ein Parameter existiert. Daher müßte man immer wenn eine PE Nr. eingegeben wird als nächstes nach dem Parameter fragen, welcher die gewünschte Hauptgröße sein soll. Am Besten dafür wäre meiner Meinung nach eine weitere Box, in der man den Parameter zur jeweiligen PE Nr. auswählen kann. Alle Parameter stehen ja immer gleich nach der PE Nr., so dass man hier eine Abfrage aufbauen könnte für die Auswahlbox des Parameters, wenn PE Nr. = eingegebener PE Nr., dann Parameter in die Auswahlbox hinzufügen.
Eine PE Nr. ist eine Nummer für eine Probenahmestelle an der mehrere Parameter gemessen werden können und ich von der Nummernvergabe nicht ändern kann. Wäre dir daher sehr dankbar wenn du mir dort nochmal Hilfestellung geben könntest!?
Freue mich schon auf Rückantwort von dir und wünsch noch ein angenehmes Wochenende,
Ronny
Bild

Betrifft: AW: Datumsauswahl
von: fcs

Geschrieben am: 07.01.2007 17:19:00
Hallo Ronny,
Problem beim Sortieren:
In den Prozeduren
Private Sub OptionButton_A_Click()
und
Private Sub OptionButton_B_Click()
muss du in folgender Zeile den letzten Parameter für das Sortieren von 1 auf 2 ändern:
If Me.OptionButtonSortMesswert = True Then
Call SortBox(Me.ComboBox_A, 2, 1, 2) '#############fcs 2007-01-07
End If

Für die Auswahl des Parameters bei PE-Stromnummern hab ich eine einfache Inputbox in den Code eingebaut. Diese Prozedur müsstet du austauschen. Falls das nicht ausreichend ist, dann könnte man auch noch irgendwie eine Auwahlliste in einem kleinen zusätzichen Userform anzeigen.
Gruß
Franz
Private Sub StromNr_Suchen_Click()
Dim I As Integer, Parameter As String, Spalte As Integer
Set rngSearch = Nothing
If TextBox1.Value = "" Then
MsgBox "Sie müssen eine Strom-Nr eingeben - danke.", _
64, "   Hinweis für " & Application.UserName
With TextBox1
.SetFocus
End With
Exit Sub
End If
If IsNumeric(Me.TextBox1.Value) Then
Select Case Me.TextBox1.Value
Case 1 To 126:   Blattname = "Tmw 1-126"
Case 127 To 252: Blattname = "Tmw 127-252"
Case 253 To 378: Blattname = "Tmw 253-378"
Case 379 To 502: Blattname = "Tmw 379-502"
Case 503 To 590: Blattname = "Tmw 503-590"
Case Else
MsgBox "Ihre angegebene Strom-Nr. existiert nicht!" & vbCrLf & _
"Bitte geben Sie eine gültige StromNr. an!", _
64, "   Hinweis für " & Application.UserName
Exit Sub
End Select
Else
Select Case Left(Me.TextBox1.Value, 2)
Case "PE"
Blattname = "Tmw PE 1-9"
Parameter = InputBox("Parameter zu Strom-Nr.: " & Me.TextBox1.Value, "Soffstrom-Nr. Auswahl")
If Parameter = "" Then Exit Sub
Case Else
MsgBox "Ihre angegebene Strom-Nr. existiert nicht!" & vbCrLf & _
"Bitte geben Sie eine gültige StromNr. an!", _
64, "   Hinweis für " & Application.UserName
Exit Sub
End Select
End If
ActiveWorkbook.Worksheets(Blattname).Activate
With ActiveWorkbook.Worksheets(Blattname)
If Blattname <> "Tmw PE 1-9" Then
Set rngSearch = .Range("A2:IV2").Find(what:=Me.TextBox1.Value, _
LookIn:=xlValues, LookAt:=xlWhole)
Else
'Strom-Nr beginnt mit PE
For Spalte = 2 To 255
If .Cells(2, Spalte) = Me.TextBox1.Value And .Cells(3, Spalte) = Parameter Then
Set rngSearch = .Cells(2, Spalte)
Exit For
End If
Next
End If
If Not rngSearch Is Nothing Then
.Cells(rngSearch.Row, rngSearch.Column).Activate
'Daten zum Strom ins Formblatt einlesen
Me.tbKlartext = rngSearch.Offset(-1, 0).Value
Me.tbParameter = rngSearch.Offset(1, 0).Value
Me.tbDimension = rngSearch.Offset(2, 0).Value
Me.tbKKS = rngSearch.Offset(3, 0).Value
Me.CB_Weiter.Enabled = True
Else
MsgBox "Ihre angegebene Strom-Nr. existiert nicht!" & vbCrLf & _
"Bitte geben Sie eine gültige StromNr. an!", _
64, "   Hinweis für " & Application.UserName
End If
End With
End Sub

Gruss
Franz
Bild

Betrifft: AW: Datumsauswahl
von: Ronny

Geschrieben am: 07.01.2007 23:44:42
Hi Franz,
dass war ja eine schnelle Problemlösung der Sortierfunktion, vielen dank! ^^
Die Lösung mit der PE Nr. klappt zwar vom Code her einwandfrei, aber ist noch nicht ganz optimal für den Endbenutzer. Bei der PE 6 gibt es z.B. 19 Parameter die an dieser Probenahmestelle bestimmt werden, was den Benutzer bei der Eingabe des Parameters abverlangen würde, dass er alle Parameter der zugehörigen PE Nr. kennt und die korrekte Abkürzung bei der Abfrage eingibt. Da dies wahrscheinlich nur zu fehlerhaften Einträgen führt und gerade am Anfang Schwierigkeiten bei der Bedienung mit sich bringt, wäre ich für eine Auswahlbox sehr dankbar.
Diese könnte man ja anstatt der Textbox des Parameters einbauen, so dass immer nur dann eine Auswahl dort möglich ist, wenn eine PE Nr. eingegeben wurde und ansonsten wie bisher automatisch der Parameter-Eintrag der jeweiligen StromNr. dort vorgenommen wird. Zusätzlich darf erst dann der Weiter-Button freigeschaltet werden, wenn der korrekte Parameter ausgewählt wurde. Am Besten einfach eine Labelbox hinter Parameter machen und diese auf visible.false setzen solange keine PE Nr. eingegeben wurde. Wenn eine PE Nr. eingegeben wird dann diese auf visible.true und mit den Labeltext "Bitte Parameter auswählen!" darauf hinweisen, dass es ohne Parameterauswahl nicht weiter geht.
Wenn dass noch funktioniert, dann ist die USER-Form erstmal Fehlersicher und Einsatzbereit. Freue mich schon auf eine Antwort von dir!
Gruß,
Ronny
 Bild
Excel-Beispiele zum Thema "Datumsauswahl"
UserForm-ListBox in Abhängigkeit von Datumsauswahl füllen