Laufzeitfehler '13': Typen unverträglich erst seit Excel2010

  • Excel

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von BiedermannS.

    Laufzeitfehler '13': Typen unverträglich erst seit Excel2010

    Hallo Zusammen,

    ich erkläre erstmal die Rahmenbedingungen... Wir nutzen eine Software die eine Excelvorlage öffnet, in das erste Tabellenblatt Daten schreibt und dann ein Macro ausführt.

    Das hat mit Excel 2003 funktioniert. Nun bekomme ich folgenden Fehler:

    Laufzeitfehler '13': Typen unverträglich

    Beim Debuggen zeigt er mir folgende Zeile als Falsch:

    Delta = DateDiff("d", Selection.Offset(0, -4).Value, Selection.Offset(1, -4).Value)

    Ich habe nicht soviel Ahnung von der Materie und hangel mich dadurch. Also habe ich im Internet rumgesucht und habe alle möglichen ursachen für diesen LAufzeit fehler gefunden aber nichts hat mich so richtig weiter gebracht.

    Kann es mit der Deklaration zu tun haben und damit das ich den code damals für Excel 2003 gemacht habe (Bibliotheken änderungen etc.)?

    Gruß, LvM
    Die Selection (Das was ausgewählt ist) ist dein Ausgangspunkt.

    Wert1 ist 4 spalten weiter links

    Wert2 ist 4 spalten weiter links und eine nach unten


    einer dieser Werte ist kein Datum.


    Das Problem, Selection geht von der Zelle aus, in der du dich aktiv befindest. Wenn möglich gib die benötigte Zelle über Range an

    z.B.:

    Visual Basic-Quellcode

    1. delta = DateDiff("d", Range("B4").Value, Range("B4").Offset(1, 0).Value)


    Wobei "B4" die Zelle ist.
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    Das mit Range kann ich leider nicht machen da mir die Zelle nicht bekannt ist und diese sich ändert. Ich ermittele die Tageswerte und schreibe mir den Tag und den Wert auf ein anderes Tabellenblatt.

    Etwas mehr aus meinem Code:

    Do Until Selection.Offset(0, -1).Value <> "HT-Kalender" Hier ist der Grund dafür

    Selection.Value = Selection.Offset(0, -2).Value + Selection.Offset(-1, 0).Value


    Delta = DateDiff("d", Selection.Offset(0, -4).Value, Selection.Offset(1, -4).Value)
    If Delta = 1 Then
    container = Selection.Offset(0, 0).Value
    Worksheets("Calc").Range("C" & i).Value = container
    Worksheets("Calc").Range("A" & i).Value = Format(Selection.Offset(0, -4).Value, "DDD DD.MM.YYYY")
    Selection.Offset(0, 0).Value = 0
    i = i + 1
    End If

    Selection.Offset(1, 0).Select
    Loop

    lorenzo von matterhorn schrieb:

    as mit Range kann ich leider nicht machen da mir die Zelle nicht bekannt ist und diese sich ändert
    Dann setz vorher einen Find-Befehl ab, um die Zelle zu suchen.
    Oder gib der Zelle einen Namen.

    Selection ist ein absoluter Faux-pas.
    Wenn du innerhalb der ersten 4 Spalten selektierst MUSS Selection.Offset(1, -4) in den Wald zeigen
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    petaod schrieb:

    Selection ist ein absoluter Faux-pas.
    Wenn du innerhalb der ersten 4 Spalten selektierst MUSS Selection.Offset(1, -4) in den Wald zeigen







    Bisher hat es mit dem Selection.Offset immer gut gepasst : /

    Ich habe zum Test deine Zeile eingefügt und es ist zumindest dort weiter gelaufen.

    delta = DateDiff("d", Range("B4").Value, Range("B4").Offset(1, 0).Value)

    Diese besondere stelle habe ich 3 mal im Code. Wie funktioniert das mit dem Findbefehl hast du nen Link? Oder kannst du mir sagen wie ich das abändern soll?

    Oder kann ich irgendwie einen Platzhalter nutzen?

    x=Selection.Offset(0, -4).Value

    y=Selection.Offset(1, -4).Value

    Delta = DateDiff("d", Range(X).Value, Range(Y).Value)

    EDIT:

    Ich probiere das gerade und als was Deklariere ich dann X und Y? DIM X As ?

    EDIT: Also in der Spalte A befindet sich auf der Höhe wo er schaut ein Datum. Wenn ich leere spalte auswähle dann hat der code kein problem. Also hat Delta = DateDiff () damit ein Problem das da ein Datum ist?

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „lorenzo von matterhorn“ ()

    Ich bin mir Ziemlich sicher das es an "Selection.Offset(0, -4).Value" liegt weil dort ein Datum steht und Excel 2010 darauf nicht klar kommt. In Excel 2003 hatte ich keine Probleme mit der Zeile "Delta = DateDiff("d", Selection.Offset(0, -4).Value, Selection.Offset(1, -4).Value)"

    Wenn ich mit Platzhaltern arbeite bekomme ich den gleichen fehler wo ich "x=Selection.Offset(0, -4).Value" setze.

    Any ideas?
    Hallo,

    ich weiß es nicht genau (hab nicht soviel Ahnung) aber ich glaube Excel 2010 hat mit Datumsangaben Probleme. In einem etwas anderen Fall hat bei mir funktioniert das Format für das Datum festzulegen.
    Ausschnitt aus meinem Beispiel:

    Quellcode

    1. Sub Main()
    2. Dim strFirstAddress As String
    3. Dim rngRange As Range
    4. Dim rngCell As Range
    5. Dim strTMP As String
    6. On Error GoTo Fin
    7. With Tabelle1
    8. Set rngRange = .Range("A1:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
    9. Set rngCell = rngRange.Find(Date, LookIn:=xlValues, LookAt:=xlWhole)
    10. If Not rngCell Is Nothing Then


    Als ich dann Code folgend verändert habe:

    Quellcode

    1. Sub Main()
    2. Dim strFirstAddress As String
    3. Dim rngRange As Range
    4. Dim rngCell As Range
    5. Dim strTMP As String
    6. On Error GoTo Fin
    7. nDate = Format(Date, "DD.MM.YYYY")
    8. With Tabelle1
    9. Set rngRange = .Range("A1:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
    10. Set rngCell = rngRange.Find(nDate, LookIn:=xlValues, LookAt:=xlWhole)
    11. If Not rngCell Is Nothing Then


    Lief der Code, der in erster Version bei mir zu Hause auch gelaufen ist und auf Arbeit nicht, in zweiter Version auch auf Arbeit (andere Excel Version).

    Wenn mein Gedanke Nonsense ist, bitte ignorieren. ;)

    Gruß
    Michael
    Ich habe mal ein bischen rumprobiert und habe mal den Inhalt meiner Selections noch mal woanders hinschreiben lassen.

    X = Format(Selection.Offset(0, -4).Value, "DD.MM.YYYY")
    Worksheets("Calc").Range("L" & 1).Value = Selection.Offset(1, -4).Value <-- Gibt "01.09.2012 00:15" aus.
    Y = Format(Selection.Offset(1, -4).Value, "DD.MM.YYYY")
    Worksheets("Calc").Range("J" & 1).Value = X <-- Gibt "01.09.2012 00:00" aus aber warum mit Uhrzeit?
    Worksheets("Calc").Range("K" & 1).Value = Y <-- Gibt nichts aus das verstehe ich nicht.

    Z= Y - X <-- Hier bleibt es hängen mit der gleichen Fehlermeldung

    Ich wollte mein DateDiff mit einer einfachen Subtraktion ersetzen (Z=Y-X) um dem Fehler auf den Grund zu kommen aber in dieser Zeile schmiert das Ding dann ab. Wahrscheinlich weil in Y nichts drin steht. Aber warum dort nichts steht ist mir ein Rätsel.
    Ich hab es in meinem ersten Post doch schon gesagt. Selection ist eine Userauswahl und per Offset gehst du von dieser Userauswahl um x schritte nach links/rechts und um y schritte nach oben/unten.

    Wenn die Selection nicht stimmt oder der Offset falsch ist, dann ist doch klar warum das nicht funktioniert. (Wenn du von deinem Haus vier Häuser weiter gehst bist du wo anders als wenn du vom Nachbarhaus vier Häuser weiter gehst...)

    Entweder suchst du die entsprechende Zelle anhand von diversen Anhaltspunkten. Oder du sorgst dafür, dass das Datum immer an der selben Stelle zu finden ist.

    Selection ist eine Userauswahl, welche als Bezugspunkt gilt.

    Also, vergiss selection.


    Edit: Versuch es mal so: (Das erste Range muss an die Spalte angepasst werden)

    EDIT: Hatte nen kleine Fehler darin. Hier der aktuelle Code

    Visual Basic-Quellcode

    1. Sub test()
    2. Dim current As Range
    3. Set current = ActiveSheet.Range("F" & 6)
    4. Do Until current.Value <> "HT-Kalender"
    5. current.Value = current.Offset(0, -2).Value + current.Offset(-1, 0).Value
    6. Delta = DateDiff("d", current.Offset(0, -4).Value, current.Offset(1, -4).Value)
    7. If Delta = 1 Then
    8. Container = current.Offset(0, 0).Value
    9. Worksheets("Calc").Range("C" & i).Value = Container
    10. Worksheets("Calc").Range("A" & i).Value = Format(current.Offset(0, -4).Value, "DDD DD.MM.YYYY")
    11. current.Offset(0, 0).Value = 0
    12. i = i + 1
    13. End If
    14. Set current = current.Offset(1, 0)
    15. Loop
    16. End Sub
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BiedermannS“ ()

    --SOLVED--

    Es lag daran das Excel das Datum nicht mehr erkannt hat. Zwar stand in der Zeile "01.09.2012 00:00" und das Format war Datum aber es war ein String. Vermutlich konnte Excel es nicht umwandeln da Excel zwar Deutsch installiert ist aber der Server auf Großbritanien (Englisch) steht, dadurch erwartet es ein Datumsformat "01/09/2012".

    Die Lösung war es den Inhalt der Zelle zum Datum zu machen:

    Dim XD As Date
    Dim YD As Date

    XD = Replace(Left(Selection.Offset(0, -4).Value, 10), ".", "/") 'Nimmt die ersten 10 Stellen und ersetzt . durch /
    YD = Replace(Left(Selection.Offset(1, -4).Value, 10), ".", "/")
    Delta = DateDiff("d", XD, YD)

    Danke an petaod, derrieger und BiedermannS für Eure Hilfe.
    Freut mich, dass es nun funzt.

    Ich frage mal, ob ein

    Visual Basic-Quellcode

    1. Delta = DateDiff("d", cdate(current.Offset(0, -4).Value), cdate(current.Offset(1, -4).Value))


    auch gereicht hätte.
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Auf jeden Fall besser als mit Selection zu arbeiten. Da kann so viel schief gehen.

    Und wenn man den User eine Zelle auswählen lässt, dann nimmt man einmal Selection und speichert das in einer Range und arbeitet mit dieser.

    Weil keiner garantieren kann, das sich die Selection nicht unbeabsichtigt ändert (hatte ich irgendwann mal bei einem größeren Projekt)
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D