20. Apr 2024, 03:55
VB-fun.de - Beitragsübersicht zum VB-/VBA-Forum-Archiv 0270
  VB5: Run-time error ’13’ Type mismatch
 Von  Multiple
 Am  13. April 2005 um 11:06:19
 Frage Hierzu gibt es im Netz so viel. "Bsp: Mit Werten rechen die falschen Variablentype zugeornet sind oder Probleme mit Spracheinstellungen" Leider läuft es an der Maschine wo es erstellt wurde einwandfrei aber nicht am Rechner.
Wie kann ich rausbekommen wo er abstürzt? Funktion Split und Replace habe ich von hier funktionieren in anderen Progs kann es nicht sein. Vielleicht is DriveReady?!?
Dim Mldg As String
Dim Stil As String
Dim Titel As String
Dim Antwort As String
Dim AlterName As String
Dim Neuername As String
Dim Datei As String
Dim Zeile As String
Dim sString As String
Dim Kopf As String
Dim Spliter As Variant
Dim LieferNr As String
Dim Datum As String
Dim Kunde As String
Dim Karton As String
Dim GesMe As String
Dim Gewicht As String
Dim OrderNr As String
Dim Zusatztext As String
Dim EAN As String
Dim Grösse As String
Dim Menge As String
Dim Dir2 As String
Dim Dir3 As String
Dim Drive As String

Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub

Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub

Private Sub EXIT_Click()
End
End Sub

Private Sub File1_Click()
Label1.Caption = File1.Path + "\" + File1.filename
End Sub

Private Sub Form_Load()
If IsDriveReady("M") = "Falsch" Then
Mldg = "Laufwerk ""M:\"" ist nicht vorhanden"
Stil = vbOKOnly
Titel = "Laufwerksfehler / Programm wird beendet"
Antwort = MsgBox(Mldg, Stil, Titel)
End
End If
If IsDriveReady("N") = "Falsch" Then
Mldg = "Laufwerk ""N:\"" ist nicht vorhanden"
Stil = vbOKOnly
Titel = "Laufwerksfehler / Programm wird beendet"
Antwort = MsgBox(Mldg, Stil, Titel)
End
End If
ChDrive "M"
Dir1.Path = "M:\CHG\Todo CHG\ASN"
Dir2 = "M:\CHG\Erledigt CHG\ASN"
Dir3 = "N:\Nike\Gdaten"
Label1.Caption = ""
End Sub

