Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1772to1776
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Laufzeitfehler '13' Typen unverträglich

Laufzeitfehler '13' Typen unverträglich
28.07.2020 16:39:43
Daniel
Hallo,
ich habe dieses Excel-Programm so vom Vorgänger ohne großartige Vba-Kenntnisse übernommen, entsprechend bin ich für Lösungsvorschläge sehr dankbar.
Bei dem Programm werden (Mess-)Aufträge über ein Formular eingelesen in eine Excel-Datenbank und können dort über ein Formular bearbeitet bzw. abgeschlossen werden. Außerdem erfolgt eine Auswertung über diverse Pivots.
Anschließend der Code des Subs wo der Fehler Auftritt: hierbei geht es um das Schreiben einer txt-Datei aus der Formulareingabe fett: die Zeile die der Debugger als Hort des Fehlers betrachtet:


Private Sub cb_create_Click()
Dim e As Integer
Dim Zeile As Integer
e = 0 'fehlerzähler
' Überprüfung auf Plausibiliät
If IsEmpty(newOrder.T_Material.Value) Then
MsgBox "Bitte Materialnummer nach dem Muster befüllen."
e = 1
End If
If Len(newOrder.T_Material.Text)  10 Then
MsgBox "Bitte 10stellige Materialnummer eingeben."
e = 1
End If
If IsEmpty(newOrder.T_FA.Value) Then
MsgBox "Bitte Fertigungsauftrag befüllen."
e = 1
End If
If e = 0 Then ' *** Programm ausführen
' ******* Kennwortschutz für das Arbeitsblatt
Sheets("Auftrag").Unprotect Password:=""
' ******* Anlegen der Daten
' Auftragsnummer = 1 = Range("A" & Spalte).Value = "#" '1
    Dim nr As String 
nr = txt_Auftrag("laden", Dateipfad) + 1
Call txt_Auftrag("schreiben", Dateipfad, CStr(nr))
MsgBox "Ihr Messauftrag hat die Nr. " & nr & vbCrLf & vbCrLf & vbCrLf & _
"Bitte schreiben Sie die Nummer mit einem Wachsstift/Edding auf das Messteil  _
sowie den Warenbegleitschein und legen beide zusammen im Regal ab." & vbCrLf & vbCrLf & _
"Vielen Dank!"
'leere zeilen löschen
For Zeile = 1 To 28
Worksheets("Auftrag").Cells(2, Zeile) = ""
Next Zeile
Worksheets("Auftrag").Cells(2, 1).Value = nr
' Material = 2 = Range("B" & Spalte).Value = "Material"
Worksheets("Auftrag").Cells(2, 2).Value = newOrder.T_Material.Value
' Nest = 3 = Range("C" & Spalte).Value = "Nestkennzeichnung"
Worksheets("Auftrag").Cells(2, 3).Value = newOrder.Combo_Nest.Value
' Auftragsnummer 4 = Range("D" & Spalte).Value = "FA NR"
Worksheets("Auftrag").Cells(2, 4).Value = newOrder.T_FA.Value
' Auftragsdatum 5 = Range("E" & Spalte).Value = "Fertigungsdatum"
Worksheets("Auftrag").Cells(2, 5).Value = newOrder.T_DATE.Value & " " & newOrder. _
T_Time.Value
' Optionsbox Werk 6 = Range("F" & Spalte).Value = "Art"
If O_ART_Serie = True Then
Worksheets("Auftrag").Cells(2, 6).Value = "Serie"
ElseIf O_ART_AUSPROBE Then
Worksheets("Auftrag").Cells(2, 6).Value = "Ausprobe"
Else
Worksheets("Auftrag").Cells(2, 6).Value = "Sonstiges"
End If
' Auftragsdatum 7 = Range("G" & Spalte).Value = "Bemerkung"
Worksheets("Auftrag").Cells(2, 7).Value = newOrder.T_Note.Value
' Optionsbox Werk 8 = Range("H" & Spalte).Value = "Anlieferung"
If O_WERK1 = True Then
Worksheets("Auftrag").Cells(2, 8).Value = "1100"
ElseIf O_WERK2 = True Then
Worksheets("Auftrag").Cells(2, 8).Value = "1020"
Else
Worksheets("Auftrag").Cells(2, 8).Value = "EagleEye"
End If
' Prio 9 = Range("I" & Spalte).Value = "Prio"
Worksheets("Auftrag").Cells(2, 9).Value = "3"
' Erstelldatum 10 = Range("J" & Spalte).Value = "Auftragsdatum" '10
Worksheets("Auftrag").Cells(2, 10).Value = Format(Now, "dd.mm.yyyy hh:mm")
' Kunde 11 = Range("K" & Spalte).Value = "Kunde"
Worksheets("Auftrag").Cells(2, 11).Value = "Kunde"
' Bearbeiter 12 = Range("L" & Spalte).Value = "Messtechniker"
Worksheets("Auftrag").Cells(2, 12).Value = "Messtechniker"
' Anlage 13 = Range("M" & Spalte).Value = "Messmaschine"
Worksheets("Auftrag").Cells(2, 13).Value = "Messmaschine"
' Programm 14 = Range("N" & Spalte).Value = "Messprogramm"
Worksheets("Auftrag").Cells(2, 14).Value = "Messprogramm Nr"
' Messzeit 15 = Range("O" & Spalte).Value = "T_Messen"
Worksheets("Auftrag").Cells(2, 15).Value = "1"
' Entscheidung / Status 16 = Range("P" & Spalte).Value = "Entscheidung"
Worksheets("Auftrag").Cells(2, 16).Value = "offen"
' Ergebnistext 17 = Range("Q" & Spalte).Value = "Ergebnistext"
Worksheets("Auftrag").Cells(2, 17).Value = "Bemerkung"
' Messdatum 18 = Range("R" & Spalte).Value = "Messdatum"
Worksheets("Auftrag").Cells(2, 18).Value = "Messdatum"
' Priobonus 19 = Range("S" & Spalte).Value = "Bonus"
Worksheets("Auftrag").Cells(2, 19).Value = "0"
' Reihenfolge 20 = Range("T" & Spalte).Value = "Reihenfolge" '20
Worksheets("Auftrag").Cells(2, 20).Value = Mid(auftragsNR, 5, 6)
' Wartezeit 21 = Range("U" & Spalte).Value = "Wartezeit"
Worksheets("Auftrag").Cells(2, 21).Value = "0"
' Gesamtdauer 22 = Range("V" & Spalte).Value = "Gesamtdauer"
Worksheets("Auftrag").Cells(2, 22).Value = "0"
' Ersteller 23 = Range("W" & Spalte).Value = "Ersteller"
Worksheets("Auftrag").Cells(2, 23).Value = Application.UserName
' ID 24 = Range("X" & Spalte).Value = "U-ID"
Worksheets("Auftrag").Cells(2, 24).Value = VBA.Environ("Username")
' Rechnername 25 = Range("Y" & Spalte).Value = "Rechnername"
Worksheets("Auftrag").Cells(2, 25).Value = VBA.Environ("ComputerName")
' Fertigungsauftragspos 26 = Range("Z" & Spalte).Value = "FAB-FAE"
Worksheets("Auftrag").Cells(2, 26).Value = newOrder.Combo_FA.Value
' Zeichnungsstand 27 = Range("AA" & Spalte).Value = "Zeichnungsstand"
Worksheets("Auftrag").Cells(2, 27).Value = newOrder.T_Zeichnung.Value
' Rüstzeit 28 =  Range("AB" & Spalte).Value = "T_Rüsten" ' 28
Worksheets("Auftrag").Cells(2, 28).Value = "1"
' ******** Speichern, Werte in txt **************
Call txt_schreiben((nr), Dateipfad)
' ******* Kennwortschutz für das Arbeitsblatt
Sheets("Auftrag").Protect Password:=""
'Fenster schließen
Unload newOrder
End If
End Sub


Ich habe bereits versucht "Dim nr" auf den Datentyp Long abzuändern da es eine 6stellige Nummer ist. Macht jedoch keinen Unterschied.
"nr = txt_Auftrag("laden", Dateipfad) + 1"
hier habe ich versucht die Variablen typenunabhängig zu machen sprich nochmal einzeln einzuklammern.
Dateipfad ist im Übrigen ebenfalls als String definiert
Der Dateipfad der Datenbank wird auch nicht gefunden.
Vielen vielen Dank.

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

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler '13' Typen unverträglich
28.07.2020 20:35:34
Matthias
Moin!
Kannst du mal den Code zur Prozedur/Funktion "txt_Auftrag" zeigen. Dort scheint ja der Fehler aufzutauchen. Da müsste man schauen, was im Kopf steht und wie das dann verarbeitet wird.
VG
AW: Laufzeitfehler '13' Typen unverträglich
29.07.2020 12:54:47
Daniel
Bitteschön, und danke für die schnelle Antwort, hatte ich so nicht erwartet :)

Function txt_Auftrag(Anweisung As String, Dateipfad As String, Optional nr As String) As String
'JN-200107 Liest und schreibt die Auftragsnummer in die auftrag.txt - Datei ein. Prüft dabei  _
auch auf validität
Dim Auftrag As String
Dim Inhalt As String
Dim sDateYYWW As String
'Fehlermarke einfügen
On Error GoTo Fehlermarke
'Zielort und Datei
Auftrag = Dateipfad & "auftrag\auftrag.txt"
If Anweisung = "laden" Then
Open Auftrag For Input As #1 'auftrag.txt öffnen
Line Input #1, Inhalt 'Auftragsnummer auslesen
sDateYYWW = CStr(Format(Now, "yyww")) 'Das Jahr und Kalenderwoche in String übergeben
If CInt(Format(Now, "ww"))  CInt(Mid(Inhalt, 1, 4)) Then 'Prüfe Auftragsnummer anhand des  _
aktuellen Datums auf Validität
Inhalt = (sDateYYWW & "000")
End If
txt_Auftrag = Inhalt
'Quelldatei schließen
Close #1
Exit Function
ElseIf Anweisung = "schreiben" Then
'Zieldatei öffnen
Open Auftrag For Output As #1
'Informationen in Zieldatei einfügen
'Werte aus Tabele in das txt eintragen
Print #1, nr
'Zieldatei schließen
Close #1
Exit Function
End If
Fehlermarke:
MsgBox Err.Description
End Function

Anzeige
AW: Laufzeitfehler '13' Typen unverträglich
30.07.2020 13:37:02
Matthias
Moin!
Kannst du noch ein paar Hinweise zu dem Inhalt der Textdatei geben, wenn der Fehler auftritt!? Da sollte ja eigentlich nur eine Zahl drin stehen. Habe mal getestet. Wenn die Datei leer ist, tritt ein Fehler auf. Genauso, wenn das was anderes als erwartet steht, bspw. ein Text und keine Zahlen oder zu kurze Zahlen. Kommt vor dem Fehler noch eine MsgBox (Nachrichtenfenster )? Ansonsten sollte vom Code eigentlich alles passen.
Lass nr as string deklariert. Das ist ja auch der Rückgabewert der Funktion.
Man könnte evtl. noch was am Code ändern, dazu müsste man halt aber wissen, was da drin steht.
VG
Anzeige
AW: Laufzeitfehler '13' Typen unverträglich
31.07.2020 10:17:35
fcs
Hallo Daniel,
Mathias hat ja schon geschrieben, wann es Probleme gibt.
In diesen Fällen gibt die Fuction als Wert einen Leerstring zurück und Excel kann Texte und Zahlen in dieser Zeile nicht addieren und zeigt deshalb den Typ-Fehler an.
         Nr = txt_Auftrag("laden", DateiPfad) + 1

Gibt die Function eine Ziffernfolge als Text zurück, dann funktioniert die Addition trotzdem, weil Excel als Zahlenliebhaber uns den Gefallen tut den Text in eine Zahl umzuwandeln, ohne danach zu fragen.
Damit das Problem nicht auftritt mussst du die Datei anlegen und in die 1.Zeile einen Dummywert eintragen z.B. 0000000. Dann läuft alles rund.
Oder du überlässt Excel die Arbeit und übernimmst die folgenden Anpassungen.
a) Prüfung, ob die Textdatei vorhanden ist
b) Wenn NEIN, dann Textdatei anlegen mit einer Dummy-Nr.
c) Beim Einlesen der Daten prüfen ob Variable Inhalt "" ist und bis zum Ende der Datei in einer Schleife arbeiten.
Durch diese Ergänzungen ist sichergestellt, dass ggf. die Nummer 000 für die aktuelle KW generiert wird.
LG
Franz
Function txt_Auftrag(Anweisung As String, DateiPfad As String, Optional Nr As String) As String
'JN-200107 Liest und schreibt die Auftragsnummer in die auftrag.txt - Datei ein. Prüft dabei _
auch auf validität
Dim auftrag As String
Dim Inhalt As String
Dim sDateYYWW As String
'Fehlermarke einfügen
On Error GoTo Fehlermarke
'Zielort und Datei
auftrag = DateiPfad & "auftrag\auftrag.txt"
'Prüfen, ob Datei vorhanden
If Dir(auftrag) = "" Then
'Text-Datei anlegen mit Dummy-Auftrags-Nummer
Open auftrag For Output As #1
Print #1, "0000000" 'Dummy-Auftrag eintragen
Close #1
End If
If Anweisung = "laden" Then
Open auftrag For Input As #1 'auftrag.txt öffnen
Do Until EOF(1)
Line Input #1, Inhalt 'Auftragsnummer auslesen
If Inhalt  "" Then Exit Do '1. Zeile der Datei enthält Text
Loop
If Inhalt = "" Then 'Textdatei ist leer
Inhalt = "0000000"
End If
sDateYYWW = CStr(Format(Now, "yyww")) 'Das Jahr und Kalenderwoche in String übergeben
If CInt(Format(Now, "ww"))  CInt(Mid(Inhalt, 1, 4)) Then 'Prüfe Auftragsnummer anhand des _
aktuellen Datums auf Validität
Inhalt = (sDateYYWW & "000")
End If
txt_Auftrag = Inhalt
'Quelldatei schließen
Close #1
Exit Function
ElseIf Anweisung = "schreiben" Then
'Zieldatei öffnen
Open auftrag For Output As #1
'Informationen in Zieldatei einfügen
'Werte aus Tabele in das txt eintragen
Print #1, Nr
'Zieldatei schließen
Close #1
Exit Function
End If
Fehlermarke:
MsgBox Err.Description
End Function

Anzeige

146 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige