Registriert seit: 16.10.2020
Version(en): 2016
Moin zusammen, ich habe eine Art Kalender erstellt und möchte jetzt ein paar weitere Spalten mittels Userform füllen.
Problem, ich habe es nicht geschafft, ein eingegebenes Datum in einer Textbox in dem Kalender zu finden, sodass die weiteren Eingaben richtig abgelegt werden können.
In dem Bereich von C5-C370 stehen die Datumsangaben von 01.01.22 - 31.12.2022 In der Spalte E und F möchte ich Zeiten (Arbeitsbeginn und Arbeitsende aus der Userform) eingeben und mittels CommandButton übernehmen.
1. Dieser Code aus dem Internet war der Vielversprechendste, funktionierte aber nicht.
Private Sub CommandButton1_Click() 'Nach Eintrag (Datum) suchen Dim zelle As Range
With Sheets("Arbeitskalender") If TextBox1.Value <> "" Then Set zelle = .Columns("C:C").Find(TextBox1.Value, LookIn:=xlValues) If Not zelle Is Nothing Then .Cells(zelle.Row, 5).Value = TextBox2.Value .Cells(zelle.Row, 6).Value = TextBox3.Value
Else 'MsgBox "Es gibt noch keinen Eintrag für das Datum " & TextBox1.Value 'FelderLöschen TextBox1.SetFocus End If End If End With End Sub
2. Dann habe ich eine Änderung eingefügt mit dem Problem, dass nicht das Datum, sondern die Zeile 44562 gesucht wurde und dort in den Spalten 5 und 6 die Einträge übernommen wurden (wenigstens das ...).
Set zelle = .Columns("C:C").Find(CDate(TextBox1.Value), LookIn:=xlValues)
Wie ich erlesen konnte, hat CDate das eingegebene Datum in die Zahl 44562 konvertiert und aus einem mir unverständlichen Grund auch gefunden. Eigentlich soll nur in Spalte C gesucht werden, das Makro hat aber die Zeile 44562 gefunden.
Wer könnte mir helfen, dass Makro entsprechend anzupassen.
Registriert seit: 11.04.2014
Version(en): Office 365
Hallo, VBA ist bei der Suche nach Datumswerten über die Find-Methode etwas zickig. Deshalb mache ich das immer mit der Funktion Match. Code: Sub Beispiel() Dim LDatum As Long Dim varRow As Variant LDatum = CDate("17.01.2009") varRow = Application.Match(LDatum, Columns(1), 0) End Sub
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
Registriert seit: 29.04.2022
Version(en): 2019 & 2021 32-Bit & 2019 mac
Moin Klaus-Dieter! Wieder was gelernt! Danke!
Registriert seit: 16.10.2020
Version(en): 2016
Moin, danke für den Tipp mit der Match-Funktion, aber trotz vielen Experimentierens und weitere Recherche reicht mein nicht vorhandenes Wissen bei Weitem nicht aus, um die Match-Funktion funktionsgerecht in das Makro zu implementieren.
Ich benötige ein wenig mehr Hilfe.
Registriert seit: 11.04.2014
Version(en): Office 365
11.06.2022, 09:47
(Dieser Beitrag wurde zuletzt bearbeitet: 11.06.2022, 09:48 von Klaus-Dieter.)
Hallo, dann versuche es mal so: Code: Dim LDatum As Long Dim varRow As Variant LDatum = CDate(TextBox1.Value) varRow = Application.Match(LDatum, Columns(3), 0)
Viele Grüße Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Moin! Nur ergänzend zu Klaus-Dieter: Wichtig und gut ist hier, varRow As Variant zu deklarieren! Ein Variant kann nämlich auch einen Fehlerwert aufnehmen! Dies passiert, wenn Match nix findet. Statt eine umständlichere Fehlerbehandlung zu schreiben reicht es beim Variant, auf IsError() zu prüfen. Beispiel: | A | 1 | 04.06.2022 | 2 | 20.06.2022 | 3 | 02.06.2022 | 4 | 27.06.2022 | 5 | 27.06.2022 | 6 | 09.06.2022 | 7 | 08.06.2022 | 8 | 15.06.2022 | 9 | 10.06.2022 | 10 | 02.06.2022 | 11 | |
Gesucht wird nach dem heutigen Datum, welches nicht vorhanden ist, wie man sieht … Sub Heute() Dim varRow As Variant varRow = Application.Match(Date, Columns(1), 0) If Not IsError(varRow) Then MsgBox "Fundzeile ist " & varRow Else MsgBox "Datum nicht gefunden!" End If End Sub ergibt:
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 16.10.2020
Version(en): 2016
@Klaus-Dieter, danke für die erneut schnelle Antwort. Genau so hatte ich gestern den Code als Erstes geändert ohne Erfolg.
@Ralf, danke für Deine Antwort, ich habe Deinen Code angepasst, damit die Eingabe des zu suchenden Datum über die Userform erfolgt und siehe da, er findet das Datum nicht.
Private Sub CommandButton1_Click() Dim varRow As Variant varRow = Application.Match(TextBox1.Value, Columns(3), 0) If Not IsError(varRow) Then MsgBox "Fundzeile ist " & varRow Else MsgBox "Datum nicht gefunden!" End If End Sub
Das Datum wird auch nicht gefunden, wenn ich das Datums in eine Zahl umwandel, also 44562 für den 01.01.2022.
@Klaus-Dieter und Ralf, ich glaube, dass Problem liegt woanders von meiner Person einmal abgesehen :)
Ich gebe in die Userform in der TextBox1 ein Datum ein (01.01.2022) und betätige den CommandButton1. Dies scheint erkannt zu werden, denn Ralf sein Code weiß, dass es sich um den 01.01.2022 handelt, folglich liegt das Problem beim Suchen im Kalender. Die Datumsangaben im Kalender habe ich folgendermaßen ermittelt: In der Zelle C3 steht das Datum 01.01.2022, welches als Kalenderstartdatum zur Eingabe für die Folgejahre dient. Den Kalender beginne ich in der Zelle C5 mit "=C3" (01.01.2022) und weiter mit =C5+1 usw... und so fort.
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Björn, so sollte es gehen: Code: Private Sub CommandButton1_Click() Dim varRow As Variant If IsDate(TextBox1) Then varRow = Application.Match(CLng(CDate(TextBox1.Value)), Columns(3), 0) If IsNumeric(varRow) Then MsgBox "Fundzeile ist " & varRow Else MsgBox "Datum nicht gefunden!" End If Else MsgBox "Kein Datum in der TextBox!" End If End Sub
Gruß Uwe
Registriert seit: 16.10.2020
Version(en): 2016
Hallo Uwe, danke für Deine Antwort, die war schon mal sehr hilfreich, denn jetzt wird das entsprechende Datum im Kalender gefunden.
Was nicht mehr funktioniert, siehe Ausgangpost, ist das Übernehmen anderer Werte in die Spalten 5 und 6. Ich habe Deinem Code Folgendes hinzugefügt (war vom vorherigen Code), um den Inhalt der Textboxen aus der Userform zu übernehmen, aber das passt nicht mehr.
Dim zelle As Range .Cells(zelle.Row, 5).Value = TextBox2.Value .Cells(zelle.Row, 6).Value = TextBox3.Value
Wie müsste der Code angepasst/erweitert werden, damit ich mit Deinem Code auch Daten in die Spalten 5 und 6 übernehmen kann?
Kann man auch das Suchen in der Spalte C erst ab der Zeile 5 beginnen? varRow = Application.Match(CLng(CDate(TextBox1.Value)), Columns(3), 0)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
13.06.2022, 22:26
(Dieser Beitrag wurde zuletzt bearbeitet: 13.06.2022, 22:32 von Kuwer.)
Hallo Björn, Code: Private Sub CommandButton1_Click() Dim varRow As Variant If IsDate(TextBox1) Then varRow = Application.Match(CLng(CDate(TextBox1.Value)), Range(Cells(5, 3), Cells(Rows.Count, 3)), 0) If IsNumeric(varRow) Then .Cells(varRow, 5).Value = TextBox2.Value .Cells(varRow, 6).Value = TextBox3.Value Else MsgBox "Datum nicht gefunden!" End If Else MsgBox "Kein Datum in der TextBox!" End If End Sub
Gruß Uwe
|