Почему имя моей функции появляется дважды в окне "localals"? - PullRequest
1 голос
/ 05 февраля 2012

Я создал модуль класса, в котором я определил функцию. Всякий раз, когда эта функция вызывается, она отображается дважды в окне локальных пользователей. Меняется только значение второго, первое остается пустым или «нулевым», в зависимости от его типа, до конца выполнения кода. У меня нет этой проблемы с функциями, определенными в стандартных модулях. Я что-то сделал не так, это ошибка или есть логическая причина этого?

Содержимое модуля класса TestClass:

Public Value As Double

Function AddFive() As Double
    AddFive = Me.Value + 5
End Function

Содержимое стандартного модуля:

Sub TestSub()
    Dim TestObject As New TestClass
    TestObject.Value = 2
    MsgBox TestObject.AddFive
End Sub

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

(ссылка на скриншот)

Я использую VBA для Excel 2010.

Заранее спасибо.

1 Ответ

0 голосов
/ 07 февраля 2012

Проблема в том, как вы это делаете. Если у вас есть функция, которая просто добавляет 5 к внутренней переменной объекта класса, то это технически пустота (Sub в VBA), поскольку вам не нужно возвращаемое значение.

Ваш код должен быть:

КЛАСС

Public Value As Double

Sub AddFive()
    Me.Value = Me.Value + 5
End Sub

МОДУЛЬ

Sub test()

Dim testObject As New TestClass
testObject.Value = 2
testObject.AddFive

MsgBox testObject.Value

End Sub

Я могу представить, что может быть несколько причин, по которым созданы 2 переменные, но я считаю немного бессмысленным вдаваться в причину непредвиденного поведения, поскольку вы делаете неправильный код.

Если вы хотите, вы можете даже написать функцию класса, которая покажет ее значение + 5 в msgbox, и это также не создаст дополнительную переменную. Но это странно, и я думаю, что вы хотите код выше. Но здесь все равно:

CLASS

Public Value As Double

Sub ShowPlusFive()
    MsgBox Me.Value + 5
End Sub

МОДУЛЬ

Sub test()

Dim testObject As New TestClass
testObject.Value = 2

testObject.ShowPlusFive

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