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.06.2004 11:55:47
Michael
Hallo zusammen,
ich habe ein großes Problem...
Beim Start meiner Exceldatei wird eine UserForm automatisch gestartet. Ich kann in der ersten Form eingaben machen und dann klicke ich auf einen Button (Unload Me UserForm2.Show) und dann wird die erste UF geschlossen und die Zweite geöffnet. Auch dort kann ich Eingaben machen. Wenn ich jetzt mit einem Button wieder zurück in die erste UF gehe und von dort wieder in die gerade ausgefüllte, dann bekomme ich immer den Laufzeitfehler 13!!!!
Gibt es dafür eine Lösung? Ich drehe echt durch bei diesem Fehler..... ;-)
Bitte helft mir!
Denke,
Michael S.
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Hier noch der Code der zweiten Userform
11.06.2004 12:09:54
Michael
Bei Private Sub CommandButton4_Click() >> wird die Zeile UserForm2.Show gelb angemarkert... ::::HIER DER VOLLSTÄNDIGE CODE::::: Option Explicit Dim UF As New CUserForm

Private Sub CommandButton1_Click()
UserForm4.Show
End Sub


Private Sub CommandButton2_Click()
UserForm6.Show
End Sub


Private Sub CommandButton3_Click()
Unload Me
UserForm1.Show
End Sub


Private Sub CommandButton4_Click()
Dim antWort
antWort = MsgBox("Aktualisieren?", vbYesNo)
If antWort = vbNo Then Exit Sub
Unload Me
UserForm2.Show
End Sub


Private Sub CommandButton5_Click()
Unload Me
UserForm5.Show
End Sub


Private Sub UserForm_Activate()
UF.Maximize ' UserForm maximieren
'UF.Minimize ' UserForm minimieren
UF.Caption = "Reisekostenabrechnung | Reiseverlauf"
End Sub

' von Textbox 2 bis 15 in A19:A32
' Reisetage

Private Sub UserForm_Initialize()
Application.Visible = False
TextBox2 = Sheets("Eingabe").[A19]
TextBox3 = Sheets("Eingabe").[A20]
TextBox4 = Sheets("Eingabe").[A21]
TextBox5 = Sheets("Eingabe").[A22]
TextBox6 = Sheets("Eingabe").[A23]
TextBox7 = Sheets("Eingabe").[A24]
TextBox8 = Sheets("Eingabe").[A25]
TextBox9 = Sheets("Eingabe").[A26]
TextBox10 = Sheets("Eingabe").[A27]
TextBox11 = Sheets("Eingabe").[A28]
TextBox12 = Sheets("Eingabe").[A29]
TextBox13 = Sheets("Eingabe").[A30]
TextBox14 = Sheets("Eingabe").[A31]
TextBox15 = Sheets("Eingabe").[A32]
' Landauswahl = False setzten
If TextBox2 = "" Then ComboBox1.Enabled = False
If TextBox3 = "" Then ComboBox2.Enabled = False
If TextBox4 = "" Then ComboBox3.Enabled = False
If TextBox5 = "" Then ComboBox4.Enabled = False
If TextBox6 = "" Then ComboBox5.Enabled = False
If TextBox7 = "" Then ComboBox6.Enabled = False
If TextBox8 = "" Then ComboBox7.Enabled = False
If TextBox9 = "" Then ComboBox8.Enabled = False
If TextBox10 = "" Then ComboBox9.Enabled = False
If TextBox11 = "" Then ComboBox10.Enabled = False
If TextBox12 = "" Then ComboBox11.Enabled = False
If TextBox13 = "" Then ComboBox12.Enabled = False
If TextBox14 = "" Then ComboBox13.Enabled = False
If TextBox15 = "" Then ComboBox14.Enabled = False
' Landauswahl setzen
ComboBox1.RowSource = "Eingabe!N4:N210"
ComboBox1.ControlSource = "Eingabe!b19"
ComboBox2.RowSource = "Eingabe!N4:N210"
ComboBox2.ControlSource = "Eingabe!b20"
ComboBox3.RowSource = "Eingabe!N4:N210"
ComboBox3.ControlSource = "Eingabe!b21"
ComboBox4.RowSource = "Eingabe!N4:N210"
ComboBox4.ControlSource = "Eingabe!b22"
ComboBox5.RowSource = "Eingabe!N4:N210"
ComboBox5.ControlSource = "Eingabe!b23"
ComboBox6.RowSource = "Eingabe!N4:N210"
ComboBox6.ControlSource = "Eingabe!b24"
ComboBox7.RowSource = "Eingabe!N4:N210"
ComboBox7.ControlSource = "Eingabe!b25"
ComboBox8.RowSource = "Eingabe!N4:N210"
ComboBox8.ControlSource = "Eingabe!b26"
ComboBox9.RowSource = "Eingabe!N4:N210"
ComboBox9.ControlSource = "Eingabe!b27"
ComboBox10.RowSource = "Eingabe!N4:N210"
ComboBox10.ControlSource = "Eingabe!b28"
ComboBox11.RowSource = "Eingabe!N4:N210"
ComboBox11.ControlSource = "Eingabe!b29"
ComboBox12.RowSource = "Eingabe!N4:N210"
ComboBox12.ControlSource = "Eingabe!b30"
ComboBox13.RowSource = "Eingabe!N4:N210"
ComboBox13.ControlSource = "Eingabe!b31"
ComboBox14.RowSource = "Eingabe!N4:N210"
ComboBox14.ControlSource = "Eingabe!b32"
'Datum anzeigen lassen
TextBox16 = Sheets("Eingabe").[C19]
TextBox17 = Sheets("Eingabe").[C20]
TextBox18 = Sheets("Eingabe").[C21]
TextBox19 = Sheets("Eingabe").[C22]
TextBox20 = Sheets("Eingabe").[C23]
TextBox21 = Sheets("Eingabe").[C24]
TextBox22 = Sheets("Eingabe").[C25]
TextBox23 = Sheets("Eingabe").[C26]
TextBox24 = Sheets("Eingabe").[C27]
TextBox25 = Sheets("Eingabe").[C28]
TextBox26 = Sheets("Eingabe").[C29]
TextBox27 = Sheets("Eingabe").[C30]
TextBox28 = Sheets("Eingabe").[C31]
TextBox29 = Sheets("Eingabe").[C32]
'Übernachtungs Art Hotel oder Privat
ComboBox15.RowSource = "Eingabe!J19:J22"
ComboBox15.ControlSource = "Eingabe!D19"
ComboBox16.RowSource = "Eingabe!J19:J22"
ComboBox16.ControlSource = "Eingabe!D20"
ComboBox17.RowSource = "Eingabe!J19:J22"
ComboBox17.ControlSource = "Eingabe!D21"
ComboBox18.RowSource = "Eingabe!J19:J22"
ComboBox18.ControlSource = "Eingabe!D22"
ComboBox19.RowSource = "Eingabe!J19:J22"
ComboBox19.ControlSource = "Eingabe!D23"
ComboBox20.RowSource = "Eingabe!J19:J22"
ComboBox20.ControlSource = "Eingabe!D24"
ComboBox21.RowSource = "Eingabe!J19:J22"
ComboBox21.ControlSource = "Eingabe!D25"
ComboBox22.RowSource = "Eingabe!J19:J22"
ComboBox22.ControlSource = "Eingabe!D26"
ComboBox23.RowSource = "Eingabe!J19:J22"
ComboBox23.ControlSource = "Eingabe!D27"
ComboBox24.RowSource = "Eingabe!J19:J22"
ComboBox24.ControlSource = "Eingabe!D28"
ComboBox25.RowSource = "Eingabe!J19:J22"
ComboBox25.ControlSource = "Eingabe!D29"
ComboBox26.RowSource = "Eingabe!J19:J22"
ComboBox26.ControlSource = "Eingabe!D30"
ComboBox27.RowSource = "Eingabe!J19:J22"
ComboBox27.ControlSource = "Eingabe!D31"
ComboBox28.RowSource = "Eingabe!J19:J22"
ComboBox28.ControlSource = "Eingabe!D32"
' Übernachtungsart = False setzten
If TextBox2 = "" Then ComboBox15.Enabled = False
If TextBox3 = "" Then ComboBox16.Enabled = False
If TextBox4 = "" Then ComboBox17.Enabled = False
If TextBox5 = "" Then ComboBox18.Enabled = False
If TextBox6 = "" Then ComboBox19.Enabled = False
If TextBox7 = "" Then ComboBox20.Enabled = False
If TextBox8 = "" Then ComboBox21.Enabled = False
If TextBox9 = "" Then ComboBox22.Enabled = False
If TextBox10 = "" Then ComboBox23.Enabled = False
If TextBox11 = "" Then ComboBox24.Enabled = False
If TextBox12 = "" Then ComboBox25.Enabled = False
If TextBox13 = "" Then ComboBox26.Enabled = False
If TextBox14 = "" Then ComboBox27.Enabled = False
If TextBox15 = "" Then ComboBox28.Enabled = False
'Tagessatzpauschale anzeigen lassen + Format ##.## "€"
TextBox30 = Format(Sheets("Eingabe").Range("E19"), "#,##0.00 €")
TextBox31 = Format(Sheets("Eingabe").Range("E20"), "#,##0.00 €")
TextBox32 = Format(Sheets("Eingabe").Range("E21"), "#,##0.00 €")
TextBox33 = Format(Sheets("Eingabe").Range("E22"), "#,##0.00 €")
TextBox34 = Format(Sheets("Eingabe").Range("E23"), "#,##0.00 €")
TextBox35 = Format(Sheets("Eingabe").Range("E24"), "#,##0.00 €")
TextBox36 = Format(Sheets("Eingabe").Range("E25"), "#,##0.00 €")
TextBox37 = Format(Sheets("Eingabe").Range("E26"), "#,##0.00 €")
TextBox38 = Format(Sheets("Eingabe").Range("E27"), "#,##0.00 €")
TextBox39 = Format(Sheets("Eingabe").Range("E28"), "#,##0.00 €")
TextBox40 = Format(Sheets("Eingabe").Range("E29"), "#,##0.00 €")
TextBox41 = Format(Sheets("Eingabe").Range("E30"), "#,##0.00 €")
TextBox42 = Format(Sheets("Eingabe").Range("E31"), "#,##0.00 €")
TextBox43 = Format(Sheets("Eingabe").Range("E32"), "#,##0.00 €")
'Pauschal 50% anzeigen lassen + Format ##.## "€"
TextBox44 = Format(Sheets("Eingabe").Range("F19"), "#,##0.00 €")
TextBox45 = Format(Sheets("Eingabe").Range("F20"), "#,##0.00 €")
TextBox46 = Format(Sheets("Eingabe").Range("F21"), "#,##0.00 €")
TextBox47 = Format(Sheets("Eingabe").Range("F22"), "#,##0.00 €")
TextBox48 = Format(Sheets("Eingabe").Range("F23"), "#,##0.00 €")
TextBox49 = Format(Sheets("Eingabe").Range("F24"), "#,##0.00 €")
TextBox50 = Format(Sheets("Eingabe").Range("F25"), "#,##0.00 €")
TextBox51 = Format(Sheets("Eingabe").Range("F26"), "#,##0.00 €")
TextBox52 = Format(Sheets("Eingabe").Range("F27"), "#,##0.00 €")
TextBox53 = Format(Sheets("Eingabe").Range("F28"), "#,##0.00 €")
TextBox54 = Format(Sheets("Eingabe").Range("F29"), "#,##0.00 €")
TextBox55 = Format(Sheets("Eingabe").Range("F30"), "#,##0.00 €")
TextBox56 = Format(Sheets("Eingabe").Range("F31"), "#,##0.00 €")
TextBox57 = Format(Sheets("Eingabe").Range("F32"), "#,##0.00 €")
'abzgl. Frühstück anzeigen lassen + Format ##.## "€"
TextBox58 = Format(Sheets("Eingabe").Range("G19"), "#,##0.00 €")
TextBox59 = Format(Sheets("Eingabe").Range("G20"), "#,##0.00 €")
TextBox60 = Format(Sheets("Eingabe").Range("G21"), "#,##0.00 €")
TextBox61 = Format(Sheets("Eingabe").Range("G22"), "#,##0.00 €")
TextBox62 = Format(Sheets("Eingabe").Range("G23"), "#,##0.00 €")
TextBox63 = Format(Sheets("Eingabe").Range("G24"), "#,##0.00 €")
TextBox64 = Format(Sheets("Eingabe").Range("G25"), "#,##0.00 €")
TextBox65 = Format(Sheets("Eingabe").Range("G26"), "#,##0.00 €")
TextBox66 = Format(Sheets("Eingabe").Range("G27"), "#,##0.00 €")
TextBox67 = Format(Sheets("Eingabe").Range("G28"), "#,##0.00 €")
TextBox68 = Format(Sheets("Eingabe").Range("G29"), "#,##0.00 €")
TextBox69 = Format(Sheets("Eingabe").Range("G30"), "#,##0.00 €")
TextBox70 = Format(Sheets("Eingabe").Range("G31"), "#,##0.00 €")
TextBox71 = Format(Sheets("Eingabe").Range("G32"), "#,##0.00 €")
'Gesamt anzeigen lassen + Format ##.## "€"
TextBox72 = Format(Sheets("Eingabe").Range("H19"), "#,##0.00 €")
TextBox73 = Format(Sheets("Eingabe").Range("H20"), "#,##0.00 €")
TextBox74 = Format(Sheets("Eingabe").Range("H21"), "#,##0.00 €")
TextBox75 = Format(Sheets("Eingabe").Range("H22"), "#,##0.00 €")
TextBox76 = Format(Sheets("Eingabe").Range("H23"), "#,##0.00 €")
TextBox77 = Format(Sheets("Eingabe").Range("H24"), "#,##0.00 €")
TextBox78 = Format(Sheets("Eingabe").Range("H25"), "#,##0.00 €")
TextBox79 = Format(Sheets("Eingabe").Range("H26"), "#,##0.00 €")
TextBox80 = Format(Sheets("Eingabe").Range("H27"), "#,##0.00 €")
TextBox81 = Format(Sheets("Eingabe").Range("H28"), "#,##0.00 €")
TextBox82 = Format(Sheets("Eingabe").Range("H29"), "#,##0.00 €")
TextBox83 = Format(Sheets("Eingabe").Range("H30"), "#,##0.00 €")
TextBox84 = Format(Sheets("Eingabe").Range("H31"), "#,##0.00 €")
TextBox85 = Format(Sheets("Eingabe").Range("H32"), "#,##0.00 €")
'Übernachtungspauschale anzeigen lassen + Format ##.## "€"
TextBox87 = Format(Sheets("Eingabe").Range("I19"), "#,##0.00 €")
TextBox88 = Format(Sheets("Eingabe").Range("I20"), "#,##0.00 €")
TextBox89 = Format(Sheets("Eingabe").Range("I21"), "#,##0.00 €")
TextBox90 = Format(Sheets("Eingabe").Range("I22"), "#,##0.00 €")
TextBox91 = Format(Sheets("Eingabe").Range("I23"), "#,##0.00 €")
TextBox92 = Format(Sheets("Eingabe").Range("I24"), "#,##0.00 €")
TextBox93 = Format(Sheets("Eingabe").Range("I25"), "#,##0.00 €")
TextBox94 = Format(Sheets("Eingabe").Range("I26"), "#,##0.00 €")
TextBox95 = Format(Sheets("Eingabe").Range("I27"), "#,##0.00 €")
TextBox96 = Format(Sheets("Eingabe").Range("I28"), "#,##0.00 €")
TextBox97 = Format(Sheets("Eingabe").Range("I29"), "#,##0.00 €")
TextBox98 = Format(Sheets("Eingabe").Range("I30"), "#,##0.00 €")
TextBox99 = Format(Sheets("Eingabe").Range("I31"), "#,##0.00 €")
TextBox100 = Format(Sheets("Eingabe").Range("I32"), "#,##0.00 €")
'Summe anzeigen
TextBox86 = Format(Sheets("Eingabe").Range("I34"), "#,##0.00 €")
With UF
.MaxButton = True
.MinButton = True
.BorderStyle = xlFest
.Create Me
End With
End Sub

'Schließen über "X" nicht möglich...

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
Cancel = 1
MsgBox "Bitte verlassen Sie die Reisekostenabrechnung über den Button >beenden<.", _
vbOKOnly + vbInformation, "Bitte auf >beenden< klicken."
End If
End Sub

Anzeige
AW: Hier noch der Code der zweiten Userform
11.06.2004 13:13:58
Matthias
Hallo Michael,
wenn du den Inhalt des ersten UF noch brauchst, musst du es mit Me.Hide verlassen. Dann sind bei der Rückkehr auf das UF1 noch alle Werte da.
Wrs's das?
Gruß Matthias
AW: Hier noch der Code der zweiten Userform
14.06.2004 08:55:40
Michael
Erstmal Danke!
Nur nochmal zum Verständnis:
Ich bin in UF2 mache dort Eingaben und habe einen Button >> . Wenn man da drauf klickt, dann werden in anderen Textbox-Feldern Werte angezeigt. Ich löse das wie folgt:

Private Sub CommandButton4_Click()
Unload Me
UserForm2.Show
End Sub

ICH BEFINDE MICH IN UF2 schliesse die Form und lasse die wieder neu starten. Wenn ich das mit Me Hide mache:

Private Sub CommandButton4_Click()
Me.Hide
UserForm2.Show
End Sub

...dann schliesst sich die UserFrom2 wird aber nicht wieder geöffnet.
Hast Du noch eine andere Idee?
Gruß,
Michael
Anzeige
AW: Hier noch der Code der zweiten Userform
14.06.2004 16:21:06
Matthias
Hallo Michael,
Code1:
Me.Hide
UserForm2.Show
Es wird beim Show-Befehl nur der UserForm_Activate()-Prozedur aufgerufen
Code2:
Unload Me
UserForm2.Show
Es wird beim Show-Befehl die UserForm_Initialize() und die UserForm_Activate()-Prozedur aufgerufen.
Vielleicht kannst Du das Problem lösen, indem Du Code ins Activate-Ereignis verschiebst.
Gruß Matthias
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

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


Schritt-für-Schritt-Anleitung

  1. Identifizierung des Problems: Der Laufzeitfehler '13' tritt häufig auf, wenn unterschiedliche Datentypen miteinander verglichen oder verarbeitet werden. Achte darauf, dass die Variablen in deinem Code die richtigen Datentypen haben.

  2. Überprüfung des Codes: Überprüfe deinen VBA-Code, insbesondere die Zeilen, in denen Du UserForms lädst oder entlädst. Zum Beispiel:

    Private Sub CommandButton4_Click()
       Unload Me
       UserForm2.Show
    End Sub

    Hier könnte der Fehler auftreten, wenn UserForm2 nicht korrekt initialisiert ist.

  3. Verwendung von Me.Hide: Um Daten in der ersten UserForm zu speichern, anstatt sie mit Unload zu schließen, kannst du Me.Hide verwenden. Dies verhindert, dass die Werte verloren gehen, wenn du zu UserForm2 wechselst:

    Private Sub CommandButton4_Click()
       Me.Hide
       UserForm2.Show
    End Sub
  4. Testen der UserForms: Führe die Anwendung aus und teste die Interaktion zwischen den UserForms. Achte dabei besonders auf die Initialisierung der Formulare.


Häufige Fehler und Lösungen

  • Laufzeitfehler 13 bei UserForm-Anzeige: Dies kann passieren, wenn Du versuchst, eine UserForm zu zeigen, ohne dass die Initialisierungsroutine korrekt ausgeführt wurde. Beispielsweise, wenn Du Unload Me verwendest, um eine Form zu schließen, ohne sicherzustellen, dass alle Variablen ordnungsgemäß gesetzt sind.

  • Typen unverträglich: Wenn Du versuchst, einen String in einen Integer oder einen anderen Datentyp zu konvertieren, kann dies zu einem Laufzeitfehler führen. Überprüfe alle Zuweisungen und Konvertierungen.


Alternative Methoden

  • Verwende Option Explicit: Diese Direktive zwingt dich, alle Variablen zu deklarieren. Dies hilft, Tippfehler und ungenaue Datentypen zu vermeiden, die oft den Fehler "Typen unverträglich" verursachen.

  • Debugging: Setze Breakpoints in deinem Code, um zu sehen, wo genau der Fehler auftritt. Überprüfe die Werte der Variablen im Debugger.


Praktische Beispiele

Hier ist ein Beispiel, wie Du den Fehler in einem realen Szenario vermeiden kannst:

Private Sub CommandButton1_Click()
    Dim eingabe As Variant
    eingabe = TextBox1.Value

    ' Überprüfung des Datentyps
    If Not IsNumeric(eingabe) Then
        MsgBox "Bitte eine Zahl eingeben!"
        Exit Sub
    End If

    ' Weiterverarbeitung
    MsgBox "Eingegebene Zahl: " & eingabe
End Sub

In diesem Beispiel wird sichergestellt, dass die Eingabe in TextBox1 eine Zahl ist, bevor sie weiterverarbeitet wird.


Tipps für Profis

  • Verwende Typüberprüfungsfunktionen: Funktionen wie IsNumeric, IsEmpty oder TypeName können dir helfen, den Datentyp vor der Verarbeitung zu überprüfen und Laufzeitfehler zu vermeiden.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deinem Code:

    On Error GoTo Fehlerbehandlung
    ' Dein Code hier
    Exit Sub
    
    Fehlerbehandlung:
    MsgBox "Fehler: " & Err.Description

FAQ: Häufige Fragen

1. Was bedeutet der Laufzeitfehler 13? Der Laufzeitfehler 13 tritt auf, wenn in VBA unterschiedliche Datentypen verwendet werden, die nicht kompatibel sind.

2. Wie kann ich den Fehler "typen unverträglich" in VBA beheben? Überprüfe die Typen Deiner Variablen und stelle sicher, dass alle Zuweisungen und Vergleiche mit kompatiblen Datentypen durchgeführt werden.

3. Warum funktioniert Unload Me nicht wie erwartet? Unload Me entfernt die UserForm aus dem Speicher, wodurch alle Werte verloren gehen. Verwende stattdessen Me.Hide, um die Form unsichtbar zu machen, ohne sie aus dem Speicher zu entfernen.

4. Gibt es eine Möglichkeit, den Fehler vorherzusagen? Ja, durch die Verwendung von Option Explicit und das regelmäßige Testen des Codes kann die Wahrscheinlichkeit von Laufzeitfehlern verringert werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige