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

时间:2011-09-27 19:07:14

标签: excel vba

我有一个被调用的中级函数,并调用其他函数。在函数内部,动态arrary是“Dim myarrary()As Variant”是从被调用的函数加载的。 arrary“myarrary”载有适当的数据。当我尝试将作品分配到范围

Dim datarng as Range

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

调试器执行该语句并立即返回启动该进程的顶级例程。我想我以某种方式撞毁了堆栈,但我在myarray周围放置了字符串,它们完好无损。如果我注释掉赋值语句,则例程执行函数中的剩余代码。

3 个答案:

答案 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
  1. 您无法为范围指定“值”。右侧应为WorkSheets("DATA").Range("A1:H3700"),而不是WorkSheets("DATA").Range("A1:H3700").Value
  2. datarng是一个对象(类型为Range),因此您需要使用Set关键字进行分配。左侧应为Set datarng
  3. 因此正确的语法是:

    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")