Sub 文件匹配() Dim ws As Worksheet Dim nameColumn As Range Dim folderPath As String Dim linkColumn As Range Dim cell As Range Dim fileName As String Dim fileNameWithoutExtension As String Dim folderContent As Object Dim file As Object Dim fullPath As String Dim i As Long Dim fileFound As Boolean ' 获取当前活动工作表 Set ws = ActiveSheet ' 选择名称所在的列 On Error Resume Next Set nameColumn = Application.InputBox("请选择包含文件名的列(选择一个单元格)", Type:=8) On Error GoTo 0 If nameColumn Is Nothing Then MsgBox "未选择列,操作已取消。" Exit Sub End If ' 获取列号 Dim nameColumnNumber As Long nameColumnNumber = nameColumn.Column ' 选择文件夹路径 With Application.FileDialog(msoFileDialogFolderPicker) .Title = "请选择文件夹" If .Show = -1 Then folderPath = .SelectedItems(1) & "\" Else MsgBox "未选择文件夹,操作已取消。" Exit Sub End If End With ' 选择需要填入链接的列 On Error Resume Next Set linkColumn = Application.InputBox("请选择需要填入链接的列(选择一个单元格)", Type:=8) On Error GoTo 0 If linkColumn Is Nothing Then MsgBox "未选择列,操作已取消。" Exit Sub End If ' 获取列号 Dim linkColumnNumber As Long linkColumnNumber = linkColumn.Column ' 清除目标列中的任何现有内容 ws.Columns(linkColumnNumber).ClearContents ' 获取名称列中的最后一行 Dim lastRow As Long lastRow = ws.Cells(ws.Rows.Count, nameColumnNumber).End(xlUp).Row ' 获取文件夹内容 Set folderContent = CreateObject("Scripting.FileSystemObject").GetFolder(folderPath).Files ' 遍历名称列中的每个单元格 For i = 1 To lastRow fileName = ws.Cells(i, nameColumnNumber).Value ' 后缀名处理 If InStrRev(fileName, ".") > 0 Then fileNameWithoutExtension = Left(fileName, InStrRev(fileName, ".") - 1) Else fileNameWithoutExtension = fileName End If fileFound = False ' 遍历文件夹中的每个文件 For Each file In folderContent If InStrRev(file.Name, ".") > 0 Then If Left(file.Name, InStrRev(file.Name, ".") - 1) = fileNameWithoutExtension Then fullPath = folderPath & file.Name ' 创建超链接 ws.Hyperlinks.Add Anchor:=ws.Cells(i, linkColumnNumber), Address:=fullPath, TextToDisplay:=file.Name fileFound = True Exit For End If Else ' 如果文件名没有后缀,直接比较整个文件名 If file.Name = fileNameWithoutExtension Then fullPath = folderPath & file.Name ' 创建超链接 ws.Hyperlinks.Add Anchor:=ws.Cells(i, linkColumnNumber), Address:=fullPath, TextToDisplay:=file.Name fileFound = True Exit For End If End If Next file ' 如果没有找到匹配的文件,则填入错误消息 If Not fileFound Then ws.Cells(i, linkColumnNumber).Value = "文件不存在" End If Next i MsgBox "操作完成!" End Sub