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

Datum suchen; DTPicker

Datum suchen; DTPicker
07.02.2009 19:30:36
monistaudt
Hallo,
bin ein "Frischling" und suche schon seit einigen Tagen hier in den Foren nach einer Lösung, komme aber nicht weiter und wäre für Hilfe sehr dankbar.
Ich habe in einer UserForm einen DTPicker eingebettet. Das jeweils ausgewählte Datum wird in eine Textbox übernommen.
Nun möchte ich das in die Textbox übernommene Datum in Spalte C suchen lassen.
In Spalte C steht ein Verweis auf Spalte A (also C8= A8) und in Spalte A steht dann in diesem Fall A8=A7+1
Das Start-Datum (01.01.2009) in A7 wird aus A5 übernommen und A5 übernimmt den Wert aus einem anderen Tabellenblatt A5=DATWERT("01.01."&'StaDa Jenny'!D2).
'StaDa Jenny'!D2 hat den Wert 2009.
Mein Code mit dem ich das Datum suche lautet

Private Sub cmdUrlaub_Click()
Dim zelles As Range
Dim bereichs As Range
Dim datum As Date
datum = txtbDatum.Text
Set bereichs = Sheets("MitarbeiterIn").Range("c7:c524")
Set zelles = bereichs.Find(what:=datum, lookat:=xlWhole, LookIn:=xlValues)
If zelles Is Nothing Then
MsgBox "Datum nicht gefunden"
Else
Zelle.Select
End If
Next Zelle
ActiveCell.Offset(0, 19).Value = ("U")
End If
End Sub


Ich komme immer nur bis "Datum nicht gefunden". Ich vermute es hat etwas mit der "komplizierten Datumsvergabe über mehrere Zellen und Blätter zu tun, allerdings sollte dies wenn immer möglich auch so bleiben.
Möglicherweise liegt das Problem aber auch darin,
- dass das Datum in der Textbox ist wie folgt formatiert ist TT.MM.JJJJ hh:mm:ss
- und das Datum in Spalte C das Format TT.MM.JJJJ hat.
aber selbst wenn ich der Spalte C das Format TT.MM.JJJJ hh:mm:ss zuweise funktioniert es nicht, da hh: mm:ss in C (weil vorgegeben) immer gleich 00:00:00 ist. Ich würde ja gerne das Datumsformat des DTPickers oder der Textbox ändern, weiß aber nicht wie.
Hat jemand vielleicht eine Idee wie das Problem zu lösen ist
mfg monistaudt

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datum suchen; DTPicker
07.02.2009 21:00:05
hary
Hallo Monistaudt
Ich habe Deinen Code Kop. und erhalte nur Fehlermeldungen. Ist das der komplette Code?
Am besten eine Beispiel Mappe
Gruss Hary
AW: Datum suchen; DTPicker
07.02.2009 21:24:31
Erich
Hallo Moni(?),
wie Hary dir schon geschrieben hat: Du solltest dir den Code vor dem Posten besser anschauen.
Dein Code ist nicht komplett, überhaupt nicht kompilierbar.
Ein paar Bemerkungen dazu:
Ich empfehle dir, immer mit "Option Explicit" zu arbeiten. (Das kannst du etwas automatisieren,
in VBA Extras - Optionen - "Variablendeklaration erforderlich" aktivieren)
DATUM ist eine Excelfkt., der Name ist also reserviert.
Deshalb solltest du "datum" nicht als Variablennamen verwenden.
"Zelle.Select" sollte vermutlich heißen "zelles.Select"
Zu "Next Zelle" fehlt ein "For".
Zum letzten "End If" fehlt ein "If".
Find funzt bei der Suche nach xlValues nicht so wie man das normalerweise erwartet.
Besser verwendet man dann Application.Match (also die Excelfkt. VERGLEICH). Dazu:
https://www.herber.de/forum/archiv/972to976/t973902.htm
https://www.herber.de/forum/archiv/972to976/t974186.htm
Probier mal das hier:

