Excel 正在传递数组ByRef,下标超出范围

Excel 正在传递数组ByRef,下标超出范围,excel,vba,Excel,Vba,我正在尝试将大量数组从我的Main子程序传递到另一个子例程以加载。我正在传递ByRef以将它们作为指针传递,以便在加载它们之后,我可以在Mainsub中继续使用它们。我还将一本字典传递给load sub 当我开始在Build_Objects子对象中的数组中循环时,我遇到了下标超出范围的错误,我似乎无法找出原因 我的简化代码: Sub-Main() '//声明 Dim arr_data()作为变量 Dim dict_头作为对象 Dim arr_head1()作为变型,arr_head2()作为变型

我正在尝试将大量数组从我的
Main
子程序传递到另一个子例程以加载。我正在传递
ByRef
以将它们作为指针传递,以便在加载它们之后,我可以在
Main
sub中继续使用它们。我还将一本字典传递给load sub

当我开始在
Build_Objects
子对象中的数组中循环时,我遇到了
下标超出范围的错误,我似乎无法找出原因

我的简化代码:

Sub-Main()
'//声明
Dim arr_data()作为变量
Dim dict_头作为对象
Dim arr_head1()作为变型,arr_head2()作为变型
Dim arr_平台()作为变型
'//设置
Set dict_headers=CreateObject(“Scripting.Dictionary”)
'在main之前,需要生成对象
调用生成对象(arr_头1、arr_头2、dict_头、arr_平台)
.
.
.
端接头
Build\u Objects()
sub:

子构建对象(ByRef arr_head1P作为变量,ByRef arr_head2P作为变量,ByVal dict_headP作为对象,ByRef arr_plat作为变量)
'//声明
暗淡的我与你一样长
雷迪姆到达平台(1到9,1到4)
'//数组
arr_head1P=数组(“名字”、“姓氏”、“电子邮件”、“电话”、“电话”、“电话”、“电话”、“邮政编码”、“国家”、“DOB”、“性别”)
arr_head2P=数组(“fn”、“ln”、“email”、“Google_ph1”、“FB_ph1”、“Google_ph2”、“FB_ph2”、“POSTCODE”、“COUNTRY_CODE”、“CUSTOMER_DOB”、“CUSTOMER_GENDER”)
“//字典
对于i_arr=LBound(arr_head1P)到UBound(arr_head1P)
编辑标题。添加标题2P(i_arr),标题1P(i_arr)
下一步我到了
端接头
当数组
arr\u head2P
上的
i_arr=1
时,会发生
下标
错误。但正如您在下面看到的,在进入
For
循环之前,
arr\u headP2
已正确加载,并且
arr\u head2P(1)
应返回
ln
是否为错误


有人知道这件事,或者为什么会发生?我忽略了什么?感觉好像我疯了

这里出现了某种内存引用问题,将
Dim arr\u head1替换为Variant(),arr\u head2替换为Variant()
将Dim arr\u head1替换为Variant(),arr\u head2替换为Variant

为什么要传递两个数组,然后在子数组中定义它们?在dict\u headP上放置一个断点。添加arr\u head2P(i\u arr),arr\u head1P(i\u arr)然后使用F8。尝试找出代码处理
arr\u i=0
而不是
arr\u i=1
的原因。我也一直在想字典是不是空的。这类谜题经常出现,不是因为代码有问题,而是因为测试过程有问题。@SJR他想在以后的main sub中使用它们的值。他这样说。问题的第一段,我可以复制这个问题。我认为在循环的第二次迭代中存在某种内存引用问题。至少在我的计算机上,
arr\u head2P
的边界发生了更改,这导致了错误。我会重构这段代码,这样你就可以传递数组
ByVal
。我想我现在看到了这个问题,尽管我认为这段代码无论如何都应该重构。将
Dim arr\u head1替换为Variant(),arr\u head2替换为Variant()
Dim arr\u head1替换为Variant(),arr\u head2替换为Variant()。干杯,谢谢。希望这里的一些VBA神能够在读到这篇文章后,对这个问题有更多的了解!