Excel:vba实现合并工作簿中的表

A、B、C这三个工作簿的数据都在sheet1,表头一样

复制代码
Sub MergeWorkbooks()
    Dim FolderPath As String
    Dim FileName As String
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim mainWb As Workbook
    Dim mainWs As Worksheet
    Dim lastRow As Long
    Dim lastcol As Long
    
    Dim pasteRange As Range

    ' 主工作簿设置为当前工作簿
    Set mainWb = ThisWorkbook
    Set mainWs = mainWb.Sheets(1) ' 假设数据合并到第一张表中
    
    mainWs.Cells.Clear

    ' 获取文件夹路径(你可以根据需求修改文件夹路径)
    'FolderPath = "D:\VBA\hebin\" ' 更改为你实际存储文件的路径
    FolderPath = ThisWorkbook.Path & "\"

    ' 确保路径以反斜杠结尾
    If Right(FolderPath, 1) <> "\" Then
        FolderPath = FolderPath & "\"
    End If

    ' 获取第一个Excel文件
    FileName = Dir(FolderPath & "*.xlsx")
    
    ' 如果找不到任何文件,则提示并退出
    If FileName = "" Then
        MsgBox "未找到任何Excel文件,请检查路径或文件格式。"
        Exit Sub
    End If

    ' 循环所有Excel文件
    Do While FileName <> mainWb.Name
        ' 打开工作簿
        On Error Resume Next
        Set wb = Workbooks.Open(FolderPath & FileName)
        If Err.Number <> 0 Then
            MsgBox "无法打开文件:" & FileName
            Err.Clear
            Exit Sub
        End If
        On Error GoTo 0
        
        ' 假设数据在每个工作簿的第一张表中,找到最后一行并复制数据
        Set ws = wb.Sheets(1)
        lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
        lastcol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
        
        ws.Cells(1, 1).Resize(1, lastcol).Copy Destination:=mainWs.Cells(1, 1)
        
        ' 查找主工作簿中当前的最后一行
        If Application.WorksheetFunction.CountA(mainWs.Cells) > 0 Then
            Set pasteRange = mainWs.Cells(mainWs.Rows.Count, 1).End(xlUp).Offset(1, 0)
        Else
            Set pasteRange = mainWs.Cells(1, 1)
        End If

        ' 复制工作簿中的数据并粘贴到主工作簿
        'ws.Range("A1:" & ws.Cells(lastcol, lastRow).Address).Copy
        ws.Range("A2:E" & lastRow).Copy
        mainWs.Paste Destination:=pasteRange

        ' 关闭工作簿(不保存)
        wb.Close False

        ' 获取下一个文件
        FileName = Dir
    Loop
    
    With mainWs.Cells
        .HorizontalAlignment = xlCenter '设置水平居中
        .VerticalAlignment = xlCenter '设置垂直居中
        .Font.Size = 14
    End With

    ' 完成后提示
    MsgBox "所有工作簿已成功合并!"
End Sub

循环获取文件夹中的每个文件

复制代码
Sub ListFiles()
    Dim fileName As String
    ' 第一次调用 Dir 并传入路径,获取第一个文件
    fileName = Dir(ThisWorkbook.Path & "/")
    
    ' 使用循环,逐步获取下一个文件
    Do While fileName <> ""
        MsgBox fileName   ' 显示文件名
        fileName = Dir    ' 不带参数,获取下一个文件
    Loop
End Sub
'如果想要获取路径,就Thisworkbook.Path & "/" & filename 
相关推荐
_oP_i25 分钟前
Excel 发现此工作表中有一处或多处公式引用错误。请检查公式中的单元格引用、区域名称、已定义名称以及到其他工作簿的链接是否均正确无误。弹窗
excel
开开心心就好7 小时前
免费PDF转图片软件
javascript·智能手机·pdf·flask·word·excel·scikit-learn
简鹿办公16 小时前
Excel 表格内批量添加前缀与后缀的实用方法
excel·excel单元格统一加后缀文字
炸毛的飞鼠16 小时前
智警杯备赛--excel模块
excel
呆萌的代Ma18 小时前
Cursor实现用excel数据填充word模版的方法
word·excel
yanweijie03171 天前
Excel-vlookup -多条件匹配,返回指定列处的值
excel
Channing Lewis1 天前
sql server如何创建表导入excel的数据
数据库·oracle·excel
沉到海底去吧Go2 天前
【工具教程】PDF电子发票提取明细导出Excel表格,OFD电子发票行程单提取保存表格,具体操作流程
pdf·excel
开开心心就好2 天前
高效Excel合并拆分软件
开发语言·javascript·c#·ocr·排序算法·excel·最小二乘法
沉到海底去吧Go3 天前
【行驶证识别成表格】批量OCR行驶证识别与Excel自动化处理系统,行驶证扫描件和照片图片识别后保存为Excel表格,基于QT和华为ocr识别的实现教程
自动化·ocr·excel·行驶证识别·行驶证识别表格·批量行驶证读取表格