VBA читает глобальные из клетки - PullRequest
0 голосов
/ 10 ноября 2019

Я полный новичок в VBA, поэтому заранее извиняюсь за тривиальный вопрос. Рассмотрим следующий код:

Dim frog As Double

frog = Range("A1").Value


Function test_func(ByVal a As Double, ByVal b As Double)
    test_func = a ^ b
End Function


Private Sub btnAddNumbersFunction_Click()
    MsgBox test_func(frog, 3)
End Sub

Когда я пытаюсь скомпилировать это, я получаю сообщение об ошибке «Недопустимая процедура извне» с выделением "A1". (Я пытаюсь определить модель с некоторыми настраиваемыми пользователем параметрами, поэтому было бы полезно иметь ее).

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Этот пример кода скомпилируется, я переместил назначение переменной в подпрограмму:

Dim frog As Double

Function test_func(ByVal a As Double, ByVal b As Double)
    test_func = a ^ b
End Function

Private Sub btnAddNumbersFunction_Click()
    'Assign values inside subs or functions
    frog = Range("A1").Value
    MsgBox test_func(frog, 3)
End Sub
0 голосов
/ 10 ноября 2019

Кажется, что введение другого подпрограммы инициализации, где инициализируются глобальные переменные, делает свое дело. Предложения в других ответах не являются удовлетворительными по причинам, объясненным в вопросе: необходимость инициализировать (или даже упоминать) параметры в каждой процедуре, которая неявно использует их, противоречит цели. Я немного озадачен тем, почему это дизайн (в отличие от любого другого языка, который я знаю), но MSFT таинственным образом движется своими чудесами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...