在多个选项卡 VBA 上汇总/平均行到表格

Posted

技术标签:

【中文标题】在多个选项卡 VBA 上汇总/平均行到表格【英文标题】:Sum/Average Rows to Table on Multiple Tabs VBA 【发布时间】:2018-10-17 19:33:04 【问题描述】:

我想为总和或平均值添加小计。这些选项卡上的表格都具有相同的行长和相同的标题(有一组 8 个选项卡有 3 个附加列,因此稍后我将创建另一个循环来解决这些问题)。

我不确定如何使以下代码中的表引用通用以引用该特定选项卡上的任何表。这就是我到目前为止所拥有的......任何帮助将不胜感激!谢谢!

Sub AddTotals()

Dim tablename As Range
Dim TargetSheet As Worksheet
Dim tbl As ListObject
Dim rng As Range

Worksheets("Tab Names").Activate

For Each tablename In Worksheets("Tab Names").Range("B1:B64").Cells
    Set TargetSheet = Worksheets(CStr(tablename.Value))
    Set rng = Range(TargetSheet.Range("F11"), TargetSheet.Range("F11").SpecialCells(xlLastCell))

    Range("F11").Select
    ActiveSheet.ListObjects(Active).ShowTotals = True
    Range("Table2[[#Totals],[Var %]]").Select
    ActiveSheet.ListObjects("Table2").ListColumns("Var %").TotalsCalculation = _
    xlTotalsCalculationAverage
    Range("Table2[[#Totals],[Var $]]").Select
    ActiveSheet.ListObjects("Table2").ListColumns("Var $").TotalsCalculation = _
    xlTotalsCalculationSum

Next tablename

【问题讨论】:

只是为了验证,给定Range("Table2[[#Totals],[Var %]]").Select,您希望将 Table2 替换为表名吗?那么这只是连接这个字符串的问题。 Range(CStr(tablename.Value) & "[[#Totals],[Var %]]").Select 我也想连接 ActiveSheet 行,以便可以为每个选项卡添加小计! 【参考方案1】:

如果每张纸上只有一个表,则解决方案相对简单。但是,如果有多个表,您将需要在选项卡名称表上标识表名称以及选项卡名称。如果每张工作表只有一个表格,这就是解决方案。

For Each tablename In Worksheets("Tab Names").Range("B1:B64")
    Set TargetSheet = Worksheets(CStr(tablename.Value))
    With TargetSheet.ListObjects(1)
        .ShowTotals = True
        .ListColumns("Var %").TotalsCalculation = xlTotalsCalculationAverage
        .ListColumns("Var $").TotalsCalculation = xlTotalsCalculationSum
    End With
Next tablename

我在您的代码中删除了许多不必要的范围选择。无需选择对象即可使用它们。事实上,如果你这样做,它会减慢速度。

【讨论】:

以上是关于在多个选项卡 VBA 上汇总/平均行到表格的主要内容,如果未能解决你的问题,请参考以下文章

用于多个选项卡的 Google 表格自动时间戳脚本

VBA自定义密码保护超过1张

使用 VBA 将 MS Access 记录集导出到 Excel 中的多个工作表/选项卡会生成只读文件

如何通过 VBA 设置访问选项卡控件的页面名称

仅使用一个视图控制器的具有多个选项卡的选项卡栏

在 Python 中将多个 CSV 文件合并到电子表格的单独选项卡中