Объявление и заполнение переменной словаря уровня глобуса в VBA - PullRequest
0 голосов
/ 03 октября 2018

Итак, у меня есть словарь, который содержит одинаковые ключи и значения в двух разных подпрограммах в модуле.То есть в подпрограммах есть некоторый повторяющийся код, а именно: Dim Dict As Scripting.Dictionary и Dict.Add Key, Value для его заполнения.Я подумал, что вместо этого я должен сделать словарь переменной глобального / модульного уровня, но мне сложно понять, как заполнить словарь с большей областью действия.

Запуск моего модуля выглядит следующим образом:

Option Explicit
Option Compare Text ' for some other stuff I need to do
Public Dict As Scripting.Dictionary

Просто добавив Dict.Add до того, как какой-либо из сабвуферов не сработает, я получаю ошибку компиляции: Недопустимая внешняя процедура.

Любые советы или хитрости будут высоко оценены!

1 Ответ

0 голосов
/ 03 октября 2018

Предполагая, что вы добавили Microsoft Scripting Runtime к ссылкам проекта, это должно сработать.

Option Explicit
Option Compare Text
Public Dict As New Scripting.Dictionary

Sub d1()
    Dict.Item(1) = 2
End Sub

Sub da()
    Dict.Item("a") = "b"
End Sub

Однако, если вы ожидаете, что ваш общедоступный словарь будет иметь dict.CompareMode vbTextCompare, вы будетенеправильно.Свойство CompareMode будет иметь значение vbBinaryCompare, а параметр CompareMode может быть установлен только для пустого словаря.

Если вам требуется vbTextCompare для словаря, то, возможно, что-то вроде этого.

Option Explicit
Option Compare Text
Public Dict As New Scripting.Dictionary

Sub d1()
    if dict.count = 0 then dict.comparemode = vbtextcompare
    Dict.Item(1) = 2
End Sub

Sub da()
    if dict.count = 0 then dict.comparemode = vbtextcompare
    Dict.Item("a") = "b"
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...