【问题标题】:Excel 2010 vba array as a class member errorExcel 2010 vba 数组作为类成员错误
【发布时间】:2014-06-27 16:28:53
【问题描述】:

我正在做一个项目,但遇到了一些我不明白的事情。将数组分配给类成员时,LetGet 名称不能相同。如果是,我会收到错误消息:

Definitions of property procedures for the same property are inconsistent, or property procedure has an optional parameter, a ParamArray, or an invalid Set final parameter

谁能告诉我是我做错了什么,还是事情就是这样。下面的代码生成上述消息。

测试代码:

Sub loadServer()
Dim testServer As AvayaServer
Dim i As Long
Dim arr() As Variant

arr = Array("1", "2", "3", "4", "5")

Set testServer = New AvayaServer
testServer.Name = "This Sucks"
testServer.Skill = arr
MsgBox testServer.Skills(4)
MsgBox testServer.Name

End Sub

类代码:

Private pName As String
Private pSkills() As String
Public Property Get Skills() As Variant
Skills = pSkills()
End Property

Public Property Let Skills(values() As Variant)
ReDim pSkills(UBound(values))
Dim i As Long
For i = LBound(values) To UBound(values)
    pSkills(i) = values(i)
Next
End Property

【问题讨论】:

  • values() As Variant更改为values As Variant
  • @simoco 谢谢!我知道我必须错过一些愚蠢的事情
  • @vbnoob 它确实很傻(这件事,不是你错过了它) - 一个奇怪的怪癖。 values As Variant 将是一个 Variant,您稍后将使用它来存储一个数组,values() As Variant 是一个 Variant 数组。 Array 函数只能分配给前者。我还假设testServer.Skill(注意没有“s”)只是上面的拼写错误。如果不是,请更改您的代码,我建议将 Option Explicit 放在模块的顶部。
  • @Cor_Blimey,testServer.Skill 只是出于部分意图。最初,为了使代码与Let Skill(values() As Variant 一起工作,必须使用它。这确实是帖子中的一个疏忽,因为我没有更正所有代码。感谢您了解这一点。

标签: excel vba


【解决方案1】:

values() As Variant 更改为values As Variant

类代码:

Private pName As String
Private pSkills() As String
Public Property Get Skills() As Variant
Skills = pSkills()
End Property

Public Property Let Skills(values As Variant)          'Fixed here
ReDim pSkills(UBound(values))
Dim i As Long
For i = LBound(values) To UBound(values)
    pSkills(i) = values(i)
Next
End Property

说明:

values As Variant 将是 Variant 类型,稍后您将使用它来存储数组。 values() As VariantVariant 类型的数组,不能为其分配 ArrayArray 只能分配给前者。

【讨论】:

  • 只是从问题中整理 cmets,因为这些回答了问题。没有声称这是我自己的作品。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多