【问题标题】:Adding multiple excel sheet and summing dynamic number of worksheets添加多个excel工作表并对工作表的动态数量求和
【发布时间】:2020-07-21 19:37:50
【问题描述】:

我有一个代码可以将多个 Excel 文件合并到一个工作簿中。但是,在我将工作表合并到另一个工作簿之后,那些与以前的工作簿有链接的工作表都被破坏了。 我还想在新工作簿的“总计”工作表中汇总特定字段中的所有工作表。

请帮忙。

Sub MergeExcelFiles()
    Dim fnameList, fnameCurFile As Variant
    Dim countFiles, countSheets As Integer
    Dim wksCurSheet As Worksheet
    Dim wbkCurBook, wbkSrcBook As Workbook

    fnameList = Application.GetOpenFilename(FileFilter:="Microsoft Excel Workbooks (*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm", Title:="Choose Excel files to merge", MultiSelect:=True)

    If (vbBoolean <> VarType(fnameList)) Then

        If (UBound(fnameList) > 0) Then
            countFiles = 0
            countSheets = 0

            Application.ScreenUpdating = False
            Application.Calculation = xlCalculationManual

            Set wbkCurBook = ActiveWorkbook

            For Each fnameCurFile In fnameList
                countFiles = countFiles + 1

                Set wbkSrcBook = Workbooks.Open(filename:=fnameCurFile)

                For Each wksCurSheet In wbkSrcBook.Sheets
                    countSheets = countSheets + 1
                    wksCurSheet.Copy After:=wbkCurBook.Sheets(wbkCurBook.Sheets.Count)
                Next

                wbkSrcBook.Close SaveChanges:=False

            Next

            Application.ScreenUpdating = True
            Application.Calculation = xlCalculationAutomatic

            MsgBox "Procesed " & countFiles & " files" & vbCrLf & "Merged " & countSheets & " worksheets", Title:="Merge Excel files"
        End If

    Else
        MsgBox "No files selected", Title:="Merge Excel files"
    End If
End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    假设您所有的工作表都具有相同的结构并且您只想对它们进行总结,那么您可以在 Total 工作表中使用内置函数 SUM。

    您可以设置范围,然后一次将公式添加到整个范围(我只有 3 张 1、2、3 和总共)。

    Dim xRng as Range, n as integer
    
    n = Thisworkbook.Sheets.Count
    Set xRng = ThisWorkbook.Sheets(n).Range("A2:D2")
    
    xRng.FormulaR1C1 = "=SUM('" & ThisWorkbook.sheets(1).name & "':'" & ThisWorkbook.Sheets(n-1).name & "'!RC)"
    

    使用最后一行和最后一列或命名范围来使用动态范围也很好......

    我希望这至少会有所帮助:)

    【讨论】:

    • 感谢您的帮助!如果张数是动态的怎么办?如何修改您的代码以包含要添加的动态工作表数量?
    • 假设您的动态工作表是从 1 到 n 并且 n 是 Total 那么您可以使用类似在此评论帖子中编辑的内容...
    • 我尝试了编辑后的代码,但无法运行。是的,动态工作表从 1 运行到 n。存在对象定义错误。我错过了什么吗?
    • 我意识到代码没有问题,但是,我的工作表名称有空格,导致运行时错误。无论如何我可以解决这个问题吗?我必须保留工作表中的空格,因为它来自另一个工作簿。
    • 您好,再次检查新代码...它包含新字符 ' 当工作簿/工作表可以有空格时使用... "=SUM('" & ThisWorkbook.sheets(1).name & "' 请参阅我的答案完整示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    相关资源
    最近更新 更多