Live-Forum - Die aktuellen Beiträge
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

Laufzeitfehler13+Findet Dateipfad nicht

Laufzeitfehler13+Findet Dateipfad nicht
30.07.2020 11:10:00
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.

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler13+Findet Dateipfad nicht
30.07.2020 11:11:09
Daniel
Hier noch die vermutlich fehlerhafte Funktion Auftrag_txt:
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: Laufzeitfehler13+Findet Dateipfad nicht
30.07.2020 11:35:15
onur
In WELCHER Zeile ist der Fehler und welcher Fehler genau ?
Du gehst doch auch nicht zum Arzt und sagst nur: "ich bin krank".
Mach mal das blöde "On Error" weg, dann siehst du auch, WO der Fehler genau auftaucht.
AW: Laufzeitfehler13+Findet Dateipfad nicht
30.07.2020 11:38:28
peterk
Hallo
Folgender Code macht nicht viel Sinn

Dim nr As String
nr = txt_Auftrag("laden", Dateipfad) + 1
txt_Auftrag leifert einen String zurück im Format "yyww000" z.B. "2032000". Wenn Du nun eine  _
Eins zu einem String addierst kommt sicherlich nicht 2032001 heraus.
Call txt_Auftrag("schreiben", Dateipfad, CStr(nr))
CStr wandelt eine Zahl in einen String, Du hast aber keine Zahl!
Folgender Vorschlag:
Dim nr As String
Dim nrLng as Long
nr = txt_Auftrag("laden", Dateipfad)
nrLng = CLng(nr) + 1
Call txt_Auftrag("schreiben", Dateipfad, CStr(nrLng))

Anzeige
AW: Laufzeitfehler13+Findet Dateipfad nicht
30.07.2020 14:01:19
Daniel
Danke Peterk, leider hat die Änderung das Problem nicht gelöst:
gleiche Fehlermeldung aber die fehlerzeile ist statt "nr = txt_Auftrag("laden", Dateipfad) + 1" jetzt "nrLng = CLng(nr) + 1"
AW: Laufzeitfehler13+Findet Dateipfad nicht
30.07.2020 14:52:07
peterk
Hallo
Bekommst Du eine Messagesbox mit ErrorNummer?
Wie sieht Deine Auftrag.txt aus? Was steht in der ersten Zeile?
Peter
AW: Laufzeitfehler13+Findet Dateipfad nicht
30.07.2020 15:32:20
Daniel
Hier die Fehlermeldung:
Userbild
Und hier der Code von Auftrag.txt:
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: Laufzeitfehler13+Findet Dateipfad nicht
30.07.2020 15:38:48
peterk
Hallo
Missverständnis:
Ich wollte die Auftrag.txt sehen die Du mit folgender Zeile öffnest:
Auftrag = Dateipfad & "auftrag\auftrag.txt"
Peter
AW: Laufzeitfehler13+Findet Dateipfad nicht
31.07.2020 12:02:44
Daniel
Entschuldige. Eine Textdatei wird mir dank des Fehlers gar nicht ausgegeben, findet ja eh den Dateipfad nicht. (Ein Feld mit dem Hinweis darauf geht da schon direkt mit Öffnen der Excel auf)
Normalerweise steht in der ersten Zeile die Messauftragsnummer bestehend aus Jahr (letzten beiden Ziffern),Kalenderwoche und dann eine fortlaufende Nummerierung also die Anzahl der Messaufträge pro Kalenderwoche. Bei einstelliger Anzahl bleibt allerdings der "Zehner" auf null (01,02,03..) Also eine 6 bis 7 stellige Zahl immer ohne Buchstaben. Die Zahl ist gleichzeitig der Name der txt.
Des Weiteren halt alle Angaben aus dem Formular jeweils in Zeilen Untereinander. Nicht belegte Felder und welche aus dem Bearbeiter-Formular werden trotzdem beschrieben (Mit der Feldbeschreibung) und können dann später umgeschrieben werden.
Vielen Dank für deine/eure Mühe. Ich kann mal versuchen, wenn das hilft, den gesamten Code einzufügen muss da aber alles entsprechend anonymisieren und der ist auch ziemlich umfangreich.
Grundsätzlich ist es aber so dass das Programm bis dieses Jahr Januar lief, der Code also eigentlich nur wegen Windows-Updates angepasst werden muss.
Anzeige
AW: Laufzeitfehler13+Findet Dateipfad nicht
30.07.2020 18:41:59
Matthias
Moin!
Da du in dem Beitrag von gestern anscheinend nicht nochmal vorbeischaust, hier noch ein paar Anmerkungen. M.E. hast du in der txt-Datei nur eine Zahl, vermtl. eine Nummer die fortlaufend erhöht werden soll. Falls die Datei nun aber nichts enthält, die Zahl nicht mindestens 4 Stellen hat, dort Buchstaben sind usw. tritt dort ein Fehler auf. Der führt dann zu dem Fehler. Die solltest du abfangen. Zudem würde ich am Anfang einen Rückgabewert bei der Funktion setzen. Habe mal 0 genommen, da dieser Wert wohl nicht in der Datei stehen wird. Den Funktionskopf hätte ich dann so angepasst. Dabei wird nun auch geprüft, ob die Datei leer ist. Zudem ziehe ich das Schließen vor, weil sonst die Datei bei einem Fehler offen bleibt. Dann sind da die Auswertungen und dann geht dein Code weiter.
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"
txt_Auftrag = 0
If Anweisung = "laden" Then
Open Auftrag For Input As #1 'auftrag.txt öffnen
If Not EOF(1) Then Line Input #1, Inhalt         'Auftragsnummer auslesen
Close #1
If trim(Inhalt) = "" Then Exit Function
If Len(Inhalt) 
und beim Auswerten in der Prozedur hötte ich es so geändert. Wenn jetzt als Rückgabe eine 0 kommt, ist was schief gelaufen. Dann müsstest du aber den Code danach noch anpassen, da er sonst weiter mit nr = 1 arbeitet.
Dim nr As String
nr = CLng(txt_Auftrag("laden", dateipfad)) + 1
If nr = 1 Then MsgBox ("Beim Laden trat ein Fehler auf")  'da 0 +1 ja 1 ergibt.  _
Also war die Auswertung 0
Call txt_Auftrag("schreiben", dateipfad, CStr(nr))
Ist jetzt aber nur eine Idee, die ich hier in die Runde mit einwerfe. Bin eh bis nächste Woche unterwegs und kann da grad nicht weiter helfen.
VG
Anzeige
AW: Laufzeitfehler13+Findet Dateipfad nicht
30.07.2020 15:33:33
onur
Du hast mich zwar ignoriert, aber ich versuche dir trotzdem zu helfen:
Wenn DAS zutrifft
ElseIf Anweisung = "schreiben" Then
ist txt_Auftrag nicht definiert, also ein leerer String, womit CLng(txt_Auftrag) einen Fehler (Typen unverträglich) generieren würde, wenn du diese BLÖDE "On Error..."-Anweisung nicht hättest".

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige