Vba用弹窗选择文件夹批量创建以多个单元格命名新的子文件夹,将多个单元格内容写入模板工作表相对应的单元格,然后另存为以多个单元格内容命名的工作表到新的子文件夹中
时间: 2024-12-20 14:14:42 浏览: 0
在VBA (Visual Basic for Applications) 中,你可以编写宏来完成这个任务,包括以下几个步骤:
1. 弹出文件浏览器选择一个包含多个单元格引用的源工作簿(通常存储了需要创建子文件夹名称的列表)。
2. 使用`Application.GetOpenFilename`函数打开一个对话框让用户选择根文件夹,或者直接指定路径。
3. 遍历源工作簿的特定列(假设这些列包含了文件夹名称和新建工作表的标题),例如A列和B列。
4. 对于每个文件夹名称(A列),找到对应的新工作表标题(B列)。
5. 在根文件夹下创建一个新的子文件夹,使用` MkDir` 函数或 `CreateFolder` 方法来创建目录,传入从A列获取的文件夹名作为参数。
6. 创建一个新的Excel工作簿,并复制一个预设的模板(或者空白工作簿)到新创建的子文件夹中,用`ActiveWorkbook.SaveAs`方法保存为以B列内容命名的工作表。
7. 将源工作簿中B列对应的单元格数据写入新工作的对应单元格,可以使用`Range.Copy` 和 `Destination.Cells.PasteSpecial` 进行粘贴。
下面是一个简单的伪代码示例:
```vba
Sub CreateFoldersAndSaveWorksheets()
Dim sourceSheet As Worksheet
Set sourceSheet = ThisWorkbook.Sheets("Source") ' 指定源工作表
Dim folderPath As String
folderPath = Application.GetOpenFilename('选取文件夹') ' 用户选择的根文件夹
Dim i As Long
For i = 1 To sourceSheet.Range("A" & Rows.Count).End(xlUp).Row
Dim folderName As String
folderName = sourceSheet.Cells(i, 1).Value ' 文件夹名称
Dim sheetTitle As String
sheetTitle = sourceSheet.Cells(i, 2).Value ' 新工作表标题
' 创建子文件夹
If Not Dir(folderPath & "\" & folderName, vbDirectory) Then
MkDir folderPath & "\" & folderName
End If
' 创建新工作簿并保存
Dim newWorkbook As Workbook
Set newWorkbook = Workbooks.Add
' ... (复制模板或设置初始值)
newWorkbook.Worksheets(1).Cells(1, 1).Value = sheetTitle
newWorkbook.SaveAs Filename:=folderPath & "\" & folderName & "\" & sheetTitle & ".xlsx", FileFormat:=xlExcel12
' 写入源数据
newWorkbook.Worksheets(1).Cells(1, 2).Value = sourceSheet.Cells(i, 2).Value
' ... (如果有多行数据,可以使用循环或递归)
' 关闭新工作簿,清理内存
newWorkbook.Close SaveChanges:=False
Next i
End Sub
```
阅读全文