Инициализация глобальных переменных в VBA - PullRequest
6 голосов
/ 14 февраля 2011

В Excel 2003, как я могу объявить глобальные переменные и инициализировать их только один раз, т.е. когда книга открыта?

У меня есть несколько параметров, которые используются несколькими макросами: пути к входным файлам, в основном. На данный момент мой код выглядит так:

global path1, path2 as string

sub initPaths
    path1 = 'path\to\file1'
    path2 = 'path\to\file2'
end sub

Затем, когда мне нужно использовать file1 или file2 в подпрограмме или функции, я вставляю вызов initPaths. Но это кажется довольно не элегантным; Я хотел бы иметь возможность устанавливать пути только один раз, а не повторно.

1 Ответ

13 голосов
/ 14 февраля 2011

Из вашего примера выглядит, что вы хотите, чтобы вы были константами, а не глобальными переменными.

Public Const PATH1 = "path\to\file1"
Public Const PATH2 = "path\to\file2"

Если вам действительно нужно использовать код для определения значений, но хотите инициализировать их только один раз,Вы можете использовать ленивую инициализацию ...

Private mstrPath1 As String
Private mstrPath2 As String

Public Function Path1() As String
    if mstrPath1 = vbNullString Then
        ' Initialize mstrPath1 value here.
    End If
    Path1 = mstrPath1
End Function

Public Function Path2() As String
    if mstrPath2 = vbNullString Then
        ' Initialize mstrPath2 value here.
    End If
    Path2 = mstrPath2
End Function

Приятно то, что если ваш код когда-либо будет сброшен, значения просто будут заново инициализированы при следующем обращении к ним через их соответствующие функции.

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

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