在AdvancedFilter VBA生成的表格中引用表格标题

在AdvancedFilter VBA生成的表格中引用表格标题,vba,excel,Vba,Excel,我有一个宏,它接收一些用户输入值,以过滤原始数据并将其复制到用户可见的工作表中 Sheets("RawData").Range("Raw[#All]").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("RawData").Range("AH1:AL" & (i + 1)), _ CopyToRange:=Sheets("User").Range("A15"), Unique:=False 从新复制的数据生成一个表

我有一个宏,它接收一些用户输入值,以过滤原始数据并将其复制到用户可见的工作表中

Sheets("RawData").Range("Raw[#All]").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("RawData").Range("AH1:AL" & (i + 1)), _
CopyToRange:=Sheets("User").Range("A15"), Unique:=False
从新复制的数据生成一个表

Sheets("User").Range("A15").CurrentRegion.Select
Set rng = Selection
Set tbl = Sheets("User").ListObjects.Add(xlSrcRange, rng, xlYes)
    tbl.Name = "userSelections"
我在另一张表上有一个“Pareto”表,如果事件发生在同一天,它将与之匹配:

=COUNTIFS(userSelections[MMM-YY], [Event Date])
但是,当宏重新生成“userTable”时,它会重新创建标题,“Pareto”中的公式会丢失对“userTable”的引用,从而导致此#REF错误

=COUNTIFS(#REF!,[Event Date])

将计算模式转为手动不起作用,并且仅使用
DataBodyRange.Rows.Delete
DataBodyRange.ClearContents
删除表格内容不起作用

您的问题是每次都要删除表并重新创建它。删除表时,引用该特定表的任何公式都将出现引用错误,因为该表不再存在(即使新表具有相同的名称)

我建议删除表数据,然后将新数据插入现有表中

未经测试

Sub main()
    Dim tbl As ListObject
    Dim rng As Range

    'set the tbl variable to the existing table
    Set tbl = Sheets("User").ListObjects("userSelections")

    'delete the data from the existing table
    tbl.DataBodyRange.Delete

    'add the new data to the existing table
    'tbl.Range accesses the range the tbl covers
    'tbl.Range.Cells(1,1) references the first row and column (first cell) in the table range
    'tbl.Range.Cells(1,1).Offset(1,0) references the second row in the table, where your data will start
    Sheets("RawData").Range("Raw[#All]").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("RawData").Range("AH2:AL" & (i + 1)), _
    CopyToRange:=tbl.Range.Cells(1, 1).Offset(1, 0), Unique:=False
End Sub

这将把数据复制到表中。该表将自行调整以包含所有数据,因此实际上无需每次创建新表。

我无法找到保留引用的方法,但通过在每次重新创建表后插入公式找到了解决方法:

Sheets("RawData").Range("Raw[#All]").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("RawData").Range("AH1:AL" & (i + 1)), _
CopyToRange:=Sheets("User").Range("A15"), Unique:=False

Sheets("User").Range("A15").CurrentRegion.Select

Set rng = Selection
Set tbl = Sheets("User").ListObjects.Add(xlSrcRange, rng, xlYes)
    tbl.Name = "userSelections"

Sheets("Totals").ListObjects("tblTotal").ListColumns("Total Events").DataBodyRange.FormulaR1C1 = _
"=IF([RowNum] = """", """", COUNTIF(userSelections[MMM-YY], [Event Date]))"

那么你的问题到底是什么?@ARich如何在Countif公式中保留对userTable的引用这保留了表,但将“Raw”的标题复制为“userSelections”的第二行。正确过滤的原始数据被复制,但作为范围而不是表。因此,表总是只有两行,两行都是重复的标题。