Private Sub Import_Click()
AlterName = File1.filename
Neuername = Dir(Dir2 + "\" + File1.filename)
If AlterName = Neuername Then
Mldg = File1.filename + " schon eingespielt nochmal erzeugen?" ' Meldung definieren.
Stil = vbYesNo + vbCritical + vbDefaultButton2 ' Schaltflächen
Titel = "Nike-ASN doppelte Datei"
Antwort = MsgBox(Mldg, Stil, Titel) ' Meldung anzeigen.
If Antwort = vbYes Then
Kill (Dir2 + "\" + File1.filename)
Neuername = "Neuername"
Else
Kill (File1.Path + "\" + File1.filename)
End If
End If
If AlterName <> Neuername Then
AlterName = File1.Path + "\" + File1.filename
Neuername = Dir2 + "\" + File1.filename
Open Dir3 + "\" + File1.filename + ".imp" For Output As #2
Print #2, "!REMARK : Nike-ASN Warenbeingang aus Datei: " + File1.filename
Print #2, "Verband : Nike-ASN"
Print #2, "!Init : 01010110"
Print #2, ""
Print #2, "ArtZ„hl : Ja"
Print #2, "GRUpdate : Spez"
Print #2, ""
Open File1.Path + "\" + File1.filename For Input As #1
Do While Not EOF(1)
Line Input #1, sString
Zeile = Replace(sString, "/", ".")
Spliter = Split(Zeile, ",")
Kopf = Spliter(0)
If Kopf = "HEADER1" Then
LieferNr = Spliter(1)
Datum = Spliter(2)
Kunde = Spliter(3)
Karton = Spliter(5)
GesMe = Spliter(6)
Gewicht = Spliter(7)
ElseIf Kopf = "HEADER2" Then
OrderNr = Spliter(1)
ElseIf Kopf = "HEADER3" Then
Zusatztext = Spliter(1)
Print #2, "VorgArt : 2"
Print #2, "BelegNr : -1"
Print #2, "ERFDAT : " + Datum
Print #2, "MUTDAT : " + Datum
Print #2, "ZUSTEXT [1]: Nike Ordernr: " + OrderNr + " " + File1.filename
Print #2, "ZUSTEXT [2]: Bestelltxt: " + Zusatztext
Print #2, "ZUSTEXT [2]: Anz. Kart:" + Karton + " Stk:" + GesMe + " Kg:" + Gewicht
Print #2, "LIEFSNR : " + LieferNr
Print #2, "LIEFSDAT : " + Datum
Print #2, "SAISON : -1"
Print #2, "FILIALE : 101"
Print #2, "LIEFER : 1"
Print #2, "!CRSORPUT : BELEG"
Print #2, ""
Else
EAN = Spliter(4)
Grösse = Spliter(3)
Menge = Spliter(5)
Print #2, "EANNR : " + EAN
Print #2, "!CRSORPUT : ARTIKEL"
Print #2, ""
Print #2, "PosNR : -1"
Print #2, "PosART : CURRENT"
Print #2, "TabFIL : 101"
Print #2, "TabGroes[1] : """ + Grösse + """"
Print #2, "TabMENGE[1] : " + Menge
Print #2, "!CRSORPUT : POSTEN"
Print #2, ""
End If
Loop
Close #1
Close #2
Name AlterName As Neuername
End If
File1.Refresh
Label1.Caption = " "
End Sub

Public Function Split( _
ByRef Expression As String, _
Optional ByRef Delimiter As String = " ", _
Optional ByVal Count As Long = -1, _
Optional ByVal Compare As VbCompareMethod = vbBinaryCompare _
) As Variant
Dim DelimiterLen As Long
Dim index As Long
Dim Start As Long
Dim Strings() As String
Dim StringsCount As Long
Dim StringsUBound As Long
Dim StringsPtr As Long

If Count And Len(Expression) > 0 Then

DelimiterLen = Len(Delimiter)
If DelimiterLen Then
'Speicher reservieren:
If Count < 0 Then
Count = Len(Expression) \ DelimiterLen
Else
Count = Count - 1
End If
If Count < 2048 Then
StringsUBound = Count
Else
StringsUBound = 1024
End If
ReDim Strings(StringsUBound)

'String splitten:
Start = 1
For StringsCount = 0 To Count - 1
'Nächsten Delimiter suchen:
index = InStr(Start, Expression, Delimiter, Compare)
If index = 0 Then Exit For

'Ggf. Array vergrößern:
If StringsCount > StringsUBound Then
StringsUBound = StringsCount * 2
ReDim Preserve Strings(StringsUBound)
End If

'Teilstring speichern:
Strings(StringsCount) = _
Mid$(Expression, Start, index - Start)
Start = index + DelimiterLen
Next StringsCount
Strings(StringsCount) = Mid$(Expression, Start)

'Ggf. Array verkleinern:
If StringsCount < StringsUBound Then _
ReDim Preserve Strings(StringsCount)

Else
'Delimiter ist Leerstring:
ReDim Strings(0)
Strings(0) = Expression
End If 'DelimiterLen
Split = Strings

Else
'Nichts zu tun:
Split = Array()
End If 'Count And Len(Expression) > 0
End Function
Function Replace(Source As String, Find As String, ReplaceStr As String, _
Optional ByVal Start As Long = 1, Optional Count As Long = -1, _
Optional Compare As VbCompareMethod = vbBinaryCompare) As String

Dim findLen As Long
Dim replaceLen As Long
Dim index As Long
Dim counter As Long

findLen = Len(Find)
replaceLen = Len(ReplaceStr)
' this prevents an endless Loop
If findLen = 0 Then Err.Raise 5

If Start < 1 Then Start = 1
index = Start

' let's start by assigning the source To the result
Replace = Source

' If Find And ReplaceStr strings have same length, it Is possible To
' use an optimized algorithm, based On the Mid$ command
Do
index = InStr(index, Replace, Find, Compare)
If index = 0 Then Exit Do
If findLen = replaceLen Then
' If the find And replace strings have same length
' we can use the faster Mid$ command
Mid$(Replace, index, findLen) = ReplaceStr
Else
' Else we must use concatenation
Replace = Left$(Replace, index - 1) & ReplaceStr & Mid$(Replace, _
index + findLen)
End If
' skip over the String just added
index = index + replaceLen
' increment the replacement counter
counter = counter + 1
' Note that the Loop Until test will always fail If Count = -1
Loop Until counter = Count

' The Next operation serves To keep complete compatibility With
' VB6's Replace Function. You can delete it If you prefer.
If Start > 1 Then Replace = Mid$(Replace, Start)

End Function
Public Function IsDriveReady(ByVal Drive As String) As Boolean

On Error Resume Next
GetAttr Left$(Drive, 1) & ":\"

IsDriveReady = CBool(Err.Number = 0)

On Error GoTo 0
End Function
 Antwort:
 Von Detlev Schubert
 eMail
 Am 15. April 2005 um 11:03:05
 Antwort Hallo zusammen,

in der Regel sollte man natürlich auch ein vernünftiges Setup machen . Das kann allerdings den Runtime Error 13 nicht beseitigen.

Der Runtime-Error 13 liegt aus der Erfahrung heraus in den meisten Fällen an den Konvertierfuntionen (CInt, CDbl usw.) und auf unterschiedlichen Rechnern unterschiedlich eingestellten Gebietsschemas.

Du legst z.B. einen Währungswert (2,00 €) in einer INI-Datei ab, liest diesen beim Programmstart wieder aus, und wandelst diesen ausgelesenen Stringwert mit CDbl in eine Zahl um, bekommst Du z.B. beim Gebietsschema Schweiz sofort diesen Runtime Error da die in der Systemsteuerung eingestellte Zahlenformate als Vorlage für die Konvertierfunktion falsch sind.

Siehe Start -> Einstellungen -> Systemsteuerung ->Regions- und Sprachoptionen -> Regionale Einstellungen:

Deutschland:
Zahl: 123.456.789,00
Währung: 123.456.789,00 €

Schweiz:
Zahl: 123,456,789.00
Währung: 123,456,789.00

Das solltest Du immer beim Programmstart abprüfen, wenn Du ein Program machst, das auf unterschiedlichen Rechnern laufen soll.

Gruß
Detlev
[ VB-/VBA-Forum | Archiv 0270 | Archiv-Übersicht ]
 Antworten
VB5: Run-time error ’13’ Type mismatch - Multiple 13. April 2005 um 11:06:19
Re: Run-time error ’13’ Type mismatch - Multiple 14. April 2005 um 14:50:09
Re: Run-time error ’13’ Type mismatch - Frank Grimm 14. April 2005 um 15:00:13
Re: Run-time error ’13’ Type mismatch - Multiple 14. April 2005 um 15:43:37
Re: Run-time error ’13’ Type mismatch - Angie 14. April 2005 um 20:54:12
Re: Run-time error ’13’ Type mismatch - Multiple 15. April 2005 um 09:16:00
Re: Run-time error ’13’ Type mismatch - Detlev Schubert 15. April 2005 um 11:03:05
Re: Run-time error ’13’ Type mismatch - Angie 16. April 2005 um 12:43:53

Zum Seitenanfang

Startseite | VB-/VBA-Tipps | Projekte | Tutorials | API-Referenz | Komponenten | Bücherecke | Gewinnspiele | VB-/VBA-Forum | DirectX | DirectX-Forum | VB.Net | VB.Net-Forum | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum