如何在VBA中创建全局数组?

时间:2019-05-07 10:30:14

标签: vba

我试图通过在第一个代码中将表转换为数组,然后在第二个代码中调用它来创建全局数组。但是,调用第二个代码时出现运行时错误“ 13”类型不匹配。

Public prio_row_num
Public prioritytbl As Variant

Sub Tabletoarray()

Dim prioritytbl As Variant

Worksheets("Prod_met").Activate

prioritytbl = ActiveSheet.ListObjects("prioritylist").DataBodyRange.Value

End Sub

Sub test()

MsgBox (prioritytbl(2, 2))

End Sub

我希望能够在代码的后续部分中调用prioritytbl。

1 个答案:

答案 0 :(得分:0)

如果可能,您不应使用全局变量。让我们为您举例说明如何做到这一点:

Option Explicit
Sub Tabletoarray()

    Dim prioritytbl As Variant
    prioritytbl = Worksheets("Prod_met").ListObjects("prioritylist").DataBodyRange.Value
    Call test(prioritytbl)

End Sub
Sub test(prioritytbl As Variant)

    MsgBox (prioritytbl(2, 2))

End Sub

请说一下,如果您需要使用全局变量,则不能在任何子变量中再次声明它:

Option Explicit
Public prio_row_num
Public prioritytbl As Variant

Sub Tabletoarray()

' Dim prioritytbl As Variant this needs to be deleted

    prioritytbl = Worksheets("Prod_met").ListObjects("prioritylist").DataBodyRange.Value

End Sub
Sub test()

    MsgBox (prioritytbl(2, 2))

End Sub

我还建议您阅读how to avoid using .select or .activate