使用ClassModule属性添加Array键

时间:2013-12-19 12:26:03

标签: excel class vba excel-vba excel-2007

我有一个包含私有属性m_Invalid() as String的ClassModule。

我需要的是2x属性,一个允许公共访问以获取整个数组,另一个允许私有访问以向数组添加密钥。

我已经想出了这个,但如果我尝试使用AddInvalid(Me.AddInvalid ("Test")我会收到编译错误 -

  

无效的财产用户

有人知道我做错了什么吗?谢谢,

Public Property Get Invalid() As String()
    Invalid = m_Invalid
End Property
Public Property Let AddInvalid(ByVal Value As String)

    Dim ArrayLength As Integer
    ArrayLength = UBound(m_Invalid)

    ReDim Preserve m_Invalid(ArrayLength)

    m_Invalid(ArrayLength) = Value

End Property

1 个答案:

答案 0 :(得分:3)

为什么AddInvalid需要成为财产?只需将其更改为Sub(或Function)即可,但名称不能与现有属性相同:

Public Sub AddItem(psTest As String)

    Dim ArrayLength As Integer
    ArrayLength = UBound(m_invalid)

    ReDim Preserve m_invalid(ArrayLength)

    m_invalid(ArrayLength) = psTest

End Sub

此外,您的代码没有按照您的想法执行。从我所看到的,它所做的全部是ReDim它已经是相同的大小,然后覆盖最后一个值...?在ReDim语句中添加一个以使数组增长:

    ReDim Preserve m_invalid(ArrayLength + 1)