vba 合并当前文件夹内多个excel的指定工作表到同一个excel的同名工作表,避免提示"下标越界"
时间: 2023-07-28 07:10:37 浏览: 192
下面是一个 VBA 的代码示例,可以合并当前文件夹内多个 Excel 文件的指定工作表到同一个 Excel 文件的同名工作表,同时避免下标越界的问题。
```vb
Sub MergeWorksheets()
Dim Path As String, Filename As String, Sheet As String
Dim wb As Workbook, ws As Worksheet, Target As Range
Dim i As Integer, j As Integer
' 指定要合并的工作表名称
Sheet = "Sheet1"
' 获取当前文件夹路径
Path = ActiveWorkbook.Path & "\"
' 初始化合并结果的目标工作表
Set wb = Workbooks.Add
Set ws = wb.Sheets(1)
Set Target = ws.Range("A1")
' 遍历当前文件夹内的所有 Excel 文件
Filename = Dir(Path & "*.xlsx")
Do While Filename <> ""
' 打开 Excel 文件并复制指定工作表到目标工作表
Set wb = Workbooks.Open(Path & Filename, False, True)
On Error Resume Next
Set ws = wb.Sheets(Sheet)
If Err.Number = 0 Then
For i = 1 To ws.UsedRange.Rows.Count
For j = 1 To ws.UsedRange.Columns.Count
Target.Offset(i - 1, j - 1).Value = ws.Cells(i, j).Value
Next j
Next i
End If
Err.Clear
wb.Close False
Filename = Dir()
Loop
' 调整合并结果的格式
ws.Columns.AutoFit
ws.Rows.AutoFit
ws.Range("A1").Select
MsgBox "合并完成!"
End Sub
```
需要注意的是,这段代码默认将当前文件夹内的所有 Excel 文件都合并到同一个 Excel 文件的同名工作表中,如果要指定要合并的文件或者合并到不同的工作表中,可以根据实际情况进行修改。另外,为了避免下标越界的问题,代码中使用了 UsedRange 属性来获取工作表的数据范围,而不是手动指定下标。
阅读全文