VBA函数返回赋值语句上的调用例程

我有一个中级函数被调用,并调用其他函数。 在函数内部,一个dynamic函数是“Dim myarrary()As Variant”从被调用的函数中加载。 古代的“myarrary”载入了正确的数据。 当我试图分配的范围

Dim datarng as Range datarng = WorkSheets("DATA").Range("A1:H3700").Value 

debugging器执行该语句并立即返回到启动该过程的顶级例程。 我想我以某种方式崩溃了堆栈,但是我已经在myarray周围放置了string,它们是完整的。 如果我注释掉赋值语句,程序将执行函数中的其余代码。

我的猜测是你在顶层例程中有一个error handling程序,但是在低级函数中没有。 在这种情况下,当代码遇到运行时错误时,它会立即跳至具有error handling程序的例程。

另外,Dim myarrary()As Variant创build一个变体数组,我不认为是你想要的。 看起来你只是想要一个变体,如:

 Dim myarrary As Variant 

然后你可以给它分配一个范围,例如:

 myarrary = WorkSheets("DATA").Range("A1:H3700").Value 

您的示例代码不会编译有两个原因:

 Dim datarng as Range datarng = WorkSheets("DATA").Range("A1:H3700").Value 
  1. 你不能给Range指定一个“值”。 右侧应该是WorkSheets("DATA").Range("A1:H3700") ,而不是WorkSheets("DATA").Range("A1:H3700").Value
  2. datarng是一个对象(types为Range ),所以你需要使用Set关键字来进行赋值。 左侧应该是Set datarng

正确的语法是:

 Set datarng = WorkSheets("DATA").Range("A1:H3700") 

当然,你也可以把datarng的值内容转储到这样的Variant中:

 Dim myArray as Variant myArray = datarng ' or datarng.Value 

您在datarng = WorkSheets("DATA").Range("A1:H3700").Value前缺lessSet datarng = WorkSheets("DATA").Range("A1:H3700").Value

Set datarng = WorkSheets("DATA").Range("A1:H3700")