Warum erkennt meine Excel-VBA-Suche im Arbeitsplan das Datum nicht, obwohl das Datum aus einer anderen Tabelle kopiert und in beiden Tabellen als Datum dargestellt wird? Wie muss die VBA angepasst werden?

Antwort

Das Problem liegt meist daran, dass Excel-Datumswerte intern als Zahlen gespeichert werden, aber durch Formeln, Zellformatierungen oder Kopiervorgänge Unterschiede entstehen können. Besonders, wenn das Datum im „Arbeitsplan“ per Formel erzeugt wird, kann es zu Typ-Unterschieden kommen (z.B. Zahl vs. Text). **Lösung:** Vergleiche die Datumswerte immer als Zahl (Double), nicht als Text. Das erreichst du, indem du `CLng` oder `CDbl` verwendest. Außerdem solltest du beim Suchen (`Find`) explizit nach dem numerischen Wert suchen. Hier die überarbeitete Version deiner Sub, die das Datum als Zahl behandelt: ```vba Sub übertragallepersonen() Dim wb As Workbook Dim wsQuell As Worksheet, wsZiel As Worksheet Dim datumToFind As Variant, rGef As Range Dim nameQuell As Variant Dim zielStartCol As Long, zielCol As Long, quelleCol As Long Set wb = ThisWorkbook Set wsQuell = wb.Sheets("Personen einzelnd drucken") Set wsZiel = wb.Sheets("Arbeitsplan") ' Datum aus Spalte B8 der Quell-Tabelle als Zahl If IsDate(wsQuell.Range("B8").Value) Then datumToFind = CLng(wsQuell.Range("B8").Value) Else MsgBox "Datum in Personen einzeln drucken!B8 ist ungültig oder leer.", vbExclamation Exit Sub End If ' In Arbeitsplan Spalte A suchen (ebenfalls als Zahl) Set rGef = Nothing For Each cell In wsZiel.Columns("A").Cells If IsDate(cell.Value) Then If CLng(cell.Value) = datumToFind Then Set rGef = cell Exit For End If End If If cell.Row > 1000 Then Exit For ' Optional: Suchbereich begrenzen Next cell If rGef Is Nothing Then MsgBox "Datum nicht in Arbeitsplan Spalte A gefunden.", vbInformation Exit Sub End If ' Namen vergleichen nameQuell = wsQuell.Range("C8").Value If IsEmpty(nameQuell) Then MsgBox "Name in Personen einzeln drucken!C8 ist leer.", vbExclamation Exit Sub End If If wsZiel.Cells(rGef.Row, "B").Value = nameQuell Then ' Kopiere Werte von Arbeitsplan F bis BA in die Zielspalten ab Spalte D zielStartCol = 4 ' Spalte D For zielCol = 6 To 54 ' F(6) bis BA(54) wsQuell.Cells(9, zielStartCol + (zielCol - 6)).Value = wsZiel.Cells(rGef.Row, zielCol).Value Next zielCol MsgBox "Daten wurden übertragen.", vbInformation Else MsgBox "Kein Namensabgleich gefunden in der gleichen Datum-Zeile.", vbInformation End If End Sub ``` **Wichtige Hinweise:** - Die Datumssuche läuft jetzt über eine Schleife, damit du den Wert als Zahl vergleichen kannst (das ist robuster als `.Find` bei Formeldaten). - Wenn du sehr viele Zeilen hast, kannst du die Schleife anpassen oder optimieren. - Achte darauf, dass die Zellen wirklich als Datum formatiert sind. **Weitere Tipps:** - Wenn du weiterhin `.Find` nutzen willst, dann stelle sicher, dass du mit `CDbl` oder `CLng` suchst und `LookIn:=xlValues` verwendest. - Prüfe, ob in den Zellen wirklich ein Datum steht (ggf. mit `IsDate`). **Mehr zu Datumswerten in Excel:** [Microsoft: Arbeiten mit Datumsangaben in VBA](https://learn.microsoft.com/de-de/office/vba/language/reference/user-interface-help/date-data-type) Falls du noch weitere Probleme mit Datumsformaten hast, kann es helfen, die Zellen explizit als Datum zu formatieren.

Kategorie: Office Tags: Excel Datum VBA
KI fragen

Verwandte Fragen

Wie kann man in Excel ein Datum in Text umwandeln?

Um in Excel ein Datum in Text umzuwandeln, gibt es verschiedene Möglichkeiten. Die gängigsten Methoden sind: **1. TEXT-Funktion verwenden:** Mit der Funktion `TEXT` kannst du das Datum in... [mehr]

Wie importiere ich Datumsfelder aus einer Excel-Tabelle in MS Word?

Um Datumsfelder aus einer Excel-Tabelle in ein Word-Dokument einzufügen, kannst du die folgenden Schritte befolgen: 1. **Excel-Daten vorbereiten**: Stelle sicher, dass die Datumswerte in deiner... [mehr]

Excel VBA: Grüne markierte Reiter als PDF drucken, jedes Arbeitsblatt auf eine Seite darstellen.

Um in Excel VBA alle Arbeitsblätter, die grün markiert sind, in eine PDF-Datei zu drucken und jedes Arbeitsblatt auf eine Seite darzustellen, kannst du den folgenden VBA-Code verwenden: ```... [mehr]

Wie verwende ich die ROUND-Funktion bei einer Verknüpfung in Excel?

Um die **ROUND**-Funktion (auf Deutsch: **RUNDEN**) in einer Verknüpfung in Excel zu verwenden, kannst du sie direkt in deine Formel einbauen. Die Funktion rundet eine Zahl auf eine bestimmte Anz... [mehr]

Wie entferne ich in Excel versehentlich eingefügte, unendlich breite Zellen?

Wenn deine Excel-Tabelle unendlich breit erscheint, hast du vermutlich versehentlich Daten oder Formatierungen in sehr viele Spalten eingefügt. So kannst du die überflüssigen Zellen/Spa... [mehr]

Wie füge ich eine Filterfunktion in ein Excel-Diagramm ein?

Um eine Filterfunktion in ein Excel-Diagramm einzubauen, gibt es verschiedene Möglichkeiten. Die gängigsten Methoden sind: **1. Diagramm mit einer Tabelle verknüpfen:** - Erstelle dein... [mehr]

Wie kann man mit einem Excel-Makro den Bereich Range(Cells(i, 3), Cells(i, 8)) schützen?

Um in Excel mit einem Makro (VBA) einen bestimmten Zellbereich – zum Beispiel von Spalte 3 (C) bis Spalte 8 (H) in Zeile i – zu schützen, gehst du wie folgt vor: 1. **Zellen entsperr... [mehr]

Wie kann man in Excel markierte Zellen per PowerShell auf Schriftart Calibri Größe 8 setzen?

Um in Excel die aktuell markierten Zellen per PowerShell auf die Schriftart „Calibri“ und die Schriftgröße 8 zu setzen, kannst du PowerShell zusammen mit der Excel COM-Objekt-Au... [mehr]

Wie erstellt man ein Excel-Makro, das beim Klick auf Button 4 die Zeilen 28 bis 30 ein- und ausblendet?

Hier ist ein Beispiel für ein Excel-Makro, das beim Klick auf einen Button (z.B. „Button 4“) die Zeilen 28 bis 30 ein- oder ausblendet – je nachdem, ob sie aktuell ausgeblendet... [mehr]

Wie kann man in Excel Zellen markieren und mit einem Rahmen per PowerShell versehen?

Um in Excel Zellen zu markieren und einen Rahmen per PowerShell zu setzen, kannst du die Excel COM-Objekte verwenden. Damit kannst du Excel automatisieren, Zellen auswählen und Rahmen setzen. Hie... [mehr]