VBA не может держать значение переменной прямо через вызов функции - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь получить эффективный конструктор класса, который может принимать параметры. Это кажется тривиальным в большинстве языков программирования, но VBA очень особенный.

У меня есть следующий код в обычном модуле с именем Module2:

Public Sub DoTheThing()
Dim this_guy As SetOfGames
Set this_guy = New SetOfGames
Dim that_guy As SetOfGames
Set that_guy = New SetOfGames
MsgBox "First: " & this_guy.games_played & that_guy.games_played
Set this_guy = factory.CreateFromOther(that_guy.games_played, that_guy.extra_games, that_guy.odds, 1)
End Sub

Следующий во втором нормальном модуле с именем factory:

Public Function CreateFromOther(ByVal other_games_played As Integer, ByVal other_extra_games As Integer, ByVal other_odds As Double, ByVal giraffe_yes As Integer) As SetOfGames
MsgBox "Second: " & other_games_played
Dim setofgames_obj As SetOfGames
Set setofgames_obj = New SetOfGames
MsgBox "Third: " & other_games_played
setofgames_obj.InitiateFromOther ogp = other_games_played, oeg = other_extra_games, g_yes = giraffe_yes
End Function

И следующее в модуль класса с именем SetOfGames:

Public extra_games As Integer
Public games_played As Integer
Public odds As Double
Function InitiateFromOther(ByVal ogp As Integer, ByVal oeg As Integer, ByVal g_yes As Integer)
MsgBox "Fourth" & ogp

End Function

Я вызываю DoTheThing() с кнопки Excel, которая инициализирует несколько SetOfGames с и дает ожидаемое число_игр в первом MSGBOX: 0

CreateFromOther () вызывается, и я снова получаю правильный вывод в секундах MSGBOX и третьем MSGBOX: 0

Затем я вызываю InitiateFromOther, передавая этот хороший 0 через, но в первой строке функции я получаю четвертый MSGBOX показывая, что это -1

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

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