首页 > 解决方案 > 将范围传输到动态数组会导致运行时错误 1004

问题描述

尝试将范围从一个工作簿复制到另一个工作簿 - 在此过程中将对数据集执行其他任务,但这是我现在想要的要点。源工作簿中的范围不是静态的;这意味着每次生成报告时,必要的信息将出现在相同的列但不同的行中。范围中间有一列空白,我将忽略几列 - 以及一些数据计算/转换。为了尝试帮助解决源工作簿中数据位置的某种不可预测的性质,我将我的范围命名为 sub 中的变量 - 我不确定这是否是问题所在。一切似乎都在进行中,除非我将范围放入数组中。这是我所拥有的:

    Sub GetElemArray()

        Dim fndrng As Range
        Dim rEleAn As Range
        Dim frst As Range

        'the rest of the variables below are global

        Workbooks(SheetName).Activate
        Worksheets("Report").Activate
        Columns(2).Select

        Set fndrng = Selection.Find("Analyte")
        Set frst = fndrng.Offset(1, 0)
        Set rEleAn = Range(frst, fndrng.End(xlDown).End(xlToRight))

        EleList = rEleAn.Rows.Count
        ColList = rEleAn.Columns.Count
        ReDim ElAr(0 To EleList, 0 To ColList)

        For EleList = LBound(ElAR, 1) To UBound(ElAr, 1)
            For ColList = LBound(ElAr, 2) To UBound(ElAr, 2)

                'The following line returns the Runtime 1004 error
                ElAr(EleList, ColList) = Range(frst).Offset(EleList, _ 
                  ColList).Value
            Next ColList
        Next EleList

    Code to Do Other Stuff
    End Sub

查看 Locals 窗口,我可以看到rEleAn将其值存储为.Value2. 我尝试将 Range 更改为此属性,但它仍然返回相同的错误。在 Locals Window 中查看,据我所知,所有内容都已正确分配。

关于发生了什么的任何想法?

标签: excelvba

解决方案


如果我正确理解您的评论,请尝试:

Sub GetElemArray()

            Dim fndrng As Range
            Dim rEleAn As Range
            Dim frst As Range

            'the rest of the variables below are global
            Set fndrng = Worksheets("Report").Columns(2).Find("Analyte")
            Set frst = fndrng.Offset(1, 0)
            Set rEleAn = Range(frst, fndrng.End(xlDown).End(xlToRight))
            ElAr = rEleAn

        'Code to Do Other Stuff
    End Sub

推荐阅读