Vba 如何在将参数传递给属性时防止自动转换?

Vba 如何在将参数传递给属性时防止自动转换?,vba,Vba,当我尝试将string(testString=“10”)参数传递给采用currency参数(ByVal newCash作为currency)的属性时,它为什么没有失败?我不想要这种自动转换。如何预防?如何禁用它 模型类模块 Option Explicit Private m_cash As Currency Public Property Let Cash(ByVal newCash As Currency) m_cash = newCash End Property Option

当我尝试将string(
testString=“10”
)参数传递给采用currency参数(
ByVal newCash作为currency
)的属性时,它为什么没有失败?我不想要这种自动转换。如何预防?如何禁用它

模型
类模块

Option Explicit

Private m_cash As Currency

Public Property Let Cash(ByVal newCash As Currency)
    m_cash = newCash
End Property
Option Explicit

Public Sub Test()
    Dim modelObj as Model
    Dim testString as String

    Set modelObj = New Model
    testString = "10"

    modelObj.Cash = testString
End Sub
测试
类模块

Option Explicit

Private m_cash As Currency

Public Property Let Cash(ByVal newCash As Currency)
    m_cash = newCash
End Property
Option Explicit

Public Sub Test()
    Dim modelObj as Model
    Dim testString as String

    Set modelObj = New Model
    testString = "10"

    modelObj.Cash = testString
End Sub

你需要做的第一件事就是意识到。不要使用
module
value
等词作为变量名称。您不认为
将模块变暗为模块
会有点混乱吗?第二,很不清楚你想在这里做什么。我建议你把
选项显式
放在[每个]模块[永远]的顶部,这样有助于解决名称冲突,然后你需要分享更多的背景和你想要完成的事情的例子。@ashleedawg我已将
模块
更改为
模型
不是保留字,但是我把它改成了现金。当我试图通过
测试字符串设置
m_cash As Currency
时,我想得到一个错误。你可以检查类型并提出你自己的
子测试(x作为变量),如果TypeName(x)“Long”或TypeName(x)“Integer”则错误。如果End Sub
,则提出9999,“不正确”结束@Nathan_Sav如果我提出
属性,则让(ByVal newCash作为Variant)
然后我还必须执行
属性Get Value()作为Variant
操作。我不想从getter
作为Variant返回。您可以将其作为转换返回,添加的变量将是正确的,因此您的Get不需要更改