Excel vba: Property let procedure not defined and property get procedure did not return an object

前端 未结 3 1518
广开言路
广开言路 2021-01-23 12:02

I have a Client class. Inside that class there is an array losses. First I create and populate with clients a clientsColl array. Then for

相关标签:
3条回答
  • 2021-01-23 12:19

    Your getLosses property doesn't take an argument so your syntax is actually wrong, even though VBA can cope with it when early bound. You should be using:

    Debug.Print "first: " & clientsColl(1).getLosses()(1) 'works fine
    For Each clientCopy In clientsColl
        Debug.Print "in for each: " & clientCopy.getLosses()(1) 'error here
    Next
    
    0 讨论(0)
  • 2021-01-23 12:27

    To conclude what was said in comments:

    Your problem (error 451) often occures when you trying to compound properties. To represent this case we can use any structure of any object with properties.

    Let's emulate it with array of collections:

    Option Explicit
    
    Sub Test()
        Dim Arr As Variant
        Dim Col As Collection
        Dim i As Long
        Dim j As Long
    
        ReDim Arr(1 To 10)
    
        For i = 1 To 10
            Set Col = New Collection
            For j = 1 To 10
                Call Col.Add(j)
            Next
    
            Set Arr(i) = Col
        Next
    
        On Error Resume Next
        Debug.Print Arr(1).Item(1)
        Debug.Print Arr(1).Item()(1)
        On Error GoTo 0
    End Sub
    

    Your problem stems from the fact that you're treating your properties as attributes. On not-so-compounded (or when your array is declared explicitly as array of class instances) level it works due to early binding. But when things start to get more complex - it's fail, since your property just another function.

    Hence, to achieve what you want, you should call it explicitly with another pair of parentheses.

    0 讨论(0)
  • 2021-01-23 12:34

    I also meet this problem when I create my customize array class using compound properties.

    I solved it by adding class statment for return value in Property Get code. Just as what @Rory said.

    You could try Public Property Get getLosses() As Double in the Client class.

    0 讨论(0)
提交回复
热议问题