exl合并的问题,就是将多个exl表合并成一个exl表现在是有1个exl,分别给10个人做统计,然后他们会在后面添加上自己的数据(文字),10个人的编辑区域不会重合,然后得到10个exl,需要将这10个exl再

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/22 18:41:00
exl合并的问题,就是将多个exl表合并成一个exl表现在是有1个exl,分别给10个人做统计,然后他们会在后面添加上自己的数据(文字),10个人的编辑区域不会重合,然后得到10个exl,需要将这10

exl合并的问题,就是将多个exl表合并成一个exl表现在是有1个exl,分别给10个人做统计,然后他们会在后面添加上自己的数据(文字),10个人的编辑区域不会重合,然后得到10个exl,需要将这10个exl再
exl合并的问题,就是将多个exl表合并成一个exl表
现在是有1个exl,分别给10个人做统计,然后他们会在后面添加上自己的数据(文字),10个人的编辑区域不会重合,然后得到10个exl,需要将这10个exl再合成一个exl该怎么做?

exl合并的问题,就是将多个exl表合并成一个exl表现在是有1个exl,分别给10个人做统计,然后他们会在后面添加上自己的数据(文字),10个人的编辑区域不会重合,然后得到10个exl,需要将这10个exl再
Option Explicit
Sub 多簿合并()
Dim Wb As Workbook
Dim bName As Variant
Dim tempName As String, i As Integer, DataRow As Long, j As Long, k As Long, m As Integer
Dim MyMtrx() As String, MainListRow As Long
Dim ErrbName As String
bName = Array("城东公客", "登封", "港区", "巩义", "郊区", "金水公客", "上街", "网建", "未分区", "西区公客") '分表名称
Range("T2:IV" & Rows.Count).Clear '清除T以后全部列
MainListRow = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Row - 1 '获取主表最后一行行号
Application.ScreenUpdating = False '关闭屏幕刷新
For i = 0 To UBound(bName)
    tempName = ThisWorkbook.Path & "\" & bName(i) & ".xls" '分表路径名称
    On Error GoTo CheckError '开启错误捕获
    Set Wb = GetObject(tempName) '获取分表
    On Error GoTo 0 '关闭错误捕获
    With Wb.Sheets(1)
        DataRow = .UsedRange.Rows.Count + .UsedRange.Row - 1 '获取分表最后一行行号
        k = 0 '初始化
        For j = 1 To DataRow
            If .Range("T" & j) <> "" Then '把分表中T列非空白的行的关键信息、备注信息保存到数组,E、F、I、T列是关键信息,T是备注信息
                k = k + 1
                ReDim Preserve MyMtrx(1 To 4, 1 To k)
                MyMtrx(1, k) = .Range("E" & j)
                MyMtrx(2, k) = .Range("F" & j)
                MyMtrx(3, k) = .Range("I" & j)
                MyMtrx(4, k) = .Range("T" & j)
            End If
        Next j
    End With
    Wb.Close False '关闭分表
    Set Wb = Nothing '清除分表变量
    For j = 2 To UBound(MyMtrx, 2) '通过循环输出备注信息,1为表头,从2开始
        For k = 2 To MainListRow
            If Range("E" & k).Text = MyMtrx(1, j) And Range("F" & k).Text = MyMtrx(2, j) And Range("I" & k).Text = MyMtrx(3, j) Then '关键信息全部吻合
                For m = Range("T1").Column To Range("IV1").Column '通过循环找空白位置
                    If Cells(k, m) = "" Then '找到空白位置
                        Cells(k, m) = MyMtrx(4, j) '输出
                        Exit For
                    End If
                Next m
                Exit For
            End If
        Next k
        If k > MainListRow Then
            MsgBox "分表-" & bName(i) & "-有以下信息无法在主表中匹配:" & vbCrLf & vbCrLf & MyMtrx(1, j) & vbCrLf & MyMtrx(2, j) & vbCrLf & MyMtrx(3, j)
            If MsgBox("是否结束本程序?", vbYesNo, "有异常") = vbYes Then
                Application.ScreenUpdating = True
                Exit Sub
            End If
        End If
    Next j
    Erase MyMtrx '清除数组
Pass:
Next i '处理下一个分表
If Len(ErrbName) > 0 Then
    MsgBox "没有找到以下工作簿:" & vbCrLf & ErrbName
End If
Application.ScreenUpdating = True
Exit Sub
CheckError:
ErrbName = ErrbName & vbCrLf & bName(i)  '记录错误工作簿名
Resume Pass
End Sub