Операции со значением worksheetfunction в Excel VBA

#excel #function #vba #matrix

#excel #функция #vba #матрица

Вопрос:

У меня есть две функции, первая работает, код второй почти такой же, как у первой, но в конце пытается выполнить некоторые арифметические операции с конечным результатом. Второй не работает. Коды следующие:

         Public Function li(a As Double, b As Double) As Variant
        Dim mat(1 To 1, 1 To 3) As Variant
        Dim re As Variant

        Dim imat(1 To 3, 1 To 3) As Variant

        imat(1, 1) = 0.7409287
        imat(1, 2) = -0.2849031
        imat(1, 3) = 0.00002678114
        imat(2, 1) = -0.2849031
        imat(2, 2) = 0.1108151
        imat(2, 3) = 0.00000774442
        imat(3, 1) = -0.00002678114
        imat(3, 2) = 0.00000774442
        imat(3, 3) = 0.000000009373992

        mat(1, 1) = 1
        mat(1, 2) = a ^ 0.25
        mat(1, 3) = b ^ 2

        re = WorksheetFunction.MMult(WorksheetFunction.MMult(mat, imat), WorksheetFunction.Transpose(mat))


        li = re

        End Function

'here the second function starts

        Public Function eli(a As Double, b As Double) As Variant
        Dim mat(1 To 1, 1 To 3) As Variant
        Dim re As Variant

        Dim imat(1 To 3, 1 To 3) As Variant

        imat(1, 1) = 0.7409287
        imat(1, 2) = -0.2849031
        imat(1, 3) = 0.00002678114
        imat(2, 1) = -0.2849031
        imat(2, 2) = 0.1108151
        imat(2, 3) = 0.00000774442
        imat(3, 1) = -0.00002678114
        imat(3, 2) = 0.00000774442
        imat(3, 3) = 0.000000009373992

        mat(1, 1) = 1
        mat(1, 2) = a ^ 0.25
        mat(1, 3) = b ^ 2

        re = WorksheetFunction.MMult(WorksheetFunction.MMult(mat, imat), WorksheetFunction.Transpose(mat))



        eli = 1.96 * 126.948551122683 * (re   1) ^ 0.5

        End Function
 

Я предполагаю, что проблема во втором заключается в том, что re это значение a worksheetfunction . Итак, как я могу это исправить?

Комментарии:

1. ПРИМЕЧАНИЕ . В следующий раз, пожалуйста, опишите, в чем проблема, вместо того, чтобы просто говорить, что «не работает», укажите, какое сообщение об ошибке выдается и в какой строке оно появляется. (Если нет сообщения об ошибке, затем опишите, как результаты отличаются от того, что вы ожидаете.)

Ответ №1:

Отлаживая это, вы получите ошибку несоответствия в инструкции return.

eli = 1.96 * 126.948551122683 * (re 1) ^ 0.5

Посмотрите в окно Locals, и вы увидите, что re это альтернативный массив размером 1 к 1.

введите описание изображения здесь

Массив не имеет свойства значения по умолчанию, поэтому решение состоит в том, чтобы ссылаться на индекс массива:

eli = 1.96 * 126.948551122683 * (re(1) 1) ^ 0.5

Смотрите ЭТУ ССЫЛКУ для получения некоторых полезных советов о том, как отлаживать свой собственный код подобным образом. Приветствия.