|
|
- Sub ProcessWorkbooks()
- Dim fd As FileDialog
- Dim selectedFolder As String
- Dim fileName As String
- Dim srcWorkbook As Workbook
-
- Dim anyCopied As Boolean
-
- ' 初始化标志
- anyCopied = False
-
- ' 优化执行
- Application.ScreenUpdating = False
- Application.DisplayAlerts = False
-
-
-
- ' 步骤1:选择文件夹对话框
- Set fd = Application.FileDialog(msoFileDialogFolderPicker)
- With fd
- .Title = "请选择包含Excel文件的文件夹"
- If .Show = -1 Then
- selectedFolder = .SelectedItems(1) & IIf(Right(.SelectedItems(1), 1) = "", "", "")
- ' 步骤2:删除所有原始工作表(保留临时工作表)
-
- Do While ThisWorkbook.Worksheets.Count > 1
- ThisWorkbook.Worksheets(1).Delete
- Loop
- Else
- MsgBox "未选择文件夹,操作已取消。"
- GoTo CleanUp
- End If
- End With
-
- ' 步骤3:遍历并处理Excel文件
- fileName = Dir(selectedFolder & "*.xls*")
- Do While fileName <> ""
- ' 跳过临时文件
- If Left(fileName, 2) <> "~$" Then
- On Error Resume Next
- Set srcWorkbook = Workbooks.Open(selectedFolder & fileName, ReadOnly:=True)
-
- If Not srcWorkbook Is Nothing Then
- ' 复制"表1"(按名称匹配)
- On Error GoTo 0
-
- srcWorkbook.Worksheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
- anyCopied = True
- srcWorkbook.Close False
- End If
- End If
- fileName = Dir()
- Loop
-
- ' 清理临时工作表
- If anyCopied Then
- Application.DisplayAlerts = False
- ThisWorkbook.Worksheets(1).Delete
- Application.DisplayAlerts = True
-
- End If
- MsgBox "处理完成!共合并 " & ThisWorkbook.Worksheets.Count & " 个工作表"
- CleanUp:
- ' 恢复设置
- Application.ScreenUpdating = True
- Application.DisplayAlerts = True
-
- End Sub
复制代码 |
|