Excel VBA错误:相同属性的属性过程的定义不一致

这一定是明显的东西,但我卡住了,所以也许你们可以帮助我。

考虑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 

谁能帮我?

提前tks!

尝试这个:

 Private pSkipTrade As Boolean Public Property Let SkipTrade(lSkipTrade As Boolean) pSkipTrade = lSkipTrade End Property Property Get SkipTrade() As Boolean SkipTrade = pSkipTrade End Property 

在你的代码中的其他地方,你正在使用另一个variables(例如, value )来设置这个属性。 如果这个variables不是Booleantypes(例如,一个LongDoubleDecimal ),那么你可以做这样的事情:

 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 

注意,在上面的例子中,它是非常明确的 – 而不是隐藏的 – 你直接对MyObject类对象的SkipTrade属性进行赋值? 相反,你的方法本质上是调用一个隐藏在对象模块中的子例程,它为该属性赋值。 它工作吗? 是。 这是做这件事的最好方法吗? 我不这么认为; 这是一个非常令人困惑的编码方式,这将使后来的故障排除(特别是如果你把这个项目交给其他人)要困难得多。

编码显然隐式编码要好。

Let参数必须与Get属性的返回types相匹配。 看到这个

所以你需要把Property Let中的参数改为布尔types:

 Private pSkipTrade As Boolean Property Let SkipTrade(value As Boolean) '<--Parameter is Boolean type pSkipTrade = value End Property Public Property Get SkipTrade() As Boolean SkipTrade = pSkipTrade End Property 

然后将您在Let属性中的逻辑移动到使用属性的代码:

 If price = 0 Then SkipTrade = False Else SkipTrade = True End If