Я пытался разобраться в ByVal и ByRef и передавать аргументы от long к double с помощью ключевого слова ByVal.
Я заметил, что VBA дал мне неправильный ответ для значения y в квадрате. Это действительно работает, когда y (i в моей подпрограмме) является целым числом.
В приведенном ниже примере у меня было i = 22,5.
Электронная таблица дала мне 506,25.
Моя функция дала мне 484.
Я думал, что и длинные, и двойные десятичные дроби поддерживаются.
Sub automation_test()
Dim i As Long
Dim j As Long
Dim x As Long
Dim ans As Long
i = Range("B1")
j = Range("B2")
x = Range("B3")
ans = my_model(i, j, x)
Range("B4").Value = ans
End Sub
Function my_model(ByVal y As Double, ByVal m As Double, ByVal q As Double) As Double
' my_model = (y ^ 2) * (m ^ 3) * (q ^ 1 / 2)
my_model = y ^ 2
End Function
ByVal
не имеет никакого значения по сравнению сByRef
... Попробуйте объявить все переменные «As Double, please. And it is good to use
i = Range(B1).value». VBA может догадаться, о чем идет речь, но полезно развивать такую привычку, чтобы визуально отличать ее от использования в качестве диапазона. - person FaneDuru   schedule 07.06.2020