Как создать глобальный массив в VBA? - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь создать глобальный массив, преобразовав таблицу в массив в первом коде, а затем вызвав его во втором коде. Однако при вызове моего второго кода я получаю несоответствие типа «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 голосов
/ 07 мая 2019

Вы не должны использовать глобальные переменные, если это возможно. Давайте приведем пример того, как вы можете это сделать:

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

Я бы также рекомендовал вам прочитать на , как избежать использования .select или .activate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...