首页 > 解决方案 > 使用单元格的文本作为具有结构化引用的 range() 的参数

问题描述

我想用 vba 执行一个高级过滤器。有问题的步骤是源表的名称(用于高级过滤器)写在一个单元格中,似乎我找不到将它传递给range().

这是想法:

包含由高级过滤器生成的日期和地点的表格。 一个单元格包含源表的名称,这里是 DatePlace。

F5 单元格包含“DatePlace”,它是应该在高级过滤器中使用的表的名称。通过录制宏,我看到我们可以在 VBA 中使用结构化引用,但是当我尝试从 F5 的值中获取引用时,高级过滤器不再执行。

我收到此错误消息框(从法语翻译):

Execution error '1004':
Error defined by the application or by the object

这是我的尝试之一:

Worksheets("Planning")
.Range(Worksheets("Macro").Range("$F$5").Text & "[[#Headers],[#Data]]")
.AdvancedFilter Action _:=xlFilterCopy, 
CriteriaRange:=Worksheets("Planning").Range("E7:F8"), 
CopyToRange:=Worksheets("Planning").Range( _"E11:F11"), Unique:=False

我尝试使用.Value而不是.Text. 我也尝试用字符串变量传递它。我还尝试在 F5 单元格中编写完整的参考。当我试图获取一个范围变量时,我只是将问题转移到了该变量的启动。

欢迎任何帮助。

编辑 1:这种方式可行,但我必须对结构化引用进行硬编码,而这正是我想要避免的。

Worksheets("Planning")
.Range("DateLieu[[#Headers],[#Data]]")
.AdvancedFilter Action _:=xlFilterCopy, 
CriteriaRange:=Range("A6:B7"), 
CopyToRange:=Range( _"A10:B10"), Unique:=False

编辑2:它应该没有问题。这是代码现在的样子。

' Variables
Dim rngPlanning As String

' Initiations
rngPlanning = ThisWorkbook.Worksheets("Macro").Range("$F$5").Text & "[[#Headers],[#Data]]"

' Actions
    Application.CutCopyMode = False
    Debug.Print (rngPlanning)
    Worksheets("Planning").Range(rngPlanning).AdvancedFilter _
        Action:=xlFilterCopy, _
        CriteriaRange:=Worksheets("Macro").Range("$E$7:$F$8"), _
        CopyToRange:=Worksheets("Macro").Range("$E$11:$F$11"), _
        Unique:=False

标签: excelvbastructured-references

解决方案


推荐阅读