繁体   English   中英

VBA 循环浏览文件夹中的文件无法正常工作

[英]VBA loop through files in a folder not working properly

我对以下代码有 2 个问题。

  1. 在第一个循环中,它找到了相同的文件,因此如果文件同名,我为什么要跳过它。 之后,它将按应有的方式进行。 在第 3 个循环中,而不是找到第 3 个文件 (fileName2 = Dir) 变为 fileName2 = ""。
  2. 当我想要将文件名到 go 到第二个文件(文件名 = Dir)时,我收到运行时 5 错误。

*注意:我目前正在测试的文件夹中有 6 个文件,但我想将其用于包含 10,000 个小文件的文件夹

    Sub TestMD5()
   Dim myfilepath As String
   Dim myfilepath2 As String
   Dim fileName As Variant
   Dim fileName2 As Variant
   Dim fldr As FileDialog
   Dim sItem As String


   Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
   With fldr
    .Title = "Select a Folder"
    .AllowMultiSelect = False
    .InitialFileName = Application.DefaultFilePath
    If .Show <> -1 Then GoTo NextCode
    sItem = .SelectedItems(1)
   End With
   NextCode:
   GetFolder = sItem & "\"
   Set fldr = Nothing



   fileName = Dir(GetFolder)
   fileName2 = Dir(GetFolder)

   Do While fileName <> ""
    Do While fileName2 <> ""



   myfilepath = GetFolder & fileName
   myfilepath2 = GetFolder & fileName2

   If myfilepath <> myfilepath2 Then

   If FileToMD5Hex(myfilepath) = FileToMD5Hex2(myfilepath2) And FileToSHA1Hex(myfilepath) = 
   FileToSHA1Hex2(myfilepath2) Then
    'Kill (myfilepath2)
    Debug.Print "match - " & (fileName) & " & " & (fileName2)
   Else
   Debug.Print "no match - " & (fileName) & " & " & (fileName2)
   End If

   End If
        fileName2 = Dir
    Loop
    
   'Set the fileName to the next file
   fileName = Dir
   Loop

   End Sub

我将您的代码与“文件系统对象”方法混合在一起,我们可以在其中对文件执行For each循环。
这至少让您远离整个运行时 5 错误。 也许它可能有用。

Sub TestMD5()
Dim myfilepath As Variant, myfilepath2 As Variant
Dim sItem As String
Dim fso As Object
Dim fldr As Variant
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
    .Title = "Select a Folder"
    .AllowMultiSelect = False
    .InitialFileName = Application.DefaultFilePath
    If .Show <> -1 Then GoTo NextCode
    sItem = .SelectedItems(1)
End With
NextCode:

Set fso = CreateObject("Scripting.FileSystemObject")
Set fldr = fso.GetFolder(sItem & "\")

For Each myfilepath In fldr.Files
    For Each myfilepath2 In fldr.Files
    If Not myfilepath = myfilepath2 Then
        If FileToMD5Hex(myfilepath) = FileToMD5Hex2(myfilepath2) And FileToSHA1Hex(myfilepath) = FileToSHA1Hex2(myfilepath2) Then
            'Kill (myfilepath2)
            Debug.Print "match - " & (myfilepath) & " & " & (myfilepath2)
        Else
            Debug.Print "no match - " & (myfilepath) & " & " & (myfilepath2)
        End If
    End If
    Next myfilepath2
Next myfilepath

End Sub

我认为应该使用 FileDialog(msoFileDialogFilePicker) 而不是 FileDialog(msoFileDialogFolderPicker)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM