Vba 如何在将参数传递给属性时防止自动转换?
当我尝试将string(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
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不需要更改