首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >新增多张excel工作表,动态累加工作表个数

新增多张excel工作表,动态累加工作表个数
EN

Stack Overflow用户
提问于 2020-07-17 09:33:20
回答 1查看 98关注 0票数 0

我有一段代码可以将多个excel文件合并到一个工作簿中。但是,在我将这些工作表合并到另一个工作簿中后,那些具有到以前工作簿的链接的工作表都断开了。我还想在新工作簿中的"Total“工作表中对特定字段中的所有工作表求和。

请帮帮忙。

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

发布于 2020-07-17 15:38:38

假设所有的工作表都有相同的结构,而你只想对它们求和,那么你可以在你的总工作表中使用内置函数sum。

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

代码语言:javascript
运行
复制
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)"

此外,使用动态范围使用最后一行和最后一列或命名范围也很好。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62945778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档