Class 自定义类声明-同一类的属性过程定义

Class 自定义类声明-同一类的属性过程定义,class,excel,vba,Class,Excel,Vba,我只能假设以下代码中的错误消息(Excel中的错误消息较长,但与MSDN中描述的问题相对应),我不明白为什么 Private cLocation As String ' Location Public Property Get Location() As String Location = cLocation End Property Public Property Let Location(Value As String, Value1 As String) If Valu

我只能假设以下代码中的错误消息(Excel中的错误消息较长,但与MSDN中描述的问题相对应),我不明白为什么

Private cLocation As String

' Location
Public Property Get Location() As String
    Location = cLocation
End Property

Public Property Let Location(Value As String, Value1 As String)
    If Value <> "" And Len(Value) > 2 Then
        cLocation = Value
    Else
        cLocation = Value1
    End If

    cLocation = Test.scrubLocation(cLocation, Me.NewZipcode)
End Property
Private cLocation作为字符串
“位置
公共属性获取位置()作为字符串
位置=闭合
端属性
公共属性出租位置(值为字符串,值1为字符串)
如果值“”和Len(值)>2,则
clo阳离子=值
其他的
cLocation=Value1
如果结束
cLocation=Test.scrubLocation(cLocation,Me.NewZipcode)
端属性
它重点介绍了这个特殊的
Let
过程

属性获取过程的参数数量不会减少一个 大于匹配属性Let或的参数数 属性集过程。将参数添加到属性Let或属性 根据需要从属性Get中设置或删除参数

我假设这不可能-
Get
的参数比
Let
少2个。此外,将参数添加到
Get
也无法解决任何问题

属性Get的参数类型必须与 属性Let或属性集的相应参数,但 额外的属性集参数。修改中的参数声明 相应的程序定义,因此它们是适当的 匹配

属性Let的额外参数的参数类型必须为 匹配相应属性Get过程的返回类型。 修改属性Let中的额外参数声明或 相应属性的返回类型为 适当匹配

一切都是字符串,所以这也应该是确定的

您使用可选数组或参数数组定义了属性过程 参数中不允许使用ParamArray和可选参数 财产程序。重新定义过程而不使用这些 关键词

没有

我还确保我没有在任何其他地方设置
cLocation
。在整个项目中,除了如上所示的
Let
之外,没有其他程序对
cLocation
进行修改


我是不是做错了
Let
?我的印象是,我可以通过这种方式完成。

您的
Get
过程也必须有一个名为
Value
的字符串参数:

Public Property Get Location(Value As String) As String
    Location = cLocation
End Property

如果
Let
有两个参数,
Get
必须根据第一个引用的部分有一个,而不是没有。我确实尝试向
Get
添加一个参数,但没有任何效果。然而,这是一个武断的论点。在这种情况下,
Get
是否有一些“形式要求”?它必须是
String
参数,并且与
Let
过程的第一个参数同名。Rory完全正确,但您的代码对
属性Let
的使用有点奇怪。更常见的是在调用模块中运行
If
子句:
If Len(val)>2然后obj.Location=val else obj.Location=val2
。在你的
Let
过程中,你只有一个参数。@Ambie你的评论让我思考,我想出了一个更优雅的解决方案。我不会把它贴在这里,因为它对我提出的问题毫无帮助,但有一个无形的投票权。