|
- Dim MyPath, MyName, AWbName,dirName,curVbsDirDim, fso,xlApp
- Set fso = CreateObject("Scripting.FileSystemObject")
- curVbsDir=fso.GetFolder(".").Path
- Function BrowseForFile()
- Dim shell : Set shell = CreateObject("Shell.Application")
- Dim file : Set file = shell.BrowseForFolder(0, "选择文件夹:", &H4000, curVbsDir)
- BrowseForFile = file.self.Path
- End Function
- dirName=BrowseForFile
- Set xlApp = WScript.CreateObject("Excel.Application")
- Dim Wb, WbN,G , Num ,BOX ,fl,curWb
- xlApp.ScreenUpdating = False
- Set curWb=xlApp.Workbooks.Add()
- Num = 0
- If Not fso.FolderExists(dirName & "") Then
- MsgBox "文件夹" & dirName & "不存在!"
- Else
- On Error Goto 0
- For Each fl In fso.GetFolder(dirName).Files
- If fso.GetExtensionName(fl.Path) = "xlsx" Then
- Num = Num + 1
- Set Wb=xlApp.Workbooks.open(fl.Path)
- For G = 1 To Wb.Sheets.Count
- curWb.ActiveSheet.Cells(curWb.ActiveSheet.Range("A65536").End(-4162).Row+1, 1) = fl.Name & " FOR " & Wb.Sheets(G).Name
- Wb.Sheets(G).UsedRange.Copy curWb.ActiveSheet.Cells(curWb.ActiveSheet.Range("A65536").End(-4162).Row+2, 1)
- Next
- WbN = WbN & Chr(13) & Wb.Name
- Wb.Close False
- End If
- Next
- xlApp.ScreenUpdating = True
- curWb.SaveAs curVbsDir & "" & fso.getfolder(dirName).Name & ".xlsx", 51
- xlApp.visible=True
- xlApp.WindowState=-4137
- MsgBox "共合并了" & Num & "个工作薄下的全部工作表。如下:" & Chr(13) & WbN, vbInformation, "提示"
- End If
- Set fso = Nothing
- Set xlApp=Nothing
- '这段 VBScript 代码的功能是将一个文件夹中所有的 .xlsx 文件中的所有工作表合并到一个新的 Excel 文件中。以下是每个部分的功能:
- '1. `BrowseForFile()` 函数用于打开一个对话框,让用户选择要合并的文件夹。
- '2. `dirName` 变量存储用户选择的文件夹路径。
- '3. `xlApp` 变量创建一个新的 Excel 应用程序对象。
- '4. `curWb` 变量创建一个新的工作簿对象,作为合并后的文件。
- '5. `Num` 变量用于计算合并的工作表数。
- '6'. `For Each` 循环遍历文件夹中的所有文件。
- '7. `If` 语句用于确定文件是否为 .xlsx 文件。
- '8. `Set Wb` 语句打开当前文件,并将其存储在变量 `Wb` 中。
- '9. `For` 循环遍历当前工作簿中的所有工作表。
- '10. `curWb.ActiveSheet.Cells()` 语句将当前工作表的名称添加到新工作簿的第一列的下一个空单元格。
- '11. `Wb.Sheets(G).UsedRange.Copy curWb.ActiveSheet.Cells()` 语句将当前工作表的内容复制到新工作簿的第一列下一个空单元格的下一行。
- '12. `WbN` 变量存储已合并的工作簿的名称。
- '13. `Wb.Close False` 语句关闭当前工作簿,不保存更改。
- '14. `xlApp.ScreenUpdating = True` 语句启用屏幕更新。
- '15. `curWb.SaveAs` 语句将新工作簿另存为当前脚本所在文件夹下的一个新文件,并使用文件夹的名称作为文件名。
- '16. `xlApp.visible=True` 语句显示 Excel 应用程序窗口。
- '17. `xlApp.WindowState=-4137` 语句将 Excel 应用程序窗口最小化。
- '18. 最后,`MsgBox` 语句显示合并的工作表数和已合并的工作簿的名称。
- '请注意,此代码使用了 Excel COM 对象,因此需要在运行代码之前确保已安装 Excel 并启用了 Microsoft Excel 对象库。[code]
- Sub 汇总文件()
- strPath = "D:\315\2023年\4月"
- Dim str As String
- Dim i As Integer
- Dim wb As Workbook
- str = Dir(strPath & "*.xlsx")
- Do While str <> ""
- Set wb = Workbooks.Open(strPath & str)
- wb.Sheets(1).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
- ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Split(wb.Name, ".")(0)
- wb.Close
- str = Dir
- Loop
- Sheets(1).Activate
- Range("a1").Select
- End Sub
- Sub 合并当前工作簿下的所有工作表()
- Application.ScreenUpdating = False '屏幕不再闪烁
- For j = 1 To Sheets.Count
- If Sheets(j).Name <> ActiveSheet.Name Then
- X = Range("A65536").End(xlUp).Row + 1
- Sheets(j).UsedRange.Copy Cells(X, 1)
- End If
- Next
- Range("B1").Select
- Application.ScreenUpdating = True
- MsgBox "当前工作簿下的全部工作表已经合并完毕!", vbInformation, "提示"
- End Sub
复制代码 [/code] |
|