Можно ли создавать и устанавливать словари VBA вне функций? - PullRequest
0 голосов
/ 10 мая 2019

Я создаю несколько пользовательских функций в Excel VBA, которые требуют использования 3 словарей.

Эти словари не изменяются после их установки.

Прямо сейчас каждый словарь создается внутри каждой функции.

Я бы предпочел очистить его, установить словарь один раз и просто ссылаться на него в функциях.

К сожалению, я не могу найти документацию по этому вопросу.

Ответы [ 2 ]

6 голосов
/ 10 мая 2019

Вы ищете глобальные переменные, которые являются переменными, сохраняющимися в памяти на протяжении всего выполнения программы.

Практически:

Dim myDictionary As Scripting.Dictionary '<-- on top of module, outside of any macro/function. This makes the variable LOCAL to the module (i.e. accessible all over the subs and functions of the module)
'Alternatively (one or the other)
Public myDictionary As Scripting.Dictionary '<-- the variable is GLOBAL to all the program.

Sub init() '<-- initialize your dictionary once
    Set myDictionary = New Scripting.Dictionary
    myDictionary.add "Apples", 50
    myDictionary.add "Bananas", 40
End Sub

Function a() As Integer
    ...
    a = myDictionary("Apples") '<-- use your dictionary when you want
    ...
End Function

Вы можете позвонить на init внутри события ThisWorkbook.Open, чтобы, как только ваша рабочая книга была открыта, ваши словари жили всеза исполнение.

4 голосов
/ 10 мая 2019

Примерно так:

'declare some global variables to hold your dictionaries
Dim dict1 as object, dict2 as object, dict3 as object

'a sub to create and populate the dictionaries
sub InitDicts()
    If dict1 is nothing then

        'create and populate dicts 1-3

    End if
end sub

'*** functions which use the dictionaries ***

Function ThisFunction()
    InitDicts
    'use dicts
end function

Function ThatFunction()
    InitDicts
    'use dicts
end function
...