Как найти буквальное число в .net ArrayList из VBA? - PullRequest
0 голосов
/ 20 сентября 2018

Среда выполнения .net доступна для VBA (и других COM-клиентов) через mscorlib.dll.Теоретически это означает, что программист VBA может использовать классы .net.

Я использовал ArrayList для сортировки и пытался вызвать другие методы, но для IndexOf я столкнулся с проблемой.Это не займет литерал для параметра, он ожидает объект.Я подумал, что целое в штучной упаковке может сработать, но и это не удалось.

Итак, как найти буквенное число в ArrayList из VBA?

Sub Test()
    Dim obj As Object
    Set obj = CreateObject("System.Collections.ArrayList")
    obj.Add 4
    obj.Add 8
    obj.Add 12
    obj.Add 16
    obj.Add 20
    Debug.Assert obj.Count() = 5
    Debug.Assert obj.Item(2) = 12

    '* try a literal
    Debug.Print obj.IndexOf(12) 'ERRORS err.Description=Invalid procedure call or argument

    '* try a boxed integer
    Dim boxedInteger As mscorlib.Int32
    boxedInteger.m_value = 12

    Debug.Print obj.IndexOf(boxedInteger) 'ERRORS err.Description=Invalid procedure call or argument

End Sub

1 Ответ

0 голосов
/ 20 сентября 2018

Добавить аргумент 0

Debug.Print obj.IndexOf(12, 0)

IndexOf

Свойство .IndexOf указывает позицию (= номер индекса) элемента в ArrayList.

Первый аргумент - это значение, которое вы ищете, второй - позиция после , из которой вы хотите проверить наличие значения


В приведенном выше определении ссылки указано, что поведение второго аргумента после , тогда как на самом деле начинается с .Автор сайта обновляется, чтобы отразить это.Это соответствует методу перегрузки IndexOf (Object, Int32) в терминах второго аргумента:

возвращает основанный на нуле индекс первого вхождения в диапазонеэлементов в ArrayList, который простирается от указанного индекса до последнего элемента.

Например, Debug.Print obj.IndexOf(4, 0), правильно вернет 0.Я был бы заинтересован в некоторой документации, которая охватывает это поведение, где явно объект не передается в качестве первого аргумента.Я еще не нашел.

...