Live-Forum - Die aktuellen Beiträge
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
11.04.2017 13:50:24
Thomas
Hallo ich habe hier eine UF mit deren Hilfe eine neue Zeile mit Daten gefüllt werden soll.
Der Wert von Textbox eins soll in die erste freie Zeile der Spalte A geschrieben werden. (Funktioniert)
Desweiteren sind noch andere Textboxen auf der UF. Deren Werte sollen in die Zeile in welche der Inhalt von TB1 geschrieben worden ist.... aber in bestimmte Spalten.
Mein Code sieht wie folgt aus:
Private Sub CommandButton1_Click()
Dim letzteSpalte As String
Dim letzte As String
Dim findZeile As String
letzte = Worksheets("Vorgaben").Cells(Rows.Count, 1).End(xlUp).Row + 1
With Worksheets("Vorgaben")
Sheets("Vorgaben").Range("A" & letzte).Value = Me.TextBox1
End With
With Worksheets("Vorgaben")
findZeile = Application.Match((NeuesWerkzeug.TextBox1), .Columns(1))
'    letzteSpalte = .Cells(findZeile, Columns.Count).End(xlToLeft).Column
.Cells(findZeile, 2) = TextBox2  ' AB HIER KOMMT IM BETREFF ERWÄHNTE FEHLERMELDUNG
.Cells(findZeile, 3) = TextBox3
.Cells(findZeile, 4) = TextBox4
.Cells(findZeile, 5) = ComboBox1
.Cells(findZeile, 6) = ComboBox2
.Cells(findZeile, 16) = ComboBox3
End With
End Sub
Jemand eine Idee woran es liegen könnte ?
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 13 Typen unverträglich
11.04.2017 14:03:59
Anton2
Hallo Thomas,
findZeile ist als String deklariert. .Cells benötigt aber Integer, Long usw.
Das ist meine Vermutung. Einfach mal probieren.
VG Anton
findZeile muss eine Zahl sein-kein Text. owT
11.04.2017 14:05:15
robert
AW: Laufzeitfehler 13 Typen unverträglich
11.04.2017 14:15:04
Werner
Hallo Thomas,
Die Variablen sind als String deklariert, müssten aber Long sein.
LetzteZeile und letzteSpalte sowie das Applikation.Match braucht es doch gar nicht. Die weiteren Werte sollen doch in die gleiche Zeile wie der erste Eintrag und da hast du ja die Zeilennummer in der Variablen letzte.
Private Sub CommandButton1_Click()
Dim letzte As Long
With Worksheets("Vorgaben")
letzte = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(letzte, 1).Value = Me.TextBox1
.Cells(letzte, 2) = TextBox2
.Cells(letzte, 3) = TextBox3
.Cells(letzte, 4) = TextBox4
.Cells(letzte, 5) = ComboBox1
.Cells(letzte, 6) = ComboBox2
.Cells(letzte, 16) = ComboBox3
End With
End Sub
Gruß Werner
Anzeige
AW: Laufzeitfehler 13 Typen unverträglich
11.04.2017 15:57:30
Daniel
Hi
das findZeile als String deklariert ist, ist zwar falsch, verursacht aber nicht den Fehler.
VBA wandelt normalerweise Text in Zahlen und umgegehrt, wenn das mögich ist.
das Problem dürfte eher sein, dass das Application.Match den Wert nicht finden kann und daher den #NV-Fehler zurück gibt.
Dieser Fehlerwert verursacht dann den Laufzeitfehler 13, weil VBA den Fehler nicht in einen Text wandelt.
Daß dein Application.Match den Wert nicht findet, kann zwei Ursachen haben:
a) die Eingabe in die TextBox besteht nur aus Ziffern. Beim Schreiben in die Zelle wird dann diese Ziffernfolge in eine Zahl gewandelt. Da Application.Match zwischen Text und Zahl unterscheidet, wird die Zahl 1 in der Zelle nicht gefunden, wenn du nach dem Text "1" aus der TextBox suchst.
b) du hast beim Application.Match den dritten Parameter nicht angegeben. Excel nimmt dann an, dass dieser 1 ist und erwartet sortierte Daten. Wenn die Daten jedoch unsortiert sind, kann das Ergebnis der #NV-Fehler oder ein unsinniges Ergebnis sein.
Du solltest hier daher auf jeden Fall den 3. Parameter mit 0 für unsortierte Daten angeben.
Aber wie Werner schon geschrieben hat, das Application.Match ist hier absolut überflüssig, weil du die Zeile ja schon in der Variablen "letzte" hinterlegt hast.
Gruß Daniel
Anzeige
AW: Laufzeitfehler 13 Typen unverträglich
12.04.2017 07:48:54
Thomas
In der Tat ist Match völlig überflüssig.... Ich hab noch einiges zu lernen.
Der Code funktioniert jetzt und ich bedanke mich an dieser Stelle
AW: Danke für die Rückmeldung. o.w.T.
12.04.2017 09:10:12
Werner
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Laufzeitfehler 13 Typen unverträglich in Excel VBA beheben


Schritt-für-Schritt-Anleitung

Um den Laufzeitfehler 13 Typen unverträglich in Excel VBA zu beheben, folge diesen Schritten:

  1. Überprüfe die Variablendeklaration: Stelle sicher, dass die Variablen für Zeilen und Spalten als Long deklariert sind und nicht als String. Zum Beispiel:

    Dim letzte As Long
  2. Vermeide unnötige Funktionen: Wenn du bereits die letzte Zeile mit letzte = Worksheets("Vorgaben").Cells(Rows.Count, 1).End(xlUp).Row + 1 ermittelt hast, kannst du auf das Application.Match verzichten.

  3. Korrekte Zuweisung: Stelle sicher, dass die Werte aus den Textboxen und Comboboxen korrekt in die Zellen geschrieben werden. Der Code sollte folgendermaßen aussehen:

    With Worksheets("Vorgaben")
       .Cells(letzte, 1).Value = Me.TextBox1
       .Cells(letzte, 2) = TextBox2
       .Cells(letzte, 3) = TextBox3
       .Cells(letzte, 4) = TextBox4
       .Cells(letzte, 5) = ComboBox1
       .Cells(letzte, 6) = ComboBox2
       .Cells(letzte, 16) = ComboBox3
    End With

Häufige Fehler und Lösungen

  • Fehler: findZeile als String: Wenn findZeile als String deklariert ist, verursacht dies einen Laufzeitfehler 13, da .Cells eine numerische Zeile erwartet. Ändere die Deklaration zu Long.

  • Fehler: Application.Match: Wenn Application.Match den gesuchten Wert nicht findet, wird ein #NV-Fehler zurückgegeben, was den Laufzeitfehler 13 auslöst. Stelle sicher, dass die Textbox-Eingaben korrekt sind und die Daten in den Zellen übereinstimmen.

  • Fehler: Typen unverträglich bei Zuweisungen: Überprüfe, ob die Typen der Werte in den Textboxen und den Zellen übereinstimmen. Beispielsweise kann eine Zahl in einer Textbox als Text behandelt werden.


Alternative Methoden

Wenn du den laufzeitfehler 13 nicht beheben kannst, kannst du folgende alternative Methoden ausprobieren:

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deinem Code, um genauer zu verstehen, wo der Fehler auftritt:

    On Error GoTo Fehlerbehandlung
    ' Dein Code hier
    Exit Sub
    
    Fehlerbehandlung:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
  • Verwendung von Option Explicit: Füge Option Explicit am Anfang deines Moduls hinzu, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Tippfehler und falsche Datentypen zu vermeiden.


Praktische Beispiele

Hier ist ein praktisches Beispiel, das den Laufzeitfehler 13 vermeidet:

Private Sub CommandButton1_Click()
    Dim letzte As Long
    With Worksheets("Vorgaben")
        letzte = .Cells(Rows.Count, 1).End(xlUp).Row + 1
        .Cells(letzte, 1).Value = Me.TextBox1
        .Cells(letzte, 2).Value = Me.TextBox2
        .Cells(letzte, 3).Value = Me.TextBox3
        .Cells(letzte, 4).Value = Me.TextBox4
        .Cells(letzte, 5).Value = Me.ComboBox1
        .Cells(letzte, 6).Value = Me.ComboBox2
        .Cells(letzte, 16).Value = Me.ComboBox3
    End With
End Sub

In diesem Beispiel wird die letzte Zeile korrekt ermittelt und die Werte aus den Benutzerformular-Elementen werden ohne Laufzeitfehler eingetragen.


Tipps für Profis

  • Verwende Debugging: Nutze die Debugging-Tools in Excel VBA, um den Code Schritt für Schritt auszuführen und den Fehler zu lokalisieren.

  • Datentypen beachten: Achte immer darauf, dass die Datentypen übereinstimmen. Verwende CStr, CInt oder CDbl, um Werte in den gewünschten Datentyp zu konvertieren.

  • Kommentare im Code: Kommentiere deinen Code gut, um anderen (oder dir selbst) in der Zukunft zu helfen, den Zweck der Variablen und Blöcke zu verstehen.


FAQ: Häufige Fragen

1. Was bedeutet Laufzeitfehler 13?
Laufzeitfehler 13 tritt auf, wenn in VBA ein Datentyp nicht mit dem erwarteten Datentyp übereinstimmt.

2. Wie kann ich Laufzeitfehler 13 beheben?
Überprüfe, ob alle Variablen korrekt deklariert sind und die Typen übereinstimmen. Vermeide die Verwendung von Application.Match, wenn du die Zeilennummer bereits hast.

3. Was ist der Unterschied zwischen String und Long in VBA?
String ist ein Datentyp für Zeichenfolgen (Text), während Long ein Datentyp für ganze Zahlen ist. Die Verwendung des falschen Typs kann Laufzeitfehler verursachen.

4. Wie kann ich sicherstellen, dass meine Variablen korrekt deklariert sind?
Füge Option Explicit zu Beginn des Moduls hinzu, um sicherzustellen, dass alle Variablen deklariert werden müssen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige