我有一个被调用的中级函数,并调用其他函数。在函数内部,动态arrary是“Dim myarrary()As Variant”是从被调用的函数加载的。 arrary“myarrary”载有适当的数据。当我尝试将作品分配到范围
时Dim datarng as Range
datarng = WorkSheets("DATA").Range("A1:H3700").Value
调试器执行该语句并立即返回启动该进程的顶级例程。我想我以某种方式撞毁了堆栈,但我在myarray周围放置了字符串,它们完好无损。如果我注释掉赋值语句,则例程执行函数中的剩余代码。
答案 0 :(得分:3)
我的猜测是,您在顶级例程中有一个错误处理程序,但在较低级别的函数中没有。在这种情况下,当代码遇到运行时错误时,它会立即进入具有错误处理程序的例程。
另外,Dim myarrary()由于Variant创建了一系列变体,我认为这并不是你想要的。看起来你只想要一个变体,比如:
Dim myarrary As Variant
然后您可以为其指定范围,例如:
myarrary = WorkSheets("DATA").Range("A1:H3700").Value
答案 1 :(得分:2)
您的示例代码无法编译有两个原因:
Dim datarng as Range
datarng = WorkSheets("DATA").Range("A1:H3700").Value
WorkSheets("DATA").Range("A1:H3700")
,而不是WorkSheets("DATA").Range("A1:H3700").Value
。datarng
是一个对象(类型为Range
),因此您需要使用Set
关键字进行分配。左侧应为Set datarng
。因此正确的语法是:
Set datarng = WorkSheets("DATA").Range("A1:H3700")
当然,您也可以将datarng
的值内容转储到Variant中,如下所示:
Dim myArray as Variant
myArray = datarng ' or datarng.Value
答案 2 :(得分:1)
您错过了Set
datarng = WorkSheets("DATA").Range("A1:H3700").Value
应为Set datarng = WorkSheets("DATA").Range("A1:H3700")