在excel中,用b列读取唯一值在当前目录创中建文件夹,将当前目录中a列同名文件(max,mtl,obj三种格式)移动到对应的b列目录中
时间: 2024-12-11 11:23:17 浏览: 11
在Excel中实现这个功能,你需要结合VBA宏来操作文件。首先,确保你有两列数据,A列包含文件名称(假设是`.max`, `.mtl`, `.obj`等),B列包含对应文件所需的唯一目录路径。以下是步骤和VBA代码示例:
1. **创建新宏**:
- 打开VBA编辑器(可通过菜单栏 "Developer" -> "Visual Basic" 或快捷键 `Alt + F11`)。
- 在工程资源管理器中右键点击工作簿名,选择“插入”->“Module”,然后在弹出的窗口里编写代码。
2. **代码示例**:
```vba
Sub MoveFiles()
Dim ws As Worksheet ' 工作表引用
Set ws = ThisWorkbook.Worksheets("Sheet1") ' 假设你的数据在Sheet1
Dim rng As Range ' 文件名和路径范围
Set rng = ws.Range("A:B")
Dim fileRow As Long
For Each row In rng.Rows
fileRow = row.Row
' 获取唯一目录路径
Dim uniquePath As String
If row.Cells(2, 2) <> "" Then ' 检查B2是否为空
uniquePath = row.Cells(2, 2)
Else
Debug.Print "Directory not specified for row " & fileRow
GoTo NextRow
End If
' 获取文件名
Dim fileName As String
fileName = row.Cells(1, 1)
' 检查文件扩展名
Dim ext As String
ext = Right(fileName, Len(fileName) - InStrRev(fileName, ".")) ' 取消反斜杠处理
' 创建或检查文件夹是否存在
Dim filePath As String
filePath = Join(Application.GetSaveAsFilename(uniquePath & "\" & fileName & ".", "All Files (*.*)", "Create New Folder"), "\")
If Not Dir(filePath) <> "" Then ' 如果文件夹不存在则新建
MkDir filePath
End If
' 移动文件
Dim srcFile As String
srcFile = Application.GetOpenFilename("Select a file to move", , "(*." & ext & ")", False, filePath & "\" & fileName & ext)
If srcFile <> False Then ' 如果找到了文件,则移动
If FileCopy(srcFile, filePath & "\" & fileName & ext) Then
Debug.Print "Moved " & srcFile & " to " & filePath
Else
Debug.Print "Failed to move " & srcFile & " to " & filePath
End If
Else
Debug.Print "No file selected for " & fileName
End If
NextRow:
Next row
End Sub
```
3. **运行宏**:
- 完成上述步骤后,你可以通过以下方式运行宏:
- 跑步宏按钮(绿色三角形图标)位于VBA编辑器顶部工具栏。
- 或者,按 `F5` 键。
4.
阅读全文