为什么这个函数不返回带数据的数组?

时间:2015-10-21 20:05:42

标签: arrays excel vba function excel-vba

为什么这个函数在通过我的子程序后没有返回任何数据?

所需的三个数组是Returned_Array_CNRReturned_Array_NRReturned_Array_Rel As Variant

我是否使用Returned_Array = a_AR正确执行了返回语句?

我的目标是使用此函数返回三个单独的数组,我希望通过函数头中定义的Returned_Array参数来标题它们。

我在函数的参数中传递了这个变量 - 我这样做了吗?

    Public Function a_AR(ByVal cA, cB, ByVal cC As Double, cName As String, Returned_Array As Variant, Optional cD As Double) As Variant()
        Lr = Range("A65000").End(xlUp).row
        ReDim aAR(1 To Lr, 1 To 4)
        ReDim Returned_Array(1 To Lr, 1 To 4)
              For r = 2 To Lr
             cRow = cRow + 1
             aAR(cRow, 1) = Sheets(1).Cells(r, cA) 'Fund Number
             aAR(cRow, 2) = Sheets(1).Cells(r, cB) 'class
             'Debug.Print aAR(cRow, 2) 'debugging
            If cName = "Net Assets" Then
                aAR(cRow, 3) = Sheets(1).Cells(r, cD) / Sheets(1).Cells(r, cC) 'TNA
            Else
                aAR(cRow, 3) = Sheets(1).Cells(r, cC)
            End If
         Next r

        Returned_Array = a_AR

    End Function


    Sub Refactored_Macro()

    'CNR array
    ImportCNR_w_Paramaters "B2", "Entity ID", "Share Class", "Exchange Rate", Returned_Array_NR, "Net Assets"
    'Nav rec array
    ImportCNR_w_Paramaters "B3", "ENTITY_ID", "LEDGER_ITEMS", "BALANCE_CHANGE", Returned_Array_CNR
    'Relationship array
    ImportCNR_w_Paramaters "B4", "Hedge Entity Id", "Entity ID", "Share Class", Returned_Array_Rel

    End Sub

    Sub ImportCNR_w_Paramaters(cell As String, cName1, cName2, cName3 As String, Returned_Array2 As Variant, Optional cName4 As String)

    MyPath = Range(cell)                                'Defines cell that contains path to source that have been saved down
    Workbooks.Open (MyPath)                             'Opens workbook that have been saved down
    Set tempbook = ActiveWorkbook                       'Names  workbook for future closing
    'LR = Range("A65000").End(xlUp).row                  'finds last row in edits



    'ReDim aAR(1 To LR, 1 To 4)
    cRow = 0
     cName = cName1
     cA = Cells.Find(What:=UCase(cName), After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Column
     cName = cName2
     cB = Cells.Find(What:=UCase(cName), After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Column
     cName = cName3
     cC = Cells.Find(What:=UCase(cName), After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Column
     cName = cName4
     cD = Cells.Find(What:=UCase(cName), After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Column

    '      For r = 2 To LR
    '         cRow = cRow + 1
    '         'a_AR(cRow,r,cA,cB,cC,cD,cName)

                a_Array = a_AR(cA, cB, cC, cName, Returned_Array2, cD)

    '
    '        aAR(cRow, 1) = Sheets(1).Cells(r, cA) 'Fund Number
    '        aAR(cRow, 2) = Sheets(1).Cells(r, cB) 'class
    '        aAR(cRow, 3) = Sheets(1).Cells(r, cD) / Sheets(1).Cells(r, cC) 'TNA
    '
    '     Next r


    tempbook.Close

    End Sub

1 个答案:

答案 0 :(得分:2)

也许你正在寻找这样的东西?

Public Function a_AR(ByVal cA, cB, ByVal cC As Double, cName As String, Optional cD As Double) As Variant()

Lr = Range("A65000").End(xlUp).Row
ReDim aAR(1 To Lr, 1 To 4)
For r = 2 To Lr
    cRow = cRow + 1
    aAR(cRow, 1) = Sheets(1).Cells(r, cA) 'Fund Number
    aAR(cRow, 2) = Sheets(1).Cells(r, cB) 'class
    'Debug.Print aAR(cRow, 2) 'debugging
    If cName = "Net Assets" Then
        aAR(cRow, 3) = Sheets(1).Cells(r, cD) / Sheets(1).Cells(r, cC) 'TNA
        Else
        aAR(cRow, 3) = Sheets(1).Cells(r, cC)
    End If
Next r
a_AR = aAR

End Function
Sub Refactored_Macro()
    'CNR array
    Returned_Array_NR = ImportCNR_w_Paramaters("B2", "Entity ID", "Share Class", "Exchange Rate", "Net Assets")
    'Nav rec array
    Returned_Array_CNR = ImportCNR_w_Paramaters("B3", "ENTITY_ID", "LEDGER_ITEMS", "BALANCE_CHANGE")
    'Relationship array
    Returned_Array_Rel = ImportCNR_w_Paramaters("B4", "Hedge Entity Id", "Entity ID", "Share Class")
End Sub