VBA ARRAY定义不适用于全局定义

时间:2019-05-22 16:29:46

标签: arrays excel vba

我通过以下方式将PIXEL_DATA定义为全局变量

Dim PIXEL_DATA() As Variant

我在子例程中使用ARRAY函数对其进行了初始化。在该子例程中,PIXEL_DATA中包含适当的数据。

但是当我尝试从另一个子例程访问时

 Ptr = PIXEL_DATA(2)

我收到“ PIXEL_DATA”蓝色并且错误消息“编译器错误:未定义子项或函数”。

我想念什么?

1 个答案:

答案 0 :(得分:2)

您缺少Dim正在PIXEL_DATA() where 的关键组成部分。这是一个示例:

Sub MainSub()

   Dim PIXEL_DATA() As Variant
   PIXEL_DATA = Array(1, 2, 3, 4, 5)
   Call OtherSub

End Sub
Sub OtherSub()

    Dim Ptr As Long
    Ptr = PIXEL_DATA(2)
    Debug.Print Ptr

End Sub

运行MainSub()将导致突出显示OtherSub()的编译错误,因为PIXEL_DATA()超出范围。但是将PIXEL_DATA()移到模块化级别会编译,运行并按预期将3返回到立即窗口:

Dim PIXEL_DATA() As Variant
Sub MainSub()

   PIXEL_DATA = Array(1, 2, 3, 4, 5)
   Call OtherSub

End Sub
Sub OtherSub()

    Dim Ptr As Long
    Ptr = PIXEL_DATA(2)
    Debug.Print Ptr

End Sub

如果您的OtherSub()在其他模块中,则需要像上面提到的@tigeravatar一样声明为Public