2014-06-27 29 views
4

我正在研究一個項目,並遇到了一些我不明白的東西。將數組分配給類成員時,LetGet名稱不能相同。如果是這樣,我得到的錯誤:Excel 2010 vba數組作爲類成員錯誤

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 
+4

將'values()As Variant'更改爲'Values As Variant' –

+0

@simoco謝謝!我知道我必須失去一些愚蠢的東西 – vbnoob

+2

@vbnoob它確實很愚蠢(這個東西,不是你錯過它) - 一個奇怪的怪癖。 'values As Variant'將是一個Variant,你稍後用來存儲一個數組,'values()As Variant'是一個Variant類型的數組。數組功能只能分配給前者。我還假設'testServer.Skill'(注意不是「s」)只是上面的拼寫錯誤。如果不是,那麼改變你的代碼,我建議在你的模塊的頂部加上'Option Explicit'。 –

回答

1

變化values() As Variantvalues 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 VariantVariant類型,這以後用它來存儲陣列。 values() As VariantVariant類型的數組,其中Array不能被分配給該數組; Array只能分配給前者。

+0

只是整理了問題的評論,因爲這些回答了這個問題,並沒有聲稱這是我自己的工作。 – JustinJDavies