Установите значения валюты в новом модуле класса VBA - PullRequest
0 голосов
/ 23 февраля 2019

Я создал модуль класса в Access VBA для информации о цене акций.По причинам, которые я не могу понять, когда я пытаюсь назначить значения валюты в моих тестах, мой экземпляр всегда равен 0. Другие типы данных (строки и даты), кажется, работают нормально.Кто-нибудь может определить, что я делаю не так?

Вот соответствующий раздел из моего класса:

Public Property Let Price(ByVal dollar As Currency)
    pPrice = dollar
End Property

Public Property Get Price() As Currency
    dollar = pPrice
End Property

Public Property Let Peak(ByVal amt As Currency)
    pAmt = amt
End Property

Public Property Get Peak() As Currency
    amt = pAmt
End Property

Когда я запускаю этот тест:

Sub TestStock()

Dim st As Stock

Set st = New Stock

st.Symbol = "AMD"
st.CreateDt = #1/10/2019#
st.Name = "Advanced Micro Devices"
st.Industry = Information_Technology
st.Price = 19
st.Peak = 24


Debug.Print st.Symbol, st.CreateDt, st.Name, st.IndustryText, st.Price, st.Peak

Set st = Nothing    
End Sub

Мои результаты всегда одинаковы:

AMD 1/10/2019 Advanced Micro Devices Information_Technology 0 0

Какой трюк мне не хватает для присвоения значений типам данных валюты?

1 Ответ

0 голосов
/ 23 февраля 2019

Ваша проблема в методе Get() вашей собственности.

Public Property Get Price() As Currency
    dollar = pPrice '<-- wrong, dollar means nothing in this context
    Price = pPrice '<-- right, that's the property you want to Get
End Property

Например, для свойства Price dollar - это просто локальная переменная, которую вы использовали в Set()метод.Однако, как только вы выходите из набора методов, эта переменная удаляется сборщиком мусора и становится 0 (значение по умолчанию).Следовательно, когда вы пытаетесь вернуть его обратно, вы получаете его текущее значение (которое составляет 0).

Я полагаю, вы делаете это правильно для других свойств, но так как вы этого не сделалиподелитесь кодом, который я не могу подтвердить.

Кто-то предложил вам в комментарии поместить Option Explicit поверх вашего модуля, это поможет избежать такой ошибки (в вашем случае переменная dollar не будет определена в контекстеPublic Property Get Price() As Currency и вы получите ошибку компиляции).

...