#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
Смотрите ЭТУ ССЫЛКУ для получения некоторых полезных советов о том, как отлаживать свой собственный код подобным образом. Приветствия.