[背景:]
[自最近以来,我就知道了一个通过使用AutoFilter
创建的秘密命名范围。通常(如果不总是这样)将其称为“ _FilterDatabase”。
我曾考虑过玩这个,但后来卡在了它所指的Range
对象上。让我用以下示例进行说明:
测试数据:]
| Header1 | Header2 |
|---------|---------|
| 50 | |
| 10 | |
| 30 | |
| 40 | |
| 20 | |
测试代码:]
Sub Test()
With Sheet1
.Range("A1:B1").AutoFilter 1, ">40"
Dim rng As Range: Set rng = .Range("_FilterDatabase")
If rng.SpecialCells(12).Count > 2 Then
rng.Columns(2).Offset(1).Resize(rng.Rows.Count - 1, 1).Value = "Check"
End If
.Range("A1:B1").AutoFilter
End With
End Sub
问题:] >>
立即执行以下代码:
Sub Test() With Sheet1 .Range("A1:B1").AutoFilter 1, ">30" Dim rng As Range: Set rng = .Range("_FilterDatabase") If rng.SpecialCells(12).Count > 2 Then rng.Columns(2).Offset(1).Resize(rng.Rows.Count - 1, 1).Value = "Check" End If .Range("A1:B1").AutoFilter End With End Sub
但是这将跳过对
SpecialCells
的测试,因为命名范围现在将引用A1:B1
而不是A1:B6
。
问题:
使用.ShowAllData
而不是.AutoFilter
解决了问题:
Sub Test() With Sheet1 .Range("A1:B1").AutoFilter 1, ">30" Dim rng As Range: Set rng = .Range("_FilterDatabase") If rng.SpecialCells(12).Count > 2 Then rng.Columns(2).Offset(1).Resize(rng.Rows.Count - 1, 1).Value = "Check" End If .ShowAllData End With End Sub
但是,
.AutoFilter
清除过滤器并将其从我们的范围内删除。在这两种情况下,秘密的命名范围都将保留在名称管理器下的Formulas
选项卡中。
有人知道为什么ShowAllData
确实会影响第二轮的返回范围吗?
背景:从最近开始,我就知道了一个通过使用自动筛选器创建的秘密命名范围。通常(如果不是始终)将其称为“ _FilterDatabase”。我考虑过玩...
我已经找到了自己的问题的答案(事后看来,这似乎与我的发现不符)。根据我的问题,AutoFilter
将立即在水下创建一个加密的命名范围,通常(如果不是始终如此)称为"_FilterDatabase"
。我注意到的是以下内容: