Differenz Datumsangaben

  • Excel

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Nicoleka95.

    Differenz Datumsangaben

    Hallo,
    ich hab folgendes Problem.
    ich möchte eine Tabelle(BelegKunde) durchlaufen und überprüfen in jeder zeile, ob das Datum kleiner ist als ein Jahr und dann in eine andere Tabelle einfügen.
    nur wird mir der Fehler "Typ unverträglich" angezeigt und ich weis nicht warum.
    'ist in BelegKunde leer? wenn nein gehe runter bis eine leere Zelle gefunden ist

    While Not IsEmpty(BelegKunde.Cells(zeileQuelle, spalteQuelle))
    Dim datum As Date
    Dim aktuellDate As Date
    Dim diff

    aktuellDate = Date
    'datum differez aktuell zu datum in BelegKunde
    datum = BelegKunde.Cells(zeileQuelle, 1).Value

    diff = DateDiff("d", datum, aktuellDate)

    'Ist das Datum das aktuelle? wenn ja kopiere aus Tabelle1 in 2
    If diff < 366 Then

    Angebotsliste.Cells(zeileZiel, spalteziel).Value = BelegKunde.Cells(zeileQuelle, spalteQuelle)
    Angebotsliste.Cells(zeileZiel, spalteziel + 1).Value = BelegKunde.Cells(zeileQuelle, spalteQuelle + 1)
    Angebotsliste.Cells(zeileZiel, spalteziel + 2).Value = BelegKunde.Cells(zeileQuelle, spalteQuelle + 2)
    Angebotsliste.Cells(zeileZiel, spalteziel + 3).Value = BelegKunde.Cells(zeileQuelle, spalteQuelle + 3)
    Angebotsliste.Cells(zeileZiel, spalteziel + 4).Value = BelegKunde.Cells(zeileQuelle, spalteQuelle + 4)
    Angebotsliste.Cells(zeileZiel, spalteziel + 5).Value = BelegKunde.Cells(zeileQuelle, spalteQuelle + 5)
    zeileZiel = zeileZiel + 1

    End If

    zeileQuelle = zeileQuelle + 1

    Wend

    Hoffe mir kann Jemand helfen.
    Grüße
    Nicole :)
    1. Bitte CodeTags erwenden.
    2. In welcher Zeile kommt der Fehler? Ich vermute mal bei DateDiff, aber das ist Spekulatius. (Wenn Du CodeTags verwendest, kann man auch sehen und sagen: in Zeile#5)
    3. Wenn der Fehler auftritt, kannst Du ja auch auf [Debuggen] klicken, mit der Maus über die Variablen gehen und so schauen, was für Werte drinstehen. Dann sollte klar werden, wo der Fehler ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo, danke für deine Antwort.
    der Fehler tritt bei der Wertzuweisung der Variable Datum auf, die einen Wert aus einem anderen Tabellenblatt bekommt.
    Wenn ich auf Debuggen klicke und über die Variable Datum gehe, kommt das Datum, das am Ende des Schleifendurchlaufs ( also am Ende der Tabelle BelegKunde) steht.
    Also eigentlich das richtige Datum. nur bekomme ich den Fehler Typ unverträglich und es wird nichts kopiert in die Tabelle Angebotsliste

    Wenn ich aber jetzt habe die variable diff als Integer deklariere,dann fügt er mir in die Tabelle Angebotsliste alle Zeilen ein, die <= 1 Jahr sind.
    nur der Fehler Typ unverträglich wird trotzdem in der Zeile angezeigt, in der ich Datum einen wert zuweise.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nicoleka95“ ()

    Nicoleka95 schrieb:

    also am Ende der Tabelle BelegKunde
    Deinem Code zufolge fängst Du oben an. Das würde ja bedeuten, dass ganz viel richtig läuft und übertragen wird. Oder verstehe ich das falsch? Da man sowohl Datumzellwerte als auch Texte mit einer Zuweisung zu einem Datum machen kann, versteh ich es auch nicht ganz. Bei welchem Wert rebelliert denn das Makro?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo,
    ja der Code wird genauso ausgeführt wie ich das will, also alle Zeilen die kleiner oder gleich ein Jahr sind werden kopiert.
    nur wird mir immer der Fehler "Typ unverträglich" angezeigt und die zeile in der die Formel Datum ) CDate(BelegKunde.Cells(zeileQuelle,1).Value wird gelb markiert.
    Also liegt der Fehler in dieser Zeile.
    Wie ist die Datumsspalte in der Quelltabelle formatiert als Datum oder als Text ?
    Wenn sie als Datum formatiert ist sollte die Befelszeile aus Deinem ersten Post passen.

    Quellcode

    1. datum = BelegKunde.Cells(zeileQuelle, 1).Value

    Ist sie als Text formatiert dann die aus Deinem letzten Post

    Quellcode

    1. Datum = CDate(BelegKunde.Cells(zeileQuelle,1).Value
    Danke für deine Antwort,
    ja die Datumsspalte in der Quelltabelle ist als Datum formatiert.
    deswegen habe ich das CDate weggelassen.
    Also muss es ein anderer Fehler sein. Ausgeführt wird das Programm ganz normal nur dass dann die Fehlermeldung mit der "Typ unverträglich" kommt.

    Hoffe es findet sich der Fehler :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nicoleka95“ ()

    Nicoleka95 schrieb:

    Ausgeführt wird das Programm ganz normal nur dass dann die Fehlermeldung mit der "Typ unverträglich" kommt.

    Bei dieser Fehlermeldungs-Box kannst du auf "Debug" klicken.
    In welcher Zeile bleibt er stehen?
    Welchen Wert hat ​zeileQuelle?
    Welchen Wert hat BelegKunde.Cells(zeileQuelle, 1).Value?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Bevor ich mit Datumangaben arbeite, prüfe ich erst auf Datum. Bei Zahlen gehe ich ähnlich vor:

    Visual Basic-Quellcode

    1. if isdate()
    2. if isnumeric()


    Schön ist es immer, wenn als Beispiel lauffähiger Code gepostet wird, so dass ich nur noch Copy und Paste machen brauch.

    Ein Workaround:

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Sub los()
    3. Dim zeileQuelle As Long
    4. Dim spalteQuelle As Long
    5. Dim zeileZiel As Long
    6. Dim spalteZiel As Long
    7. Dim diff As Integer
    8. Dim datum As Date
    9. Dim BelegKunde As Worksheet
    10. Dim Angebotsliste As Worksheet
    11. Set BelegKunde = Sheets("BelegKunde")
    12. Set Angebotsliste = Sheets("Angebotsliste")
    13. spalteQuelle = 1
    14. zeileQuelle = 1
    15. spalteZiel = 1
    16. zeileZiel = 1
    17. While Not IsEmpty(BelegKunde.Cells(zeileQuelle, spalteQuelle))
    18. 'datum differez aktuell zu datum in BelegKunde
    19. If IsDate(BelegKunde.Cells(zeileQuelle, 1).Value) Then
    20. datum = BelegKunde.Cells(zeileQuelle, 1).Value
    21. diff = DateDiff("d", datum, Now())
    22. 'Ist das Datum das aktuelle? wenn ja kopiere aus Tabelle1 in 2
    23. If diff < 366 Then
    24. Angebotsliste.Cells(zeileZiel, spalteZiel).Value = BelegKunde.Cells(zeileQuelle, spalteQuelle)
    25. Angebotsliste.Cells(zeileZiel, spalteZiel).NumberFormat = "m/d/yyyy"
    26. Angebotsliste.Cells(zeileZiel, spalteZiel + 1).Value = BelegKunde.Cells(zeileQuelle, spalteQuelle + 1)
    27. Angebotsliste.Cells(zeileZiel, spalteZiel + 2).Value = BelegKunde.Cells(zeileQuelle, spalteQuelle + 2)
    28. Angebotsliste.Cells(zeileZiel, spalteZiel + 3).Value = BelegKunde.Cells(zeileQuelle, spalteQuelle + 3)
    29. Angebotsliste.Cells(zeileZiel, spalteZiel + 4).Value = BelegKunde.Cells(zeileQuelle, spalteQuelle + 4)
    30. Angebotsliste.Cells(zeileZiel, spalteZiel + 5).Value = BelegKunde.Cells(zeileQuelle, spalteQuelle + 5)
    31. zeileZiel = zeileZiel + 1
    32. End If
    33. Else
    34. Angebotsliste.Cells(zeileZiel, spalteZiel).Value = "Kein Datum!"
    35. Angebotsliste.Cells(zeileZiel, spalteZiel + 1).Value = "Zeile:" & zeileQuelle
    36. zeileZiel = zeileZiel + 1
    37. End If
    38. zeileQuelle = zeileQuelle + 1
    39. Wend
    40. End Sub
    Gruß
    Peterfido

    Keine Unterstützung per PN!