Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Laufzeitfehler "13": Typen unverträglich

Laufzeitfehler "13": Typen unverträglich
Jochen
Hallo Freunde,
habe folgendes Makro aufgezeichnet:
Sheets("Auftrag 1").Select
Range("O1").Select
Selection.EntireColumn.Hidden = False
Range("O11:O310").Select
Selection.Copy
Range("P11").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("O13").Select
Selection.EntireColumn.Hidden = True
Sheets("Gesamt A1").Select
Columns("A:A").Select
Selection.ClearContents
Sheets("Auswertung A1").Select
Range("D1:D310").Select
Selection.Copy
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
Sheets("Auswertung A1").Select
Range("A2").Select
Dim quelle As Worksheet, ziel As Worksheet
Dim i As Integer, j As Integer
Dim vorhanden As Boolean
Set quelle = Application.Worksheets("Auswertung A1")
Set ziel = Application.Worksheets("Gesamt A1")
ReDim artnr(quelle.Cells(Rows.Count, 1).End(xlUp).Row) As String
j = -1
For i = 1 To Sheets("Auswertung A1").Cells(Rows.Count, 1).End(xlUp).Row
vorhanden = False
For k = 0 To j
*** If quelle.Cells(i, 1) = "" Or quelle.Cells(i, 1) = artnr(k) Then vorhanden = True ***
End If
Next k
If vorhanden = False Then
j = j + 1
artnr(j) = quelle.Cells(i, 1)
End If
Next i
For i = 0 To j
ziel.Cells(i + 1, 1) = artnr(i)
Next i
Sheets("Gesamt A1").Select
Range("A1").Select
End Sub
Mein Problem:
In der Ursprungsdatei hatte ich 200 Zeilen die mir dieses MAKRO ausgewertet hat und es war alles in Ordnung.
Dann habe ich noch 100 Zeilen hinzu gefügt und auch geklappt.
Jetzt versuche ich wieder Zeilen zu löschen und das MAKRO hängt sich an dieser Zeile auf:
*** If quelle.Cells(i, 1) = "" Or quelle.Cells(i, 1) = artnr(k) Then vorhanden = True ***
Sternchen nur die Kennzeichnung, an welcher Stelle das MAKRO stehen bleibt.
Hat einer in der großen EXCEL - Weld eine Lösung für mich parat?
Danke im voraus,
Jochen
Anzeige
AW: Laufzeitfehler "13": Typen unverträglich
01.12.2009 09:55:30
Peter
Hallöchen Jochen,
lasse die Frage zwar mal offen, aber:
Hast Du die Datei nach dem Löschen der Zeilen gespeichert?
Lässt Du das Makro mehrmals hintereinander durchlaufen? (Wenn ja, solltest Du rein vorsichtshalber die Variable i auf 0 zurücksetzen.
Gruß
Peter
AW: Laufzeitfehler "13": Typen unverträglich
01.12.2009 10:29:13
Jochen
Hallo Peter,
habe die Änderung vorgenommen:
If quelle.Cells(o, 1) = "" Or quelle.Cells(o, 1) = artnr(k) Then vorhanden = True
Erst nach dem ich in dieser Zeile "artnr(j) = quelle.Cells(i, 1)" auch die Änderung vorgenommen habe läuft das MAKRO etwas weiter.
Nun bleibt es an diese Stelle stehen:
artnr(j) = quelle.Cells(o, 1)
Gruß
Jochen
Anzeige
AW: Laufzeitfehler "13": Typen unverträglich
02.12.2009 08:40:35
Peter
Hallo Jochen,
hab mir gerade nochmal Dein Progrämmchen vorgenommen.
Wenn Du es folgendermaßen veränderst, funktioniert es bei mir ohne Probleme auch ohne zwischenspeichern.
Set quelle = Application.Worksheets("Auswertung A1")
Set ziel = Application.Worksheets("Gesamt A1")
ReDim artnr(quelle.Cells(Rows.Count, 1).End(xlUp).Row) As String
j = 1
For i = 1 To Sheets("Auswertung A1").Cells(Rows.Count, 1).End(xlUp).Row
vorhanden = False
If quelle.Cells(i, 1) = "" Or quelle.Cells(i, 1) = artnr(i) Then vorhanden = True
If vorhanden = False Then
artnr(i) = quelle.Cells(i, 1)
End If
Next i
i = i - 1
For j = 1 To i
ziel.Cells(j, 1) = artnr(j)
Next j
Gruß Peter
Anzeige
AW: Laufzeitfehler "13": Typen unverträglich
02.12.2009 09:50:37
Jochen
Hallo Peter,
habe Deine Änderung in mein MAKRO 1 : 1 kopiert und es bleibt an der Gleichen Stelle:
[ If quelle.Cells(i, 1) = "" Or quelle.Cells(i, 1) = artnr(i) Then vorhanden = True ] stehen.
Kann die Datei leider nicht hochladen, da sie zu groß ist ( 3 MB ).
Gruß
Jochen
AW: Laufzeitfehler "13": Typen unverträglich
02.12.2009 10:27:17
Peter
Hallo Jochen,
hab gerade eben nochmal das komplette Makro ausprobiert und es läuft bei mir einwandfrei.
Mit welcher Fehlermeldung bleibt er denn stehen. Wäre vielleicht noch ein Hinweis, auf dem man aufbauen kann.
Gruß
Peter
Anzeige
AW: Laufzeitfehler "13": Typen unverträglich
02.12.2009 10:38:50
Jochen
Hallo Peter,
Habe jetzt die Zeile 296 bis zur letzen Zeile ( 311 ) aus meiner Datei gelöscht.
Die Fehlermeldung lautet:
Laufzeitfehler '13':
Typen unverträglich
diese Zeile wird Gelb hinterlegt:
If quelle.Cells(i, 1) = "" Or quelle.Cells(i, 1) = artnr(k) Then
Gruß
Jochen
Anzeige
AW: Laufzeitfehler "13": Typen unverträglich
02.12.2009 11:03:00
Peter
Hallo Jochen,
nochmal ne Frage:
Aus welchem Blatt löscht Du die Zeilen?
Hast Du auf einem der ersten Blätter evtl. in den entsprechenden Zeilen Zellbezüge auf die fehlenden Zeilen? Dann kommt nämlich ne Fehlermeldung beim löschen raus.
Gruß
Peter
AW: Laufzeitfehler "13": Typen unverträglich
02.12.2009 11:18:09
David
Hallo Jochen,
da ich wohl in dem Thread ignoriert werde - zumindest habe ich kein Feedback auf meinen Beitrag bekommen - wollte ich mich eigentlich raushalten.
Aber noch als kleiner Tip:
Wenn man für die Variablen eine Überwachung einfügt, kann man kontrollieren, bei welchem Wert der Fehler auftriff. Somit lässt er sich auch besser eingrenzen.
Ich vermute, entweder ist i oder k negativ, oder das ="" verursacht den Fehler, denn wenn ein numerischer Wert leer ist, ergibt das nicht "" sondern 0.
Gruß
David
Anzeige
AW: Laufzeitfehler "13": Typen unverträglich
02.12.2009 12:33:29
Jochen
Hallo David,
das sollte kein Ignorieren sein, bloß mit Deinem Tipp konnte ich nicht sorecht etwas anfangen. Im VBA bin ich nicht sogut das ich solche Tipps umsetzen kann.
Deinen Tipp mit dem Kürzen der Formeln werde ich einbauen.
Danke für Deine Bemühungen;-)
Gruß
Jochen
AW: Laufzeitfehler "13": Typen unverträglich
02.12.2009 12:28:51
Jochen
Hallo Peter,
Deine Frage nach dem Tabellenblatt hat geholfen.
Habe die Zeilen nur in dem Tabellenblatt "Auftrag 1" gelöscht aber nicht im Tabellenbaltt "Auswertung A1", so mit blieb das MAKRO stehen.
Danke für Deine bemühungen;-)
Gruß
Jochen
Anzeige
AW: Laufzeitfehler "13": Typen unverträglich
01.12.2009 10:25:08
David
Hallo Jochen,
bei Code, der ganze Zeilen und/oder Spalten löscht, sollte man immer von hinten/unten nach vorn/oben abarbeiten, also nach dem Muster
For i=100 to 1 step -1
Ansonsten werden nach jedem Löschvorgang eine oder mehrere Zeilen übersprungen, da der Zähler ja schon eine Nummer weiter ist, die nachfolgenden aber hochrutschen.
Ich habe aber nicht getestet, ob das deinen Fehler löst.
Außerdem solltest du dich dringen mit dem Nicht-Notwendigsein von Select auseinandersetzen. Die Aufzeichnungen des Recorders sind in der Hinsicht seeeehr unübersichtlich.
Nur ein Beispiel:
statt
Range("O11:O310").Select
Selection.Copy
kann man schreiben:
Range("O11:O310").Copy
Leider findet man das in der Hilfe so nicht, so dass man dies nur per Learning-by-doing rausbekommt. Wenn du öfters im Forum unterwegs bist, wird dir dies immer wieder über die Füße laufen.
Gruß
David
Anzeige
AW: Laufzeitfehler "13": Typen unverträglich
01.12.2009 10:27:33
Yusuf
Moin,
versuche mal bitte bei
For k = 0 to j Step - 1
da j = -1 ist. Ich weiß nicht ob die Schleife sonst ins negative laufen kann.
Gruß
Yusuf
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Laufzeitfehler "13": Typen unverträglich in Excel VBA beheben


