Laufzeitenfehler 13-komme nicht mehr weiter!

Hallo liebe Experten,

habe ein rel. großes Problem und komme nicht weiter. Habe eine Excel Tabelle mit Formularen aufgebaut von den Zahlen in die entsprechenden Zellen eingefügt werden müssen. Mein Code:

Private Sub CommandButton3_Click()
Sheets(„Eingabemasken“).Activate
Cells(332, 3).NumberFormat = „#,###0.000“
Cells(333, 3).NumberFormat = „#,###0.000“
Cells(334, 3).NumberFormat = „#,###0.000“
Cells(335, 3).NumberFormat = „#,###0.000“
Cells(336, 3).NumberFormat = „#,###0.000“
Cells(337, 3).NumberFormat = „#,###0.000“
Cells(338, 3).NumberFormat = „#,###0.000“
Cells(339, 3).NumberFormat = „#,###0.000“
Cells(340, 3).NumberFormat = „#,###0.000“
Cells(341, 3).NumberFormat = „#,###0.000“
Cells(342, 3).NumberFormat = „#,###0.000“
Cells(343, 3).NumberFormat = „#,###0.000“
Cells(344, 3).NumberFormat = „#,###0.000“
Cells(345, 3).NumberFormat = „#,###0.000“
Cells(346, 3).NumberFormat = „#,###0.000“
Cells(347, 3).NumberFormat = „#,###0.000“
Cells(348, 3).NumberFormat = „#,###0.000“
Cells(349, 3).NumberFormat = „#,###0.000“
Cells(350, 3).NumberFormat = „#,###0.000“
Cells(352, 3).NumberFormat = „#,###0.000“
Cells(353, 3).NumberFormat = „#,###0.000“
Cells(355, 3).NumberFormat = „#,###0.000“
Cells(356, 3).NumberFormat = „#,###0.000“
Cells(357, 3).NumberFormat = „#,###0.000“
Cells(358, 3).NumberFormat = „#,###0.000“
Cells(360, 3).NumberFormat = „#,###0.000“
Cells(361, 3).NumberFormat = „#,###0.000“
Cells(364, 3).NumberFormat = „#,###0.000“
Cells(365, 3).NumberFormat = „#,###0.000“
Cells(367, 3).NumberFormat = „#,###0.000“
Cells(370, 3).NumberFormat = „#,###0.000“
Cells(371, 3).NumberFormat = „#,###0.000“
Cells(332, 3).Value = CDbl(TextBox1.Value)
Cells(333, 3).Value = CDbl(TextBox2.Value)
Cells(334, 3).Value = CDbl(TextBox3.Value)
Cells(335, 3).Value = CDbl(TextBox4.Value)
Cells(336, 3).Value = CDbl(TextBox5.Value)
Cells(337, 3).Value = CDbl(TextBox6.Value)
Cells(338, 3).Value = CDbl(TextBox7.Value)
Cells(339, 3).Value = CDbl(TextBox8.Value)
Cells(340, 3).Value = CDbl(TextBox9.Value)
Cells(341, 3).Value = CDbl(TextBox10.Value)
Cells(342, 3).Value = CDbl(TextBox11.Value)
Cells(343, 3).Value = CDbl(TextBox12.Value)
Cells(344, 3).Value = CDbl(TextBox13.Value)
Cells(345, 3).Value = CDbl(TextBox14.Value)
Cells(346, 3).Value = CDbl(TextBox15.Value)
Cells(347, 3).Value = CDbl(TextBox16.Value)
Cells(348, 3).Value = CDbl(TextBox17.Value)
Cells(349, 3).Value = CDbl(TextBox18.Value)
Cells(350, 3).Value = CDbl(TextBox19.Value)
Cells(352, 3).Value = CDbl(TextBox20.Value)
Cells(353, 3).Value = CDbl(TextBox21.Value)
Cells(355, 3).Value = CDbl(TextBox22.Value)
Cells(356, 3).Value = CDbl(TextBox23.Value)
Cells(357, 3).Value = CDbl(TextBox24.Value)
Cells(358, 3).Value = CDbl(TextBox25.Value)
Cells(360, 3).Value = CDbl(TextBox26.Value)
Cells(361, 3).Value = CDbl(TextBox27.Value)
Cells(364, 3).Value = CDbl(TextBox29.Value)
Cells(365, 3).Value = CDbl(TextBox30.Value)
Cells(367, 3).Value = CDbl(TextBox31.Value)
Cells(370, 3).Value = CDbl(TextBox33.Value)
Cells(371, 3).Value = CDbl(TextBox34.Value)

'Formular zurücksetzen
Dim tb As Object

With UserForm8
For Each tb In .Controls
If TypeName(tb) = „TextBox“ Then tb.Text = „“
Next tb

End With
End Sub

Beim Ausführen bekomme ich einen Laufzeitenfehler 13. Habe mit Leuten gesprochen, die haben mir gesagt, dass es an CDbl liegt und vorgeschlagen"On Error Resume Next " einzufügen. Doch das ist doch irgendwie nicht die Lösung. Ich habe CDbl mit Absicht hingetan, damit eine Zahl auch als eine Zahl und nicht als Text in Excel eingefügt wird und jetzt soll ich es umgehen?
Was sagt ihr? ES ist sehr wichtig.
Da ich nicht gerade der VBA-Profi bin, möchte ich euch bitten wenn es geht die Lösung an meinem Beispiel anzuwenden, das würde mir echt helfen!
Man hat mir vorgeschlagen folgendes zu benutzen, doch ich weiß leider nicht wie ich damit umgehen soll (HILFE):

Private Sub Text1_Change()
If Not IsNumeric(Text1.Text) Then
MsgBox „Das Feld darf nur Zahlen enthalten!“, vbCritical
End If
End Sub

Ich danke euch riesig
Gruß
Igor

Hi Igor,
Dein Code ist schrecklich ,-). Die Formatierung Deines Zielbereiches kannst folgendermaßen abkürzen:

Private Sub CommandButton3_Click()
Sheets(„Eingabemasken“).Activate
For i = 332 To 371
Cells(i, 3).NumberFormat = „#,###0.000“
Next i

Das mit den Textboxen solltest Du schnell wieder vergessen. Du kannst sie nur direkt ansprechen: TextBox1.Value. Für eine saubere Programierung mit Schleifen bräuchten sie einen Index: TextBox(i).Value. No way!

Schmeiss das Formular weg und lass die Daten direkt in die Zellen schreiben. Wenn Du Texteinträge verwerfen möchtest, lässt Du über einen Button im Sheet die Eingaben überprüfen:

Private Sub CommandButton3_Click()
Sheets(„Eingabemasken“).Activate
For i = 332 To 371
If Cells(i, 3).Value „“ Then
If Not IsNumeric(Cells(i, 3).Value) Then
Cells(i, 3).Value = „“
End If
End If
Cells(i, 3).NumberFormat = „#,###0.000“
Next i

  • Für jede Zelle im Eingabebereich
  • Steht etwas in der Zelle?
  • ja: ist der Wert keine Zahl?
  • ja: Wert löschen
  • nein: nix machen
  • nein: nix machen
  • Zelle formatieren

Du kannst „“ auch durch 0 ersetzen.
Wenn Du mit Formulareingaben arbeiten möchtest, versuch es mit Access.

Gruß
Dom

Hallo Igor,

ich mal versucht deine Prozedur entsprechend anzupassen.
Dabei wird das Eintragen des Textboxinhalts in die Zellen in einer Subroutine abgearbeitet mit entsprechenden Prüfungen des Textboxinhalts.

Die Formatierungen der Eingabezelle kannst du eigentlich aus der Prozedur weglassen. Es reicht aus, wenn du die Zellen einmalig in der Tabelle formatierst.

Generell ist es besser den Elementen in einem Formular aussagekräftigere Namen zu geben, statt die automatisch vergebenen Standardnamen zu verwendne. Geht im VBA-Editor wenn du bei der Formularerstellung das Eigenschaftenfenster einblendest. Der mit dem Formular verbundenen Code wird dann meist leichter lesbar/nachvollziehbar.

Gruß
Franz

Hier der angepasste Code, die Prüfroutinen vor dem Eintragen des Wertes in die Zelle muss du ggf. noch etwas anpassen.

Private Sub CommandButton1\_Click()
'Private Sub CommandButton3\_Click()
 Sheets("Eingabemasken").Activate
 With Sheets("Eingabemasken")
 'Eingabe Zellen formatieren
 .Range(.Cells(332, 3), .Cells(350, 3)).NumberFormat = "#,###0.000"
 .Range(.Cells(352, 3), .Cells(353, 3)).NumberFormat = "#,###0.000"
 .Range(.Cells(355, 3), .Cells(358, 3)).NumberFormat = "#,###0.000"
 .Range(.Cells(360, 3), .Cells(361, 3)).NumberFormat = "#,###0.000"
 .Range(.Cells(364, 3), .Cells(365, 3)).NumberFormat = "#,###0.000"
 .Cells(367, 3).NumberFormat = "#,###0.000"
 .Range(.Cells(370, 3), .Cells(371, 3)).NumberFormat = "#,###0.000"
 'Werte aus den Textboxen in die Zellen übertragen
 Call Wert\_eintragen(.Cells(332, 3), TextBox1)
 Call Wert\_eintragen(.Cells(333, 3), TextBox2)
 Call Wert\_eintragen(.Cells(334, 3), TextBox3)
 Call Wert\_eintragen(.Cells(335, 3), TextBox4)
 Call Wert\_eintragen(.Cells(336, 3), TextBox5)
 Call Wert\_eintragen(.Cells(337, 3), TextBox6)
 Call Wert\_eintragen(.Cells(338, 3), TextBox7)
 Call Wert\_eintragen(.Cells(339, 3), TextBox8)
 Call Wert\_eintragen(.Cells(340, 3), TextBox9)
 Call Wert\_eintragen(.Cells(341, 3), TextBox10)
 Call Wert\_eintragen(.Cells(342, 3), TextBox11)
 Call Wert\_eintragen(.Cells(343, 3), TextBox12)
 Call Wert\_eintragen(.Cells(344, 3), TextBox13)
 Call Wert\_eintragen(.Cells(345, 3), TextBox14)
 Call Wert\_eintragen(.Cells(346, 3), TextBox15)
 Call Wert\_eintragen(.Cells(347, 3), TextBox16)
 Call Wert\_eintragen(.Cells(348, 3), TextBox17)
 Call Wert\_eintragen(.Cells(349, 3), TextBox18)
 Call Wert\_eintragen(.Cells(350, 3), TextBox19)
 Call Wert\_eintragen(.Cells(352, 3), TextBox20)
 Call Wert\_eintragen(.Cells(353, 3), TextBox21)
 Call Wert\_eintragen(.Cells(355, 3), TextBox22)
 Call Wert\_eintragen(.Cells(356, 3), TextBox23)
 Call Wert\_eintragen(.Cells(357, 3), TextBox24)
 Call Wert\_eintragen(.Cells(358, 3), TextBox25)
 Call Wert\_eintragen(.Cells(360, 3), TextBox26)
 Call Wert\_eintragen(.Cells(361, 3), TextBox27)
 Call Wert\_eintragen(.Cells(364, 3), TextBox29)
 Call Wert\_eintragen(.Cells(365, 3), TextBox30)
 Call Wert\_eintragen(.Cells(367, 3), TextBox31)
 Call Wert\_eintragen(.Cells(370, 3), TextBox33)
 Call Wert\_eintragen(.Cells(371, 3), TextBox34)
 End With

'Formular zurücksetzen
 Dim tb As Object

 With UserForm8
 For Each tb In .Controls
 If TypeName(tb) = "TextBox" Then tb.Text = ""
 Next tb
 End With
End Sub

Private Sub Wert\_eintragen(Zelle As Range, ByVal Box As Control)
 'Prüft Textboxinhalt und trägt Wert in Zelle ein
Inhaltspruefung:
 If Box.Text = "" Then
 'Textbox hat keinen Inhalt
 Zelle.ClearContents 'Alternativ: Zelle.Value = 0
 Else
 If Not IsNumeric(Box.Text) Then
 Box.Text = InputBox("Das Feld '" & Box.Name & "' enthält keine Zahl!" & vbLf & vbLf \_
 & "Bitte Eingabe korrigieren", "Textbox-Inhaltskorrektur", Box.Text)
 GoTo Inhaltspruefung
 Else
 Zelle.Value = CDbl(Box.Text)
 End If
 End If
End Sub