Excel 将范围传输到动态数组时出现运行时错误1004

Excel 将范围传输到动态数组时出现运行时错误1004,excel,vba,Excel,Vba,试图将一个范围从一个工作簿复制到另一个工作簿-在这个过程中会对数据集执行其他任务,但这就是我现在想要的要点。源工作簿中的范围不是静态的;这意味着每次生成报告时,必要的信息将显示在相同的列中,而不是相同的行中。有一个空白列在中间的范围和几个列,我将忽略-连同一些计算/数据转换。为了帮助解决源工作簿中数据位置的不可预测性,我在子工作簿中将我的范围命名为一个变量,我不确定这是否是问题所在。一切似乎都在进行中,除了我将范围放入数组时。以下是我得到的: Sub GetElemArray()

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

    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
通过“局部变量”窗口,我可以看到
rEleAn
将其值存储为
.Value2
。我尝试更改此属性的范围,但它仍然返回相同的错误。从“本地人”窗口中可以看出,所有的东西都被正确地分配到了附近


关于正在发生的事情有什么想法吗?

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

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

激活一个工作表,然后立即激活另一个工作表。请阅读并留心。这和您试图做的一样:ElAr=relian吗?而您的Redim将使数组的行和列分别为1行和1列big@Jeeped非常确定我激活的是工作簿(SheetName)——SheetName变量来自表单——然后是工作表(“报告”)。但我会考虑避免选择,谢谢。@EvR是的,这就是我要做的。早上上班的时候,我会给EleList和ColList一个减号,看看这能不能解决问题。谢谢。@Jeeped,将SheetName变量更改为FlNm以避免混淆。按照EvR的建议避免选择。谢谢早些时候,我也尝试过类似的方法,不过有点冗长。我几乎完全尝试了您所写的内容-我必须将
Sheet1
更改为
Report
,因为我无法控制从中获取数据的工作表的名称。不幸的是,这仍然无法捕获阵列的数据。我的本地窗口中没有变量。我添加了
EleList=rEleAn.Rows.Count-1
ColList=rEleAn.Columns.Count-1
,根据您之前关于范围大小不正确的陈述。这不起作用。我还保留了计数的-1,并将
Value
更改为
Value2
。不行,Nvm,我已经解决了
ElAr(EleLst,ColLst)=范围(frst).Offset(EleLst,ColLst).Value
需要是
ElAr(EleLst,ColLst=frst.Offset(EleLst,ColLst).Value
。运行时错误1004突然出现,因为
范围(frst)
在工作表中查找命名范围,而不是VBA定义的变量范围。我刚刚意识到您的变量范围也可以工作。@EvR。我在“局部变量”窗口中查找变量信息,而不是试图打印到工作表中。标记为已解决。感谢您的帮助。