Запрос комментария о передаче элемента массива в функцию в VBA - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть следующий код VBA:

Function InputElmt(element As Double) As Variant
    InputElmt = element
End Function

Sub runInputElmt()
    Dim arr() As Variant, Firstelmt As Double
    arr = Array(1, 2)

    Debug.Print InputElmt(arr(0) * 1)   ' 1st call

    Firstelmt = arr(0)
    Debug.Print InputElmt(Firstelmt)    ' 2nd call

    Debug.Print InputElmt(arr(0))       ' 3rd call: error
End Sub

Подпрограмма вызывает функцию InputElmt три раза.Первые два дают правильные результаты, в то время как последний вызывает ошибку (см. ошибка компиляции ).

Моя интерпретация заключается в том, что третий вызов передает в функцию строку arr(0)а не его оценка.Напротив, в первых двух вызовах arr(0) оцениваются.

Мои вопросы

1) верно ли мое объяснение?и

2) эта ошибка связана с ByRef или ByVal, как могло бы указывать сообщение об ошибке?

Ответы [ 2 ]

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

У вас есть два варианта

Первый

Function InputElmt(ByVal element As Double) As Variant
    InputElmt = element
End Function

Второй

Debug.Print InputElmt((arr(0)))       ' 3rd call: no error with parentheses

Обратите внимание на скобки

Размещение аргумента в собственном наборе скобок требует его вычисления в виде выражения.

Для получения дополнительной информации см. Документацию

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

Ваша вторая переменная double, но третья переменная является вариантом.Вашей пользовательской функции требуется переменная double, и в процедуре применение варианта приведет к ошибке несоответствия.

...