Um in Excel nur Werte zwischen zwei Datumswerten zu berücksichtigen, kannst du die Funktion `WENN` (bzw. `IF` im Englischen) in Kombination mit logischen Operatoren verwenden. Häufig wird au... [mehr]
Das Problem liegt sehr wahrscheinlich an der Art, wie Excel intern mit Datumswerten umgeht. Ein Datum in Excel ist eigentlich eine Zahl (z.B. 45123 für den 01.09.2023), aber die Anzeige kann unterschiedlich sein – als Zahl, als Datum, als Text. Wenn du ein Datum per Formel erzeugst (z.B. `=A1` oder `=DATUM(...)`), kann es sein, dass beim Kopieren oder beim Vergleich mit VBA Unterschiede auftreten, insbesondere wenn das eine Feld als Zahl und das andere als Text formatiert ist. **Typische Ursachen und Lösungen:** ### 1. Unterschiedliche Formate (Datum vs. Text) - **Problem:** In `wsQuell.Range("B8")` steht das Datum als Zahl, im Arbeitsplan ist es vielleicht als Text oder per Formel erzeugt. - **Lösung:** Stelle sicher, dass beide Werte als Datum (also als Zahl) vorliegen. Du kannst das in VBA erzwingen: ```vba datumToFind = CLng(wsQuell.Range("B8").Value) ``` und beim Suchen: ```vba Set rGef = wsZiel.Columns("A").Find(What:=datumToFind, LookIn:=xlValues, LookAt:=xlWhole) ``` ### 2. Zeitanteil im Datum - **Problem:** Ein Datum kann auch eine Uhrzeit enthalten (z.B. 01.09.2023 00:00:00 vs. 01.09.2023 12:00:00). Das sieht gleich aus, ist aber intern unterschiedlich. - **Lösung:** Beim Vergleich nur das Datum nehmen: ```vba datumToFind = Int(wsQuell.Range("B8").Value) ``` und beim Suchen: ```vba Set rGef = wsZiel.Columns("A").Find(What:=datumToFind, LookIn:=xlValues, LookAt:=xlWhole) ``` ### 3. Formelzellen - **Problem:** In der Zieltabelle steht das Datum als Formel, z.B. `=Tabelle1!A1`. Das ist aber für den Wertvergleich egal, solange der Wert ein Datum ist. - **Lösung:** Prüfe, ob in der Zieltabelle wirklich ein Datum steht (kein Text!). Teste das z.B. mit: ```vba Debug.Print wsZiel.Cells(1, "A").Value, IsDate(wsZiel.Cells(1, "A").Value) ``` ### 4. Find-Methode: LookIn-Parameter - **Problem:** `LookIn:=xlValues` ist meist richtig, aber manchmal hilft auch `xlFormulas`. - **Lösung:** Teste beide Varianten: ```vba Set rGef = wsZiel.Columns("A").Find(What:=datumToFind, LookIn:=xlValues, LookAt:=xlWhole) If rGef Is Nothing Then Set rGef = wsZiel.Columns("A").Find(What:=datumToFind, LookIn:=xlFormulas, LookAt:=xlWhole) End If ``` --- **Zusammengefasst:** - Stelle sicher, dass du wirklich mit Zahlen (Datumswerten) vergleichst, nicht mit Text. - Nutze `CLng` oder `Int`, um den Zeitanteil zu entfernen. - Probiere ggf. beide `LookIn`-Varianten. - Prüfe mit `IsDate`, ob in beiden Zellen wirklich ein Datum steht. **Beispiel für robusten Vergleich:** ```vba Dim datumToFind As Long datumToFind = CLng(wsQuell.Range("B8").Value) Dim cell As Range For Each cell In wsZiel.Columns("A").Cells If CLng(cell.Value) = datumToFind Then Set rGef = cell Exit For End If Next cell ``` Das ist zwar etwas langsamer als `.Find`, aber sehr robust. --- **Tipp:** Wenn du weiterhin Probleme hast, prüfe die Werte mit `Debug.Print` im Direktfenster, um zu sehen, wie sie intern aussehen. --- **Weitere Infos zu Excel-Datumswerten:** [Microsoft: Arbeiten mit Datumsangaben und Uhrzeiten in Excel](https://support.microsoft.com/de-de/office/arbeiten-mit-datumsangaben-und-uhrzeiten-in-excel-9ffb6c2f-2c42-4b53-9573-2b8b0a77b3c0) --- Falls du einen bestimmten Wert als Beispiel hast, kannst du ihn im Direktfenster (`Debug.Print wsQuell.Range("B8").Value`) ausgeben und vergleichen, wie er in der Zieltabelle aussieht.
Um in Excel nur Werte zwischen zwei Datumswerten zu berücksichtigen, kannst du die Funktion `WENN` (bzw. `IF` im Englischen) in Kombination mit logischen Operatoren verwenden. Häufig wird au... [mehr]
Um in VBA eine Zelle mit dem Namen „Konto“ auszuwählen, kannst du den Namen direkt über das `Range`-Objekt ansprechen. Voraussetzung ist, dass der Name „Konto“ als be... [mehr]
Um eine Verknüpfung (z.B. eine Formel wie `='[AndereDatei.xlsx]Tabelle1'!A1`) in einer Zelle per VBA zu aktualisieren, ohne dass die verknüpfte Arbeitsmappe geöffnet ist, kann... [mehr]
Um Variablen wie `Set wsKriterien = ThisWorkbook.Worksheets("Kriterien")` beim Starten einer Excel-Datei automatisch zu setzen, kannst du das Workbook-Open-Ereignis im VBA-Editor nutzen. So... [mehr]
Um das Jahr des nächsten 30.06. (30. Juni) basierend auf dem aktuellen Datum zu ermitteln, kannst du folgende Excel-Formel verwenden: ```excel =JAHR(HEUTE()) + (HEUTE()>DATUM(JAHR(HEUTE());6;... [mehr]
Der Ausdruck ```vba ThisWorkbook.Names("z06_a1401111_Bericht").RefersToR1S1 = "='z06_a1401111_Bericht'!R1S1:R20S18" ``` weist dem definierten Namen **z06_a1401111_Beric... [mehr]
Um die Schleife so umzubauen, dass **in "Personen einzelnd drucken"** in den Zellen **C9:C66** nach dem Namen gesucht und mit der Spalte B im "Arbeitsplan" verglichen wird, muss di... [mehr]
Um in Excel VBA Drucktitel festzulegen, kannst du den folgenden Code verwenden. Dieser Code setzt die Drucktitel für die Zeilen und Spalten, die auf jeder gedruckten Seite wiederholt werden solle... [mehr]
Um in Excel ein bestimmtes Datum zu berechnen, kannst du verschiedene Funktionen verwenden, je nach dem, was genau du erreichen möchtest. Hier sind einige gängige Methoden: 1. **Ein bestimm... [mehr]
Um in Excel die Differenz zwischen einem Datum und einer Uhrzeit (z.B. "Eingang Email") und einem anderen Datum (z.B. "Auslieferung") zu berechnen, kannst du die folgende Formel ve... [mehr]