问与答87: 如何根据列表内容在文件夹中查找图片并复制到另一个文件夹中?

时间:2022-07-25
本文章向大家介绍问与答87: 如何根据列表内容在文件夹中查找图片并复制到另一个文件夹中?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Q:如何实现根据列表内容查找文件夹中的照片,并将照片剪切或复制到另外的文件夹?如下图1所示,在列C中有一系列身份证号。

图1

在一个文件夹中(示例中为“照片库”),存放着以身份证号命名的照片,在其中查找上图1所示的工作表列C中的身份证号对应的照片并将其移动至另一文件夹中(示例中为“一班照片”),如下图2所示。

图2

如果文件夹中找不到照片,则在图1的工作表列D中标识“无”,否则标识有,结果如下图3所示,表明在文件夹“照片库”中只找到并复制了2张照片,其他照片没有找到。

图3

A:可以使用一段VBA代码实现。代码如下:

Sub CopyPic()
    '声明变量
    Dim strSourcePath As String
    Dim strDesPath As String
    Dim strFile As String
    Dim iCount As Long
    Dim strFilename() As String
    Dim lngLastRow As Long
    Dim i As Long
    Dim bln As Boolean
   
    '指定照片所在文件夹和要复制到的文件夹
    '示例假设工作簿与文件夹在同一目录下
   strSourcePath = ThisWorkbook.Path & "照片库"
    strDesPath= ThisWorkbook.Path & "一班照片"
 
    '获取文件
    strFile =Dir(strSourcePath)
   
    '获取工作表最后一行
    lngLastRow= Worksheets("Sheet1").Range("C" &Rows.Count).End(xlUp).Row
   
    '重定义动态数组
    ReDim strFilename(0 To iCount)
    If strFile<> "" Then
       strFilename(iCount) = strFile
    Else
        Exit Sub
    End If
   
    '遍历照片所在文件并将所有照片名称存储在数组中
    Do While strFile <> ""
        iCount= iCount + 1
        ReDim Preserve strFilename(0 To iCount)
        strFile= Dir
       strFilename(iCount) = strFile
    Loop
   
    '遍历工作表
    For i = 2 To lngLastRow
        bln = False
        '遍历数组
        For iCount = LBound(strFilename) To UBound(strFilename)
            '查找照片名称
            If Worksheets("Sheet1").Range("C" & i).Value =Left(strFilename(iCount), 18) Then
                '如果找到将其复制到目标文件夹
               FileCopy strSourcePath & strFilename(iCount), strDesPath &strFilename(iCount)
               bln = True
            End If
        Next iCount
        '根据照片是否找到填写列D相应单元格值
        If bln Then
           Worksheets("Sheet1").Range("D" & i).Value ="有"
        Else
           Worksheets("Sheet1").Range("D" & i).Value ="无"
        End If
    Next i
End Sub

代码先将照片所在的文件夹中的所有照片名称存储在数组中,然后遍历工作表单元格,并将单元格中的值与数组中的值相比较,如果相同,则表明找到了照片,将其复制到指定的文件夹,并根据是否找到照片在相应的单元格中输入“有”“无”以提示查找的情况。

可以根据实际情况,修改代码中照片所在文件夹的路径和指定要复制的文件夹的路径,也可以将路径直接放置在工作表单元格中,并使用代码调用,这样更灵活。