它一定是显而易见的东西但是我被困住了所以也许你们可以帮助我。
在VBA自定义对象中考虑以下代码:
Private pSkipTrade As Boolean
Property Let SkipTrade(value As Double):
If value = 0 Then
pSkipTrade = False
Else
pSkipTrade = True
End If
End Property
Public Property Get SkipTrade() As Boolean
SkipTrade = pSkipTrade
End Property
任何人都可以帮助我吗?
事先提前!答案 0 :(得分:4)
Let参数必须与Get属性的返回类型匹配。请参阅this。
因此,您需要将Property Let中的参数更改为布尔类型:
If price = 0 Then
SkipTrade = False
Else
SkipTrade = True
End If
然后将Let属性中的逻辑移动到使用该属性的代码:
target
答案 1 :(得分:1)
试试这个:
Private pSkipTrade As Boolean
Public Property Let SkipTrade(lSkipTrade As Boolean)
pSkipTrade = lSkipTrade
End Property
Property Get SkipTrade() As Boolean
SkipTrade = pSkipTrade
End Property
您的代码中的其他位置您正在使用另一个变量(例如value
)来设置此属性。如果此变量不属于Boolean
类型(例如,Long
,Double
或Decimal
),那么您可以执行以下操作:
Sub Test()
Dim MyObject As Object
Dim Value As Double '## or, whatever
'# CREATE THE CLASS OBJECT
Set MyObject = New cMyObject '## Modify to be your correct Type
Value = Application.InputBox("Enter any number")
'# ASSIGN THE PROPERTY VALUE BASED ON A LOCAL VARIABLE/LOGIC
' use boolean logic to test whether "value = 0"
' a non-zero value will return "True"
MyObject.SkipTrade = Not (CDbl(Value) = 0)
'# Display the value, so you can see that this is working correctly:
MsgBox "The value of SkipTrade is: " & MyObject.SkipTrade
End Sub
如果您有多个条件,最好在对象的属性赋值期间使用Function
调用来返回属性值。
您可以调用以下函数:
MyObject.SkipTrade = CheckSkipTrade(value)
在主代码模块中使用这样的函数,可以修改它以包含您可能需要合并的任何逻辑:
Function CheckSkipTrade(value) As Boolean
Dim myVal as Boolean
If IsNumeric(value) Then
'returns true or false test whether 'value' = 0.
myVal = Not(CDbl(value) = 0)
Else:
myVal = False
End If
'# Return the value of the function test:
CheckSkipTrade = myVal
End Function
请注意,在上面的示例中,您是非常明确的 - 不是隐藏的 - 您是直接对SkipTrade
类对象的MyObject
属性进行赋值?相反,您的方法实质上调用隐藏在对象模块中的子例程,该子例程为属性赋值。它有用吗?是。这是最好的方式吗?我不这么认为;这是一种非常令人困惑的编码方式,这将使以后的故障排除(特别是如果你将这个项目交给其他人)更加困难。
明确编码比隐式编码 更好。