Excel VBA - Как создать ИСТИННУЮ глобальную переменную - PullRequest
0 голосов
/ 27 августа 2018

Что я хочу сделать:

Я хочу знать, как создать TRUE Глобальную переменную

Что я нашел до сих пор:

У меня естьпрочитайте сотни статей о создании глобальной переменной в Excel, но, к сожалению, ни одна из них на самом деле не решает реальный вопрос.но ни один из них не является действительно «ГЛОБАЛЬНЫМ» в том смысле, что переменная не может быть доступна / изменена из любого рабочего листа / VBA в рамках проекта / решения.

Чтобы сделать этот вопрос явным, я хочу создать переменную, котораяможет быть:

  1. Установить значение по умолчанию с помощью процедуры Open_Workbook в пространстве "рабочей книги" и
  2. Доступ / изменение из процедур VBA, связанных с ЛЮБОЙ рабочей таблицейтекущая рабочая тетрадь.

Может быть, я просто упускаю что-то очевидное, но это серьезная проблема, на которую, похоже, никто не может ответить кратко.

1 Ответ

0 голосов
/ 27 августа 2018

Просто добавьте ThisWorkbook с пользовательским свойством вместо использования глобальной переменной:

'ThisWorkbook
Option Explicit

Private stored As Long

Public Property Get StoredValue() As Long
    StoredValue = stored
End Property

Public Property Let StoredValue(rhs As Long)
    stored = rhs
End Property

Private Sub Workbook_Open()
    stored = 42
End Sub

Это будет сохранять свое состояние до тех пор, пока рабочая книга открыта, с одним важным предупреждением - всем, чтовызывает перекомпиляцию класса Workbook и сбрасывает его состояние. См. Этот вопрос для получения дополнительной информации.Обратите внимание, что для этого есть обходные пути, такие как использование пользовательского свойства вместо закрытой переменной для вспомогательного поля.Использование будет таким же, как и любое другое свойство рабочей книги, хотя вам нужно ссылаться на него по его кодовому имени:

'This code goes anywhere you want...
Public Sub Example()
    MsgBox ThisWorkbook.StoredValue
    ThisWorkbook.StoredValue = ThisWorkbook.StoredValue + 1
End Sub
...