Schritt-für-Schritt-Anleitung

  1. Überprüfe die Zeilen: Wenn du Zeilen in einem Blatt löschst, stelle sicher, dass du keine Zellbezüge auf diese Zeilen in anderen Blättern hast. Dies kann den Laufzeitfehler 13 verursachen.

  2. Ändere die Schleifenstruktur: Bei der Verwendung von Arrays wie artnr solltest du sicherstellen, dass die Indizes korrekt sind. Wenn du beispielsweise den Wert von j nicht korrekt initialisierst, kann dies zu einem Typen unverträglich Fehler führen.

    j = 1
  3. Verwende Debugging: Füge eine Überwachung für die Variablen i und k ein, um zu sehen, ob diese Werte negativ werden. Dies hilft, den genauen Punkt zu finden, an dem der Fehler auftritt.

  4. Iteriere von unten nach oben: Wenn du Zeilen löschst, durchlaufe die Schleife von der letzten zur ersten Zeile, um zu verhindern, dass Zeilen übersprungen werden.

    For i = 310 To 1 Step -1
  5. Vermeide die Verwendung von Select: Reduziere die Verwendung von .Select und arbeite direkt mit den Objekten. Das macht den Code klarer und weniger fehleranfällig.

    Range("O11:O310").Copy

Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler '13': Typen unverträglich

    • Lösung: Überprüfe, ob die Variablen die richtigen Datentypen haben. Zum Beispiel, wenn artnr(k) ein numerischer Wert ist, stelle sicher, dass k nicht außerhalb des Bereichs des Arrays liegt.
  • Fehler: Schleifenüberspringen

    • Lösung: Iteriere von hinten nach vorne, während du Zeilen löschst, um das Überspringen von Indizes zu vermeiden.

Alternative Methoden

  • Verwendung von Dictionary: Statt ein Array zu verwenden, könntest du ein Scripting.Dictionary verwenden, um die Werte zu speichern. Dies ermöglicht es dir, doppelte Werte einfach zu verwalten.

  • Fehlerbehandlung: Implementiere On Error Resume Next und eine Fehlerbehandlung, um spezifische Fehler zu fangen und zu beheben, anstatt das gesamte Makro zu stoppen.


Praktische Beispiele

Hier ist ein Beispiel für ein verbessertes Makro, das Laufzeitfehler 13 vermeidet:

Sub BeispielMakro()
    Dim quelle As Worksheet, ziel As Worksheet
    Dim artnr() As String
    Dim i As Long, j As Long

    Set quelle = Worksheets("Auswertung A1")
    Set ziel = Worksheets("Gesamt A1")

    ReDim artnr(1 To quelle.Cells(Rows.Count, 1).End(xlUp).Row)
    j = 1

    For i = 1 To quelle.Cells(Rows.Count, 1).End(xlUp).Row
        If quelle.Cells(i, 1) <> "" Then
            If IsError(Application.Match(quelle.Cells(i, 1), artnr, 0)) Then
                artnr(j) = quelle.Cells(i, 1)
                j = j + 1
            End If
        End If
    Next i

    For i = 1 To j - 1
        ziel.Cells(i, 1) = artnr(i)
    Next i
End Sub

Tipps für Profis

  • Verwende Typen: Deklariere deine Variablen mit spezifischen Typen, um Laufzeitfehler zu minimieren. Zum Beispiel Dim i As Long anstelle von Dim i.

  • Nutze Option Explicit: Aktiviere Option Explicit am Anfang jedes Moduls, um sicherzustellen, dass alle Variablen deklariert sind.

  • Code-Dokumentation: Kommentiere deinen Code gut, damit du und andere ihn später besser verstehen können.


FAQ: Häufige Fragen

1. Was verursacht den Laufzeitfehler 13 in Excel VBA?
Der Laufzeitfehler 13 tritt auf, wenn ein Datentyp nicht mit dem erwarteten Datentyp übereinstimmt. Dies geschieht oft bei Vergleichen oder Zuweisungen.

2. Wie kann ich Laufzeitfehler 13 beheben?
Überprüfe die Daten, die du verarbeitest, und stelle sicher, dass die Variablen richtig deklariert sind. Verwende Debugging-Techniken, um den Fehler genauer zu lokalisieren.

3. Ist es möglich, den Fehler mit einer bestimmten Excel-Version zu lösen?
Ja, manchmal können bestimmte Excel-Versionen oder VBA-Patches helfen, Probleme zu beheben, die in älteren Versionen auftreten können. Achte darauf, deine Software auf dem neuesten Stand zu halten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige