Функция Dir () не работает как исключение: Код ошибки 5: неверный аргумент или вызов процедуры - PullRequest
1 голос
/ 21 июня 2019

Я пытаюсь установить макрос, который будет перемещать файл из определенной папки в другую. Если этот файл уже существует, он отобразит окно сообщения, если файл из другой папки уже существует в папке. Вот проблема ..

Я думаю, что первая ошибка здесь:

StrFile = Dir Вот ошибка, она отображает мне код ошибки: 5 Неверный аргумент или вызов процедуры И исключительный вывод этого строчного кода - перейти к следующему файлу, чтобы просмотреть все мои файлы .Pdf по одному

Sub MooveFile()

Dim filepath As String
Dim currfile As String
Dim NomFichier As String
Dim Direction As String
Dim StrFile As String
Dim FSO As Object
Dim SourceFileName As String, DestinFileName As String



    StrFile = Dir(ActiveWorkbook.Path & "\" & "*.PDF")
    Do While Len(StrFile) > 0
    Direction = Split(StrFile, " ")(0)
    Set FSO = CreateObject("Scripting.Filesystemobject")


    SourceFileName = ActiveWorkbook.Path & "\" & StrFile


         Set FoundRange = Sheets("Path").Cells.Find(what:=Direction, LookIn:=xlFormulas, lookat:=xlWhole)

            If FoundRange Is Nothing Then 'Here is the test if the folder exist : WORKING
            On Error Resume Next
            MkDir ActiveWorkbook.Path & "\" & Direction
            DestinFileName = ActiveWorkbook.Path & "\" & Direction & "\" & StrFile
            FSO.MoveFile Source:=SourceFileName, Destination:=DestinFileName

            Else 'If Folder exist : WORKING

                DestinFileName = ActiveWorkbook.Path & "\" & Direction & "\" & StrFile
                    If Dir(SourceFileName) <> "" Then 'IF File exist then display the message box : WORKING
                        Select Case MsgBox("le fichier" & SourceFileName & "existe déjà voulez-vous le remplacer", vbAbortRetryIgnore)

                        Case vbAbort
                        ' Cancel the operation.
                        MsgBox "Operation canceled"

                        Case vbRetry
                        ' Continue the Do loop to try again.
                        FSO.DeleteFile DestinFileName, True

                        FSO.MoveFile Source:=SourceFileName, Destination:=DestinFileName

                        Case vbIgnore
                        ' Take a default action.
                        GoTo nextline

                        End Select

                    Else
                        FSO.MoveFile Source:=SourceFileName, Destination:=DestinFileName
                    End If


                'FSO.MoveFile Source:=SourceFileName, Destination:=DestinFileName

            End If

nextline:
        StrFile = Dir 'This line code is not working at : Error code 5 :Invalid argument or procedure call 
    Loop 'Fin Boucle

Application.ScreenUpdating = True

End Sub

Я что-то здесь упустил? Я уже пробовал StrFile = Dir()

1 Ответ

1 голос
/ 21 июня 2019

Я не уверен, почему вы используете Dir при создании FileSystemObject?

Хотя (по моему опыту) он медленнее, но гораздо надежнее.

Дляначало, не создавайте его как объект.Поставьте ссылку на Windows.Scripting, затем

Dim FSO As Scripting.FileSystemObject
set FSO= New Scripting.FileSystemObject 

Помимо всего прочего, он даст вам Intellisense, который облегчает жизнь.

Затем вы можете проверить файл / папку с помощью

If FSO.FileExists(myFile) Then
If FSO.FolderExists(myFolder) Then

И начинайте использовать такие коллекции, как

Dim fi As Scripting.File
For Each fi In FSO.GetFolder(myFolder).Files
Next    

Справочник Microsoft

...