Свойство VBA Let - два аргумента - PullRequest
0 голосов
/ 26 июня 2018

Итак, у меня есть два разных класса, основной и объектный класс. Дело в том, что я хочу отправить два массива на setArray, но Property Let мне тоже не позволяет. Как я могу это сделать, я знаю, что dData.setArray = xData(0), xData(1) не так, но я бы поступил так, если бы у меня был один аргумент.

Main:

dData.setArray = xData(0), xData(1)

Класс объекта:

Property Let setArray(name As Variant, value As Variant)
    Dim i As Long
    For i = 0 To UBound(name)
        data.Add CStr(name(i)), CInt(value(i))
    Next i
End Property

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вы можете иметь свойство let с несколькими аргументами, но, очевидно, только с одной «правой стороной», которая является последним аргументом в сигнатуре свойства (value As Variant в вашем случае). Синтаксис назначения для вашей подписи будет такой:

dData.setArray(xData(0)) = xData(1)
0 голосов
/ 26 июня 2018

Если вы хотите передать массивы как один неровный массив, вы можете добиться этого с помощью следующего кода:

Public Sub TestMe()

    Dim myObject As New someObject
    Dim arr1 As Variant: arr1 = Array(1, 2, 3, 4, 5)
    Dim arr2 As Variant: arr2 = Array("a", "b")
    myObject.Members = Array(arr1, arr2)

    Dim arrCnt As Long
    Dim counter As Long

    'This is how to access the values in the jagged array:
    For arrCnt = LBound(myObject.Members) To UBound(myObject.Members)
        For counter = LBound(myObject.Members(arrCnt)) To UBound(myObject.Members(arrCnt))
            Debug.Print myObject.Members(arrCnt)(counter)
        Next counter
    Next arrCnt

End Sub

Класс выглядит так:

Private m_Members As Variant

Public Property Get Members() As Variant
    Members = m_Members
End Property

Public Property Let Members(ByVal NewValue As Variant)
    m_Members = NewValue
End Property
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...