Получение несоответствия типов при поиске строки в массиве

У меня есть код, который извлекает строку из электронной таблицы и ищет значение индекса строки внутри массива. Я заметил, что если я сохраняю свои строки до 1 символа, код работает нормально. Если я действительно пытаюсь запустить его для поиска слов, я получаю ошибку несоответствия типа, даже если строка ОПРЕДЕЛЕННО существует внутри массива. Любая помощь будет оценена. Я вставил сокращенную версию приведенного ниже кода, которая по-прежнему вызывает ту же ошибку.

Я пробовал затемнить свой массив как вариант или как строку. Я пробовал использовать пробел, чтобы все строки в массиве имели одинаковую длину.

Sub myArray_ISbroke()

    Dim arraysSuck: arraysSuck = Split("HI,HELLO,TEST1,TEST2,T3", ",")
    MsgBox Application.Match("HI", arraysSuck)
    MsgBox Application.Match("HELLO", arraysSuck)
    MsgBox Application.Match("TEST1", arraysSuck)
    MsgBox Application.Match("TEST2", arraysSuck)
    MsgBox Application.Match("T3", arraysSuck)

End Sub

Я ожидал, что в блоках MSG появятся 1, 2, 3, 4 и 5. Я получаю ошибку 13 после «1».


person Christopher Bill    schedule 03.06.2019    source источник


Ответы (1)


Вам не хватает последнего параметра - типа соответствия. См. Документы здесь.

Он говорит:

Если match_type равен 1, Match находит наибольшее значение, которое меньше или равно lookup_value. Lookup_array должен располагаться в порядке возрастания: ...- 2, -1, 0, 1, 2, ..., A-Z, FALSE, TRUE.

Если match_type равен 0, Match находит первое значение, в точности равное lookup_value. Lookup_array может быть в любом порядке. Обратите внимание, что Match не чувствителен к регистру.

Если match_type равен -1, Match находит наименьшее значение, которое больше или равно lookup_value. Lookup_array должен располагаться в порядке убывания: ИСТИНА, ЛОЖЬ, Я-А, ... 2, 1, 0, -1, -2, ... и так далее.

Если match_type опущен, предполагается, что он равен 1.

Обновленный код:

Option Explicit

Sub UpdatedExample()

    Dim arraysSuck: arraysSuck = Split("HI,HELLO,TEST1,TEST2,T3", ",")
    MsgBox Application.Match("HI", arraysSuck, 0)
    MsgBox Application.Match("HELLO", arraysSuck, 0)
    MsgBox Application.Match("TEST1", arraysSuck, 0)
    MsgBox Application.Match("TEST2", arraysSuck, 0)
    MsgBox Application.Match("T3", arraysSuck, 0)

End Sub
person Ryan Wildry    schedule 03.06.2019
comment
Это устранило глюк, спасибо! Я был удивлен, увидев, что это вызвано опущением match_type, и не совсем понимаю, почему. Учитывая, что внутри массива было точное совпадение, можете ли вы подсказать невежественному человеку, почему он не пошел на то, что тиск совпадения выдал ошибку? - person Christopher Bill; 04.06.2019
comment
Я думаю, что массив не отсортирован. См. Комментарии к типу соответствия, который я добавил - person Ryan Wildry; 04.06.2019