Контекст:
Я пытаюсь Filter
Empty
значений из массива. Я знаю, что мы можем l oop массив до Redim Preserve
, но подумал, что может быть способ включить функцию Filter
. Однако, поскольку Filter
рассматривает все элементы в Array
как String
типы данных, не существует такой вещи, как arr = Filter(arr, Empty, False)
, которую я пробовал во многих формах.
Это привело меня к WorksheetFuntion.FilterXML
однако, у меня мало опыта в XPATH, и я явно делаю что-то не так, упуская концепцию элементов и узлов. Я знаю, что Excel работает на XPATH 1.0, и поэтому я искал способ «отфильтровать» пустые элементы и натолкнулся на [not (node ())] . Однако реализация этого вернула Error 1004
при получении arr1
Образец:
Sub Test()
Dim arr0 As Variant, arr1 As Variant, arr2 As Variant
arr0 = Array("A", "A", Empty, "A")
arr1 = WorksheetFunction.FilterXML("<t><s>" & Join(arr0, "</s><s>") & "</s></t>", "//s[not(node())]")
arr2 = WorksheetFunction.FilterXML("<t><s>" & Join(arr0, "</s><s>") & "</s></t>", "//s[string-length(text()) > 0]")
End Sub
Вопрос:
Чтобы обойти эту проблему, мой второй вариант заключался в проверке длины строк, которая в этом случае сделала работать и возвращать массив без пустых элементов.
Может кто-нибудь объяснить мне, как улучшить синтаксис [not(node())]
, чтобы он работал. Некоторое объяснение , почему текущий код не работает, также будет высоко оценено.