从不同的子返回变量不会保留值

问题描述 投票:0回答:1

在这里,我调用一个子例程,它将为我做excel中的一些事情,我希望得到IQRef()IQRngRef()填写:

    Dim IQRef() As Variant
    Dim IQRngRef() As Variant
    CaptureExcelReferences xlWB, pivotSheetName, IQRef, IQRngRef

这是Sub例程,它要求CaptureIQRefsLocally填写IQRef()IQRngRef()

Private Sub CaptureExcelReferences(ByVal xlWB As Workbook, ByVal pivotSheetName As String, ByRef IQRef() As Variant, ByRef IQRngRef() As Variant)
    Dim ShRef As Excel.Worksheet
    Set ShRef = xlWB.Worksheets(pivotSheetName)

    Dim colNumb As Long
    colNumb = ShRef.Cells(1, ShRef.Columns.Count).End(xlToLeft).Column

    ReDim IQRef(colNumb)
    ReDim IQRngRef(colNumb)

    Dim rowNumb As Long
    rowNumb = ShRef.Cells(ShRef.Rows.Count, 1).End(xlUp).Row

    CaptureIQRefsLocally ShRef, rowNumb, colNumb, IQRef, IQRngRef
    IdentifyRolesAndScoresRows IQRngRef, rowNumb
End Sub

这是实际上填充IQRef()IQRngRef()的Sub

Private Sub CaptureIQRefsLocally(ByVal ShRef As Worksheet, ByVal rowNumb As Long, ByVal colNumb As Long, ByRef IQRef As Variant, ByRef IQRngRef As Variant)
    'capture IQ references in arrays. Values for column titles in IQRef and full column Ranges in IQRngRef.
    Dim iCol As Long
    Dim alignIQNumbToArrayNumb
        For iCol = 1 To colNumb
            alignIQNumbToArrayNumb = iCol - 1
            Set IQRngRef(alignIQNumbToArrayNumb) = ShRef.Range(ShRef.Cells(1, iCol), ShRef.Cells(rowNumb, iCol))
            IQRef(alignIQNumbToArrayNumb) = ShRef.Cells(1, iCol).Value
            'IsThisaKeyIQ IQRngref, IQRef
        Next iCol
End Sub

一切都适用于IQRef,它被正确填充并完全和完全传回主Sub(每个数组插槽填充一个单元格的字符串,因此它为每个插槽返回一个字符串。)

对于IQRngRef,每个插槽都填充了一个范围,结果不是那么好。在CaptureIQRefsLocally中它被正确填充并且它正确地将值传递回CaptureExcelReferences,它甚至能够正确地在下面的子IdentifyRolesAndScoresRows中使用(它根本不会在这个子中被修改,并且值在值时仍然是正确的返回)...但是当它被传递回主子IQRngRef时,它是空的......是的。它看起来像这样:enter image description here

发生这种情况的原因(正如我在输入时发现的那样)是因为我在这个sub之后关闭了excel工作簿和应用程序,所以我可以回到powerpoint工作(我只想进入excel,获取信息)我需要,将它存储在数组中并关闭它。)有没有办法在数组中保存所有相同的值并关闭excel应用程序?

vba excel-vba powerpoint-vba excel
1个回答
0
投票

使用

IQRngRef(alignIQNumbToArrayNumb) = Application.Transpose(ShRef.Range(ShRef.Cells(1, iCol), ShRef.Cells(rowNumb, iCol)).Value)

这样每个IQRngRef插槽都将存储一维数组

© www.soinside.com 2019 - 2024. All rights reserved.