使用VBA将小计复制到Excel中的新工作表

使用VBA将小计复制到Excel中的新工作表,vba,excel,Vba,Excel,我在工作簿的第一张工作表上筛选一个大数据集,然后在工作簿中为主数据集第一列中的每个唯一名称创建一个单独的工作表 在为给定名称筛选主数据集后,我将尝试对特定筛选列(比如C列)进行小计,例如: Sub CreateSheets() Dim wsCurrent As Worksheet Dim wsNew As Worksheet Dim iLeft As Integer Dim length As Long Set wsCurrent = ActiveSh

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

在为给定名称筛选主数据集后,我将尝试对特定筛选列(比如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
这里的主要问题是subtotal函数调用不再在主工作表上找到引用的单元格。非常感谢您的帮助

编辑:

下面提供了正确的小计

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

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

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

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

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

所以当我运行这个时,它会提示我更新值并从Excel打开文件浏览器?知道这是干什么用的吗?你照原样复制我的代码了吗?当我第一次编写它时,我没有包含双引号和符号,因此它看起来像是
小计(9,wsCurrent.Name!C2:C“&length&”)“
当我试图运行它时,它会弹出浏览提示。请确保您复制的内容与我最初发布的内容完全一致,然后重试。如果仍然失败,您可以发布您正在运行的内容吗?因此发生更新值错误,因为我的数据库工作表名称包含一个空格,所以我解决了该问题。唯一的另一件事是,新工作表上的范围参考(当我在单元格中单击时)如下:=小计(9,Sheet1!C1:C2)范围不正确。您可以发布更新代码的一部分,上面几行和下面几行我的更改吗?希望我能看到另一个小问题,因为这应该是可行的。当我在测试文件中运行它时,它没有给我一个引用错误。我唯一的想法是你正在使用的数据集。过滤数据后,范围是否超过C1?如果没有填充数据,并且试图引用C2:C1,则可能出错。首先尝试使用硬数据,如果引用有效,则转到筛选以确保其有效。代码与我的测试数据一样工作正常。