2017-10-30 9 views
0

をサポートしていないバリアント配列に要素を追加しようとすると、私はVBA実行時エラー438:オブジェクトはこのプロパティまたはメソッド

エラー438

を取得します。デバッグを手伝ってもらえますか?あなたはループを配列に入れ、タイプPartyの異なるオブジェクトを持つようにしたい場合は、これは

Private m_lGuestsNumber As Long 

Public Property Get GuestsNumber() As Long 

    GuestsNumber = m_lGuestsNumber 

End Property 

Public Property Let GuestsNumber(ByVal lNewValue As Long) 

    m_lGuestsNumber = lNewValue 

End Property 

:THX

Public Function CouponList() As Double 

    Dim nbCoupons_lg As Integer 
    Dim counter_lg As Integer 
    Dim coupons_var As Variant 
    Dim coupon As Cls_Coupon 

    nbCoupons_lg = Maturity_db * CouponPeriodicity_db 

    If (Not nbCoupons_lg = 0) Then 

     ReDim coupons_var(1 To nbCoupons_lg) As Variant 

     For counter_lg = 1 To nbCoupons_lg 
      Set coupon = New Cls_Coupon 

      coupon.Period_lg = counter_lg 
      coupon.Value_db = AnnualCouponRate_db * ParValue_db 
      coupon.PresentValue_db = coupon.Value_db/(1 + AnnualDiscountRate_db)^(coupon.Period_lg/Maturity_db) 

      coupons_var(counter_lg) = coupon 

     Next counter_lg 
    End If 

    CouponList = coupons_var 

End Function 
+0

暗闇の中での撮影:「coupons_var(1〜nbCoupons_lg)を変種として」のようにあなたのcoupons_varを定義し、そのReDim-Thingを削除します。 – Flocke

+0

@Flocke - 暗すぎる - 'nbCoupons_lg'は定義されていないので、コンパイルされません。 VBEditorは、配列が宣言されたときに、「Dim」に値を持つのが好きです。 – Vityata

+2

'set coupons_var(counter_lg)= coupon'を試すことができますか? – Vityata

答えて

2

は、あなたがこのように(あなたのCouponのような)クラスPartyを持っている想像してみて

Public Sub TestMe() 

    Dim myArr()   As Variant 
    Dim cnt    As Long 
    Dim additional  As Long: additional = 10 
    Dim coupon   As Party 

    ReDim myArr(1 To additional) 

    For cnt = 1 To additional 
     Set coupon = New Party 
     coupon.GuestsNumber = cnt * 2 
     Set myArr(cnt) = coupon 
    Next cnt 

End Sub 

これでコードを簡単に交換することができます。それは機能しているはずです。

+1

「セット」を追加するだけで機能しました。どうもありがとう ! – Felipe

関連する問題