Справочная информация
Это может оказаться довольно глупым вопросом, однако я все же хочу задать его, чтобы быть уверенным.Недавно я познакомился с AdvancedFilter
через VBA, и чтение параметра CriteriaRange
принимает тип данных Variant
. Я думал, что он мог бы взять массив вместо фактического * 1012.* как следует из названия.
Пример данных
Для этого я настроил простой набор данных:
| Hdr1 | Hdr2 | Hdr3 |
|------|------|------|
| A | X | 1 |
| B | Y | 2 |
| A | Z | 3 |
| A | Y | 4 |
| B | Y | 5 |
| A | Z | 6 |
Эти данные находятся на листе с CodeName
«Источником».Кроме того, я добавил лист «Место назначения», где я хочу, чтобы отфильтрованные критерии были вставлены через xlFilterCopy
.
Код
Простой рабочий код будет выглядеть так:
Sub FilterTest()
Dim rng as range
Dim arr(1 To 2, 1 To 3) As Variant
arr(1, 1) = "Hdr1"
arr(1, 2) = "Hdr2"
arr(1, 3) = "Hdr3"
arr(2, 1) = "A"
'arr(2, 2) = "" 'Leaving empty for now
'arr(2, 3) = "" 'Leaving empty for now
Set rng = Destination.Range("A1:C2")
rng = arr
Source.Range("A1:C7").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=rng, CopyToRange:=Destination.Range("A4")
End Sub
Проблема / Любопытство
Поскольку вышеприведенное работает нормально, мне любопытно, есть ли способ избежатьзаполнение CriteriaRange
до применения AdvancedFilter
или даже непосредственное использование массива arr
.Как я полагаю, мы не можем этого сделать, но мне любопытно, что это не так.
В то время как заполнение rng
равномерного размера с помощью arr
работает, очевидно, следующая строка выдаст ошибку (1004):
Source.Range("A1:D7").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=arr, CopyToRange:=Destination.Range("A4")
Тип данных Variant
для CriteriaRange
представляется ожидаемым (согласно документации), но, по-видимому, только объекты Range
являются фактическими рабочими параметрами.
Любой определенный ответ относительно того, возможно ли это?=) * +1058 *