Fehlermeldung: "Run-time Error '5': Invalid procedure call or argument..."

  • Excel

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von hakke-schorb.

    Fehlermeldung: "Run-time Error '5': Invalid procedure call or argument..."

    Hallo Leuts,

    da wir auf das wundertolle Office 2007 umgestiegen sind, musste ich jetzt einige Makros umschreiben.

    Folgendes Makro kontrolliert das Vorhandensein diverser Dokumente auf verschiedenen Laufwerken und vermerkt dies anschließend in einer Excel-Tabelle.
    Die nicht mehr vorhandene Application.FileSearch-Funktion habe ich mit der FileList-Funktion substituiert. Dies funktioniert auch problemlos. Das Makro läuft einmal "durch" und sollte dann in die nächste Zeile der ExcelTabelle springen und für die nächste Dateinummer weitersuchen.
    Jedoch bleibt es immer in der 5.-letzten Zeile ("myName = Dir() ' Get next entry.") hängen und spuckt mir obenstehende Fehlermeldung aus.

    Ohne die File-List-Blöcke funktioniert das Auflisten der Dateien auch. Ebenso Funktionieren die File-List-Blöcke auch einzeln bzw. im "Ganzen" einmal (bis zur Fehlemeldung ;)

    Nun habe ich keine Ahnung mehr woran es noch liegen könnte. Ich suche schon seit Stunden nach dem Fehler und finde keine Lösungsansatz, was mich der Verzweiflung immer näher bringt.

    Ich hoffe einer von euch Profis kann mir vielleicht einen Tip oder Lösungsansatz geben.

    Andernfalls bleibt mir wohl nur die komplette neu-Programmierung, oder? Was allerdings ziemlich schade wäre, da ziemlich viel Arbeit in dem Makro steckt und es ja soweit (1mal) funktioniert.

    Vielen Dank im Voraus für eure Hilfe, welcher Art auch immer.


    MfG der verzweifelte, beinahe suizidale Hakke-Schorb! ;)

    Visual Basic-Quellcode

    1. Public Function FileList(fldr As String, Optional fltr As String = "*.*") As _
    2. Variant
    3. Dim sTemp As String, sHldr As String
    4. If Right$(fldr, 1) <> "\" Then fldr = fldr & "\"
    5. sTemp = Dir(fldr & fltr)
    6. If sTemp = "" Then
    7. FileList = Split("No files", "|") 'ensures an array is returned
    8. Meldung = MsgBox("Es wurde keine Datei " & fltr & " gefunden." & vbCrLf _
    9. & "Weiter machen?", vbYesNo)
    10. If Meldung = vbNo Then End
    11. Exit Function
    12. End If
    13. Do
    14. sHldr = Dir
    15. If sHldr = "" Then Exit Do
    16. sTemp = sTemp & "|" & sHldr
    17. Loop
    18. FileList = Split(sTemp, "|")
    19. End Function
    20. Private Sub aktualisieren_Click()
    21. ' Macro zur Übersicht des MeasImport-Laufwerkes
    22. ' Display the names in C:\ that represent directories.
    23. Kpath = "k:\" ' Set the path.
    24. datapath = "G:\Test-Coordination (01424471)\WO-Closed\"
    25. kanalpath = "g:\dynamic (01424474)\Test Data\Vorlagen\Kanallisten\"
    26. myName = Dir(Kpath, vbDirectory) ' Retrieve the first entry.
    27. zeile_ = 3
    28. Worksheets("MeasImport").Range("H1").Value = Now()
    29. Range("A3").Select
    30. Do While myName <> "" ' Start the loop.
    31. Debug.Print myName
    32. ' Ignore the current directory and the encompassing directory.
    33. If myName <> "." And myName <> ".." Then '
    34. 'MsgBox (Mid(myname, 1, 1))
    35. 'Use bitwise comparison to make sure MyName is a directory.
    36. If (GetAttr(Kpath & myName) And vbDirectory) = vbDirectory Then
    37. If (Mid(myName, 1, 1) = "0" Or Mid(myName, 1, 1) = "1" Or Mid(myName, _
    38. 1, 1) = "2" Or Mid(myName, 1, 1) = "3" Or Mid(myName, 1, 1) = "4" Or _
    39. Mid(myName, 1, 1) = "5" Or Mid(myName, 1, 1) = "6" Or Mid(myName, 1, _
    40. 1) = "7" Or Mid(myName, 1, 1) = "8" Or Mid(myName, 1, 1) = "9") And _
    41. Mid((Right(myName, 4)), 1, 1) <> "." Then
    42. Debug.Print myName ' Display entry only if it
    43. MsgBox myName
    44. Worksheets("MeasImport").Range("B" & zeile_).Value = myName
    45. 'Kanalliste
    46. kw_ = Mid(myName, 1, 2)
    47. wo_ = Mid(myName, 3, 7)
    48. to_ = Mid(myName, 3)
    49. Liste = FileList(kanalpath & "Kw" & kw_ & "\", myName & ".xls")
    50. If Liste(0) <> "No files" Then
    51. Anzahl = UBound(Liste) - LBound(Liste) + 1
    52. Meldung = "Anzahl der gefundenen Dateien: " & Anzahl
    53. Worksheets("MeasImport").Range("C" & zeile_).Value = " x "
    54. Auswahl = MsgBox(Meldung, vbOKCancel)
    55. Else
    56. Worksheets("MeasImport").Range("C" & zeile_).Value = ""
    57. End If
    58. 'Testreport
    59. Liste = FileList(Kpath & myName & "\", "*testreport_sledx*")
    60. If Liste(0) <> "No files" Then
    61. Anzahl = UBound(Liste) - LBound(Liste) + 1
    62. Meldung = "Anzahl der gefundenen Dateien: " & Anzahl
    63. Worksheets("MeasImport").Range("G" & zeile_).Value = " x "
    64. Range("B" & zeile_).Select
    65. ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
    66. Kpath & myName & "\testreport_sledx.docx"
    67. With Selection.Font.Size = 8
    68. Auswahl = MsgBox(Meldung, vbOKCancel)
    69. End With
    70. Else
    71. Worksheets("MeasImport").Range("C" & zeile_).Value = ""
    72. End If
    73. 'Diagramme
    74. Liste = FileList(Kpath & myName & "\", "*.png")
    75. If Liste(0) <> "No files" Then
    76. Anzahl = UBound(Liste) - LBound(Liste) + 1
    77. Meldung = "Anzahl der gefundenen Dateien: " & Anzahl Worksheets("MeasImport").Range("D" & zeile_).Value = " x "
    78. Auswahl = MsgBox(Meldung, vbOKCancel)
    79. Else
    80. Worksheets("MeasImport").Range("D" & zeile_).Value = ""
    81. End If
    82. 'Fotos
    83. Liste = FileList(Kpath & myName & "\", "*.jpg")
    84. If Liste(0) <> "No files" Then
    85. Anzahl = UBound(Liste) - LBound(Liste) + 1
    86. Meldung = "Anzahl der gefundenen Dateien: " & Anzahl
    87. Worksheets("MeasImport").Range("E" & zeile_).Value = " x "
    88. Auswahl = MsgBox(Meldung, vbOKCancel)
    89. Else
    90. Worksheets("MeasImport").Range("E" & zeile_).Value = ""
    91. End If
    92. 'Videoanalyse
    93. Liste = FileList(Kpath & myName & "\", "*videoanalyse*")
    94. If Liste(0) <> "No files" Then
    95. Anzahl = UBound(Liste) - LBound(Liste) + 1
    96. Meldung = "Anzahl der gefundenen Dateien: " & Anzahl
    97. Worksheets("MeasImport").Range("F" & zeile_).Value = " x "
    98. Auswahl = MsgBox(Meldung, vbOKCancel)
    99. Else
    100. Worksheets("MeasImport").Range("F" & zeile_).Value = ""
    101. End If
    102. 'freedat
    103. Liste = FileList(Kpath & myName & "\", "free.dat")
    104. If Liste(0) <> "No files" Then
    105. Anzahl = UBound(Liste) - LBound(Liste) + 1
    106. Meldung = "Anzahl der gefundenen Dateien: " & Anzahl
    107. Worksheets("MeasImport").Range("H" & zeile_).Value = " x "
    108. Auswahl = MsgBox(Meldung, vbOKCancel)
    109. Else
    110. Worksheets("MeasImport").Range("H" & zeile_).Value = ""
    111. End If
    112. 'sled-data
    113. Liste = FileList(datapath & "\" & wo_ & "\" & to_, _
    114. "*testreport_sledx*")
    115. If Liste(0) <> "No files" Then
    116. Anzahl = UBound(Liste) - LBound(Liste) + 1
    117. Meldung = "Anzahl der gefundenen Dateien: " & Anzahl
    118. Worksheets("MeasImport").Range("I" & zeile_).Value = " x "
    119. Auswahl = MsgBox(Meldung, vbOKCancel)
    120. Else
    121. Worksheets("MeasImport").Range("I" & zeile_).Value = ""
    122. End If
    123. zeile_ = zeile_ + 1
    124. 'End If ' it represents a directory.
    125. End If
    126. End If
    127. End If
    128. myName = Dir() ' Get next entry.
    129. MsgBox (myName)
    130. Loop
    131. Range("B3").Select
    132. End Sub