Option Explicit                  ' Immer zu empfehlen!
Private Sub cmdUrlaub_Click()
Dim bereichs As Range, zelles As Range
Dim lngDat As Long, varZ As Variant, lngZ As Long
Set bereichs = Sheets("MitarbeiterIn").Range("C7:C524")
If Not IsDate(txtbDatum.Value) Then
MsgBox "Datum nicht gefunden"
Else
lngDat = CLng(CDate(txtbDatum.Value))
varZ = Application.Match(lngDat, bereichs, 0)
If IsError(varZ) Then
MsgBox "Datum nicht gefunden"
Else
lngZ = varZ + 6         ' weil Match erst ab Zeile 7 sucht
' Cells(lngZ, "C").Offset(0, 19).Value = "U"   ' oder
' Cells(lngZ, "V") = "U"                       ' oder
Cells(lngZ, 22) = "U"
End If
End If
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Datum suchen; DTPicker
07.02.2009 22:47:47
monistaudt
Hallo Hary, Hallo Erich aus Kamp-Lintfort,
2ter Versuch Euch zu antworten, der 1ste verschwand in den Weiten des Internets oder sonstwo, jedenfalls war er nach dem Absenden spurlos verschwunden.
Erstmal Danke für die schnellen Antworten.
"Option Explicit" und "Variablendeklaration erforderlich" habe ich bereits aktiviert - leider tappe ich trotzdem noch ziemlich im Dunkeln.
... meine Codes sind zusammengestoppelt aus dem was ich so beim Suchen gefunden habe - "learning bei doing" - es ist wie früher mit meinen Mopeds beim Auseinander- und wieder Zusammenbauen blieben immer ein paar Teile übrig und dennoch lief das Moped am Ende - ok, meine Codes "laufen" noch nicht .....
Dein Code Erich "läuft" leider auch nicht - ich werde aber noch ein bißchen rumprobieren.
Ich habe eine abgespeckte Version der Tabelle hochgeladen, sie kann unter
https://www.herber.de/bbs/user/59211.xls
abgerufen werden.
LG Moni
Anzeige
AW: jetzt gehts
07.02.2009 23:37:02
monistaudt
Hallo Hary
... das Ende der schlaflosen Nächte.
Besten Dank!
LG Moni
AW: nachtrag
07.02.2009 23:37:47
hary
hi Moni
ich nochmal
Nur mit dem U hab ich noch nicht gemacht(vergessen).
auf alle Faelle musst Du die Klammern wegnehmen also nur "U"
Hary
AW: nachtrag
07.02.2009 23:43:34
monistaudt
Hallo Hary,
das mit dem U klappt bereits, ich hatte nur eine falsche Zellennummer in "ActiveCell.Offset(0, 30).Value = ("U")" stehen, daher war das U im Bereich der eingeblendeten Spalten nicht zu sehen.
Nochmals vielen Dank.
Moni
Anzeige
AW: jetzt gehts auch damit
08.02.2009 01:40:00
Erich
Hallo Moni,
hättest du gleich eine Mappe hochgeladen, hätten wir gleich zweierlei sehen können:
- Das "U" soll nicht in Spalte V, sondern in Spalte AG (Spalte 33 oder Range(x,"C").Offset(30)).
- Du hast die 1904-Datumswerte aktiviert.
Und nun läufts auch damit:

Private Sub cmdUrlaub_Click()
Dim bereichs As Range, zelles As Range
Dim datDat As Date, varZ As Variant, lngZ As Long
Set bereichs = Sheets("MitarbeiterIn").Range("C7:C37")
If Not IsDate(txtbDatum.Value) Then
MsgBox "Datum nicht gefunden"
Else
datDat = CDate(txtbDatum.Value) - 1462       ' wg. 1904-Datumswerte!
varZ = Application.Match(CDbl(datDat), bereichs, 0)
If IsError(varZ) Then
MsgBox "Datum nicht gefunden"
Else
lngZ = varZ + 6         ' weil Match erst ab Zeile 7 sucht
Cells(lngZ, "AG") = "U"
End If
End If
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: jetzt gehts auch damit
08.02.2009 02:42:00
monistaudt
Hallo Erich,
war das erste Mal dass ich mich überhaupt in irgendein Forum begeben habe. Eine hochgeladene Mappe ist im Umgang mit Anfängern wie mir sicherlich hilfreich.
Deine Lösung funktioniert tadellos !!!!!!!!!!
Allerdings habe ich ziemlichen Respekt vor diesem "Application.match"-Ding. Das ist mir in meiner zugegebenermaßen kurzen Excel-/VBA-Karriere bisher noch nicht begegnet.
Besten Dank und Gruß
Moni

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige