【问题标题】:Copying subtotal to a new worksheet in Excel using VBA使用 VBA 将小计复制到 Excel 中的新工作表
【发布时间】:2017-07-01 04:48:07
【问题描述】:

我在我的工作簿的第一个工作表上过滤一个大型数据集,然后我在工作簿中为主数据集第一列中的每个唯一名称创建一个单独的工作表。

在过滤给定名称的主要数据集后,我尝试对特定过滤列(比如说 C 列)进行小计,例如:

Sub CreateSheets()

    Dim wsCurrent As Worksheet
    Dim wsNew As Worksheet
    Dim iLeft As Integer
    Dim length As Long

    Set wsCurrent = ActiveSheet
    Application.ScreenUpdating = False

    'Copy list of all players and remove duplicates
    Range("A2", Range("A2").End(xlDown)).Copy Range("AY1")
    Range("AY1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes

    'Iterator
    iLeft = Range("AY1").CurrentRegion.Rows.Count - 1

    'For each player
    Do While iLeft > 13
        Set wsNew = Worksheets.Add
        With wsCurrent.Range("A2").CurrentRegion
            'Player name from copied list
            .AutoFilter Field:=1, Criteria1:=wsCurrent.Range("AY1").Offset(iLeft).Value

            'Hits
            .AutoFilter Field:=3, Criteria1:="1"
            length = .Range("C" & Rows.Count).End(xlUp).Row
            wsNew.Range("A1") = "=SUBTOTAL(9," & wsCurrent.Name & "!C2:C" & length & ")"

            'Turn off filters
            '.AutoFilter
        End With
        'Name player sheet and move onto next
        wsNew.Name = wsCurrent.Range("AY1").Offset(iLeft).Value
        iLeft = iLeft - 1
    Loop

    'Clear player names in copied region
    wsCurrent.Range("AY1").CurrentRegion.Clear
    Application.ScreenUpdating = True

End Sub

这里的主要问题是小计函数调用不再在主工作表上找到引用的单元格。非常感谢任何帮助。

编辑:

以下现在提供了正确的小计。

length = .Range("C" & Rows.Count).End(xlUp).Row
wsNew.Range("A1") = "=SUBTOTAL(9," & wsCurrent.Name & "!C2:C" & length & ")"
wsNew.Range("A1").Value = wsNew.Range("A1").Value

最后一行确保当过滤器被移除时,可见单元格的原始总和仍然存在(而不是在移除过滤器的情况下获取可见单元格的总和)。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    您是否尝试在小计公式中包含原始工作表名称作为参考?

    wsNew.Range("A1") = "=SUBTOTAL(9," & wsCurrent.Name & "!C2:C" & length & ")"
    

    我将9,C2:C 替换为9, " & wsCurrent.Name & "!C2:C,它应该正确引用它。

    【讨论】:

    • 所以当我运行它时,它会提示我更新值并从 Excel 打开文件资源管理器?知道这是干什么用的吗?
    • 您是否按原样复制了我的代码?当我第一次写它时,我没有包含双引号和 & 符号,所以它看起来像 SUBTOTAL(9,wsCurrent.Name!C2:C" & length & ")",当我尝试运行它时,它会显示浏览提示。确保完全按照我最初发布的方式复制它,然后重试。如果仍然失败,您可以发布您正在运行的内容吗?
    • 所以发生了更新值错误,因为我的数据库工作表名称包含一个空格,所以我解决了这个问题。唯一的另一件事是新工作表上的范围引用(当我单击单元格时)如下: =SUBTOTAL(9,Sheet1!C1:C2) 范围不正确。
    • 你能把你更新的代码部分贴出来,上面几行,下面几行吗?希望我能看到另一个小问题,因为那应该可以。当我通过测试文件运行它时,它没有给我一个参考错误。
    • 我唯一的想法是您正在使用的数据集。当您过滤数据时,您的范围是否超出 C1?如果没有填充数据并且它试图引用 C2:C1 它可能会出错。首先尝试使用硬数据,如果参考有效,则继续进行过滤以确保其有效。该代码与我的测试数据一样运行良好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多