2017-09-11 11 views
0

Collectionを作成し、内部にCollectionを追加するサブアイテムがあります。ループの最初のコレクションを追加するときしかし、私はWrong number of arguments or invalid property assignmentエラーを取得する:Collection.Add:引数の数が正しくないか、プロパティの割り当てが無効です

Sub testState() 
    Dim stateCopy As State 
    Set stateCopy = New State 
    stateCopy.setStateName="some name" 
    stateCopy.storeBudgetWorkbooks 
    stateCopy.storeBudgetDatas 'error on this line 
End Sub 

Sub storeBudgetDatas() 'inside a class named State 
... 
    Dim year As Integer 
    Dim i As Integer 
    i = 1 
    For year = 2014 To 2017 
     Set budgetWorkbook = 
      ExcelApp.Application.Workbooks.Open(budgetWorkbooks(i)) 
     MsgBox ("still here") 'this message appears 

     allBudgetItems.Add getBudgetData(budgetWorkbook, year) 'this line is likely to cause problems 


     MsgBox ("and here") 'this message doesn't appear 
     budgetWorkbook.Close 
     i = i + 1 
    Next 
End Sub 

Function getBudgetData(budgetWorkbook As Workbook, year As Integer) 
    ... 
    Dim budgetItems As Collection 
    Set budgetItems = getBudgetItems(year) 
    ... 'setting attributes 
    getBudgetData = budgetItems(year) 
End Function 

Function getBudgetItems(year As Integer) 
    ... 
    Dim resultCollection As Collection 
    Set resultCollection = New Collection 
    Dim itemCopy As Item 
    Dim i As Integer 
    For i = LBound(budgetItemNames) To UBound(budgetItemNames) 
     Set itemCopy = New Item 
     ... 'setting attributes 
     resultCollection.Add itemCopy 
    Next 

    Set getBudgetItems = resultCollection 
End Function 

私はここで間違っているかわからないんだけど。 getBudgetItemsはコレクションを返します。 getBudgetDataはコレクションも返します。私は括弧を追加/削除しようとしましたが、役に立たなかった。

+0

あなたが助けを見つけることができますので、あなたのコードは、完全ではありません少ない来る。 Sub storeBudgetWorkbooksがなくなり、allBudgetItemsが明白な問題であるように淡色表示されています... – Tragamor

+0

実際の問題行を見つけるために、f8を使用してクラスコードに入りましたか(またはクラスモジュールでブレークするようにVBEを設定しましたか? – Rory

+0

@Rory、これはどういう意味ですか?私はどのように実際の問題を見つけるかわからない、それは単に関数内の特定の行ではなく、関数呼び出しの行を強調表示します。 – Ans

答えて

1

getBudgetData = budgetItems(year)の代わりにSet getBudgetData = budgetItems(year)が必要です。あなたが私達にあなたのコードのすべての関連する部分を示していないので

1

、私ができる最善のは、あなたが不足していると思いますですSet

Function getBudgetData(budgetWorkbook As Workbook, year As Integer) 
    ... 
    Dim budgetItems As Collection 
    Set budgetItems = getBudgetItems(year) 
    ... 'setting attributes 
    Set getBudgetData = budgetItems(year) ' Need Set here 
End Function 
関連する問題