0

を使用してコレクションからデータにアクセスしようとしています.item()。私がやろうとしているのは、コレクション関数でデータを収集しfncPopCcyLst、それをアクセスし.item(1)cbSortCcy行番号を取得することです。これは、コレクションにいくつかのデータを保存し、.xml 経由でアクセスできるかどうかを確認するテスト.item()です。ただし、VBA ランタイム エラー '5' が発生します。誰かが私が間違っていることを親切に教えてくれますか? ありがとうございました。

以下は私のコードです。

クラス モジュール:clsSngGenUtl

Private prpSngStrVal As String
Private prpSngRowNum As Long
Private prpSngClmNum As Long

'++ Define properties
'== String row number
Public Property Get SngStrVal() As String
    SngStrVal = prpSngStrVal  
End Property
Public Property Let SngStrVal(ByRef varStrVal As String)
    prpSngStrVal = varStrVal
End Property

'++ Define properties
'== Scalar row number
Public Property Get SngRowNum() As Long
    SngRowNum = prpSngRowNum
End Property
Public Property Let SngRowNum(ByVal varRowNum As Long)
    prpSngRowNum = varRowNum
End Property

'++ Define properties
'== Single column number
Public Property Get SngClmNum() As Long
    SngClmNum = prpSngClmNum
End Property
Public Property Let SngClmNum(ByRef varClmNum As Long)
    prpSngClmNum = varClmNum 
End Property

'++ Define functions
'== function get row number
Public Function fncGetRowNum(ByRef varWbName As Workbook, ByVal varWsName As String, ByRef   varSttClm As Long) As Long

    On Error GoTo Exception

    prpSngRowNum = 0
    prpSngRowNum = varWbName.Sheets(Trim(varWsName)).Cells(Rows.Count, varSttClm).End(xlUp).Row

    fncGetRowNum = prpSngRowNum

ExitHere:
    Exit Function

Exception:
    Resume ExitHere

End Function

'== function get column number
Public Function fncGetClmNum(ByRef varWbName As Workbook, ByVal varWsName As String, ByRef varSttRow As Long) As Long

    On Error GoTo Exception

    prpSngClmNum = 0
    prpSngClmNum = varWbName.Sheets(Trim(varWsName)).Cells(varSttRow, Columns.Count).End(xlToLeft).Column

    fncGetClmNum = prpSngClmNum

ExitHere:
    Exit Function

Exception:
    Resume ExitHere

End Function`

以下は私のコレクションクラスです:clsColCcySrt

'++ Declare variables
   Private prpColCcySrt As Collection

   '++ Define properties
   Public Property Get ColCcySrt() As Collection
       Set ColCcySrt = prpColCcySrt   
   End Property
   Public Property Set ColCcySrt(varColCcy As Collection)
       Set prpColCcySrt = varColCcy
   End Property

    Public Function fncGetCcyRow(ByRef varStrVal As String) As Long

        On Error GoTo Exception

        Dim clsSngGen As clsSngGenUtl
        Dim varRowNum As Long

        varRowNum = 0
        For Each clsSngGen In Me.ColCcySrt
           varRowNum = clsSngGen.SngRowNum()
        Next clsSngGen

        '== Return value
        fncGetCcyRow = varRowNum

    ExitHere:
       Exit Function

    Exception:
        If fncGetCcyRow = 0 Then
            MsgBox "Exception: Value is <" & fncGetCcyRow & ">."
        End If
        Resume ExitHere

    End Function
`

配列にデータを入力する「通常の」モジュール:fncPopFxLst

`

    Public Function fncPopCcyLst(ByRef varWbName As String, ByRef varWsName As String, ByRef varCcyTyp As String) As Collection

       Dim clnColCcy As Collection
       Dim clsArrGen As clsArrGenUtl
       Dim clsSngGen As clsSngGenUtl
       Dim varWbName As Workbook

       Set clnColCcy = New Collection

       '== Start collecting items
       Set clsSngGen = New clsSngGenUtl
       Set varWbName = ThisWorkbook
       clsSngGen.SngStrVal = "Reuters"
       clsSngGen.SngRowNum = clsSngGen.fncGetRowNum(varWbName, varWsName, 1)
       clnColCcy.Add clsSngGen

       Set fncPopCcyLst = clnColCcy

    End Function
`

最後に、サブルーチン `

    Private Sub cbSortCcy()

        Dim clsColCcy As clsColCcySrt

        Dim varDirPth As String
        Dim varCcySrc As String
        Dim varWsStrg As String
        Dim varWbStrg As String

        varDirPth = tbDirectoryName & "\" & tbFileName
        varCcySrc = "Currency"
        varWsStrg = "List"
        varWbStrg = varDirPth

        Set clsColCcy = New clsColCcySrt
        Set clsColCcy.ColCcySrt = fncPopCcyLst(varWbStrg, varWsStrg, varCcySrc)

        'Debug.Princ clsColCcy.fncGetCcyRow("Reuters")
        Debug.Print clsColCcy.ColCcySrt.Item(1)

    End Sub
`
4

1 に答える 1