Я работаю с макросом в excel VBA. У меня есть переменная следующим образом:
debug.Print(Categories)
Tools & Home Improvement
›
Power & Hand Tools
›
Power Tool Parts & Accessories
›
Woodworking Project Plans & Kits
›
Woodworking Project Kits
Я пытаюсь разделить строку следующим образом в окне Immediate
, но получаю сообщение об ошибке: "Run Type Error 13, Type Mismatch"
debug.Print(Split(Categories, ">"))
Я пытаюсь извлечь только Tools & Home Improvement
из Categories
переменной. Есть ли какая-либо другая функция, которую я могу использовать для вышеуказанного.
Под окном Locals
Categories
имеет тип Variant/String
Редактировать:
Split(Categories, ">")(0)
вернуть целиком
Инструменты и товары для дома
›
Электроинструменты и ручные инструменты
›
Запчасти и аксессуары для электроинструментов
›
Планы и комплекты проектов по деревообработке
›
Комплекты для деревообработки
Он не разделяет переменную Categories
.
(a) Вы уверены в характере разделения? Может быть, это другой персонаж, который просто выглядит как >
? (b) Кажется, в вашей строке также есть символы новой строки, вам нужно будет их заменить.
Я скопировал и вставил файл debug.Print(Categories), как вы видите в сообщении.
Split возвращает массив строк. Однако Debug.Print не может распечатать массив. Вам нужно указать индекс:
Debug.Print Split(Categories, ">")(0)
или
Dim tokens() As String, i As Integer
tokens = Split(Categories, ">")
For i = LBound(tokens) To UBound(tokens)
Debug.Print i & ". substring: " & Trim(tokens(i))
Next i
Кажется, у вас другой символ в качестве разделителя. Когда я копирую символ из вашего вывода, он кажется chr (155), а меньше, чем char, - chr (62).
как понять что это за персонаж?
С Asc
-функцией. Я скопировал символ из вашего вопроса, вставил его в ближайшее окно и набрал ? Asc("›")
. Это дало мне 155
Split(Categories, ">")
возвращает массив, поэтому вам нужно будет напечататьSplit(Categories, ">")(0)
, чтобы получить первый элемент массива.