Nach X Durchläufen: Ungültige Parameter

  • VBScript

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Florian_K148.

    Nach X Durchläufen: Ungültige Parameter

    Hallo,

    bei meinem Makro habe ich nach Anzahl X durchläufen eine Fehlermeldung: Ungültige Parameter. Die entsprechende Zeile ist immer die gleiche, Zeile 147.

    Visual Basic-Quellcode

    1. [PCOMM SCRIPT HEADER]
    2. LANGUAGE=VBSCRIPT
    3. DESCRIPTION=
    4. [PCOMM SCRIPT SOURCE]
    5. OPTION EXPLICIT
    6. autECLSession.SetConnectionByName(ThisSessionName)
    7. REM This line calls the macro subroutine
    8. subSub1_
    9. Sub subSub1_()
    10. Dim LfrndNummer, str_JobDatei, str_ZeileLesen
    11. Dim Pos, Liefertermin, Bestellnummer
    12. Dim obj_FSO, obj_File
    13. Dim OrdnerDesktop, File
    14. Dim MsBoErgebnis, tempzeile
    15. Set obj_FSO = CreateObject("Scripting.FileSystemObject")
    16. '--------------------- Jobdatei finden -------------------------------------------------------------------
    17. str_JobDatei = ""
    18. LfrndNummer = leseBildschrim(6, 12, 7)
    19. str_JobDatei = Desktopfinden() & "a_Termin.csv"
    20. If obj_FSO.FileExists(str_JobDatei) = True Then
    21. MsBoErgebnis = vbNo
    22. MsBoErgebnis = MsgBox("Wollen sie folgende Jobdatei einlesen?" & vbNewLine & str_JobDatei, vbYesNo OR vbQuestion, "Jobdatei gefunden!")
    23. If MsBoErgebnis = vbNo then
    24. str_JobDatei = ""
    25. End If
    26. Else
    27. str_JobDatei = ""
    28. End If
    29. If str_JobDatei = "" Then
    30. Set OrdnerDesktop = obj_FSO.GetFolder(Desktopfinden())
    31. For Each File in OrdnerDesktop.Files
    32. If LCase(Right(File.Name,4)) = ".csv" = True Then
    33. MsBoErgebnis = vbNo
    34. MsBoErgebnis = MsgBox("Wollen sie folgende Datei einlesen?" & vbNewLine & Desktopfinden() & File.Name, vbYesNo OR vbQuestion OR vbDefaultButton2, "CSV gefunden!")
    35. If MsBoErgebnis = vbYes then
    36. str_JobDatei = Desktopfinden() & File.Name
    37. Exit For
    38. End If
    39. End If
    40. Next
    41. End If
    42. If str_JobDatei = "" Then
    43. MsgBox "keine Jobdatei gefunden",vbcritical,"Fehler - Skript beendet"
    44. Exit Sub
    45. End If
    46. '---------------------------------------------------------------------------------------------------------
    47. ' --------------------- Jobdatei prüfen ------------------------------------------------------------------
    48. ' #### ToDo: Prüfung der Jobdatei vor Beginn der Eingabe
    49. Set obj_File = obj_FSO.OpenTextFile(str_JobDatei)
    50. str_ZeileLesen = obj_File.ReadLine 'Kopfzeile wird nicht geprüft (wird sowieso ignoriert)
    51. Do Until obj_File.AtEndOfStream
    52. str_ZeileLesen = obj_File.ReadLine
    53. tempzeile = Split(str_ZeileLesen,",")
    54. Pos = tempzeile(1)
    55. Liefertermin = tempzeile(2)
    56. If GueltigeLiefertermin(Liefertermin) = False Then
    57. Msgbox "ungültige Liefertermin gefunden" & vbNewLine & str_ZeileLesen ,vbCritical,"Fehler - Skript beendet !"
    58. Exit Sub
    59. End If
    60. If Len(Pos) > 4 Then
    61. Msgbox "ungültige Pos gefunden" & vbNewLine & str_ZeileLesen ,vbCritical,"Fehler - Skript beendet !"
    62. Exit Sub
    63. End If
    64. Loop
    65. obj_File.close
    66. '---------------------------------------------------------------------------------------------------------
    67. '------------------- Artikel eingeben --------------------------------------------------------------------
    68. Set obj_File = obj_FSO.OpenTextFile(str_JobDatei)
    69. str_ZeileLesen = obj_File.ReadLine 'Kopfzeile ignorieren
    70. Do Until obj_File.AtEndOfStream
    71. str_ZeileLesen = obj_File.ReadLine
    72. tempzeile = Split(str_ZeileLesen,",")
    73. 'Auslesen der Pos und der Liefertermin; Linke Spalte: Pos, Rechte Spalte: Liefertermin
    74. Bestellnummer = tempzeile(0)
    75. Pos = tempzeile(1)
    76. Liefertermin = tempzeile(2)
    77. If CLng(Liefertermin) > 0 Then
    78. schreibeText 8,20,Bestellnummer
    79. druecketaste "[enter]"
    80. schreibeText 8,2, "2"
    81. druecketaste "[enter]"
    82. schreibeText 10,26,Pos
    83. druecketaste "[field+]"
    84. schreibeText 10,38,Pos
    85. druecketaste "[field+]"
    86. schreibeText 12,26,Liefertermin
    87. druecketaste "[field+]"
    88. druecketaste "[enter]"
    89. druecketaste "[pf5]"
    90. druecketaste "[pf12]"
    91. end if
    92. Loop
    93. obj_File.close
    94. '---------------------------------------------------------------------------------------------------
    95. end sub
    96. Function GueltigeLiefertermin(eingabe)
    97. Dim i
    98. GueltigeLiefertermin = True
    99. If Len(eingabe) = 0 Then
    100. GueltigeLiefertermin = False
    101. Exit Function
    102. End If
    103. For i = 1 to len(Eingabe) Step 1
    104. Select Case mid(eingabe,i,1)
    105. Case "1","2","3","4","5","6","7","8","9","0"
    106. Case Else
    107. GueltigeLiefertermin = False
    108. End Select
    109. Next
    110. End Function
    111. Function Desktopfinden()
    112. Dim objShell
    113. Set objShell = CreateObject("WScript.Shell")
    114. Desktopfinden = objShell.SpecialFolders("Desktop")
    115. If Right(Desktopfinden,1) <> "\" Then Desktopfinden = Desktopfinden & "\"
    116. set objShell = Nothing
    117. End Function
    118. Sub warten (wartedauer)
    119. wai()
    120. autECLSession.autECLPS.Wait(wartedauer)
    121. wai()
    122. End Sub
    123. sub wai()
    124. autECLSession.autECLOIA.WaitForAppAvailable
    125. autECLSession.autECLOIA.WaitForInputReady
    126. end sub
    127. Sub schreibeText(eingabezeile, eingabespalte, eingabetext)
    128. wai()
    129. autECLSession.autECLPS.SetCursorPos eingabezeile, eingabespalte
    130. wai()
    131. autECLSession.autECLPS.SendKeys (eingabetext)
    132. wai()
    133. End Sub
    134. Sub druecketaste (eingabetaste)
    135. wai()
    136. autECLSession.autECLPS.SendKeys (eingabetaste)
    137. wai()
    138. End Sub
    139. Function leseBildschrim(eingabezeile, eingabespalte, eingabelaenge)
    140. wai()
    141. leseBildschrim = autECLSession.autECLPS.GetText(eingabezeile, eingabespalte, eingabelaenge)
    142. wai()
    143. End Function
    144. Function ZeichenZaehlen(str_Eingabe, str_Zeichen)
    145. Dim i
    146. ZeichenZaehlen = 0
    147. For i = 1 To Len(str_Eingabe) Step 1
    148. If Mid(str_Eingabe, i, 1) = str_Zeichen Then
    149. ZeichenZaehlen = ZeichenZaehlen + 1
    150. End If
    151. Next
    152. End Function
    153. Function IsItLFRND(Eingabe)
    154. IsItLFRND = False
    155. If IsNumeric(Eingabe) = True AND Len(Eingabe) = 7 AND Mid(Eingabe,1,1) = "9" Then
    156. IsItLFRND = True
    157. End If
    158. Dim tempz
    159. For tempz = 2 to 7 Step 1
    160. If Mid(Eingabe,tempz,1) <> "1" AND Mid(Eingabe,tempz,1) <> "2" AND Mid(Eingabe,tempz,1) <> "3"_
    161. AND Mid(Eingabe,tempz,1) <> "4" AND Mid(Eingabe,tempz,1) <> "5" AND Mid(Eingabe,tempz,1) <> "6"_
    162. AND Mid(Eingabe,tempz,1) <> "7" AND Mid(Eingabe,tempz,1) <> "8" AND Mid(Eingabe,tempz,1) <> "9"_
    163. AND Mid(Eingabe,tempz,1) <> "0" Then
    164. IsItLFRND = False
    165. End If
    166. Next
    167. End Function

    woran kann das liegen?

    Code-Tags eingefügt und Farbe korrigiert ~ EaranMaleasi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EaranMaleasi“ ()

    Ich gehe davon aus, dass du dich mit deinen übergebenen Parametern von SetCursorPos (Zeile, Spalte) außerhalb des Presentation Space bewegen willst.
    Ansonsten habe ich weder PComm zur Hand noch die Euphorie, mich durch den Wust an unformatiertem Code zu hangeln.
    Hat PComm sowas wie eine IDE mit Debugger?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Danke für die info! Ist der erste code den ich vollständig reinkopiert habe.

    Mit setcurserposition bewegt man sich innerhalb des programmes, mich wundert es nur, das es ca. 70 mal klappt und dann nicht mehr, obwohl immer dasselbe abgerufen wird.
    Kann es sein, das durch laggs die prozedur durcheinander geworfen wird? Dann würde ich alle 10 sätze eine pause in die schleife bauen.

    Florian_K148 schrieb:

    Kann es sein, das durch laggs die prozedur durcheinander geworfen wird? Dann würde ich alle 10 sätze eine pause in die schleife bauen.
    Kann sein.
    Da hier wahrscheinlich keiner PComm und schon gar nicht deine Host-Umgebung zur Verfügung hat, bist du der einzige, der das testen kann.
    Versuch's und berichte, ob's geholfen hat.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich glaube ich habs.
    Das Problem ist nicht der Code, sondern dass ich gestern über einen VPN Tunnel vom HomeOffice auf mein Arbeits PC zugegriffen habe. Das Internet hat scheinbar die Befehle nicht schnell genug verarbeiten können.
    Denn: Grad im Büro lief alles ohne Probleme.

    Falls dennoch Probleme auftreten sollten, die ich lösen kann schreibe ichs hier noch dazu, dann können andere das auch finden.

    VG
    Florian