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
- 你不能给Range指定一个“值”。 右侧应该是
WorkSheets("DATA").Range("A1:H3700")
,而不是WorkSheets("DATA").Range("A1:H3700").Value
。 -
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")