Есть ли способ использовать локальные переменные в разных модулях? - PullRequest
6 голосов
/ 27 марта 2012

У меня есть проект VBA с модулем и пользовательской формой. Я хочу использовать некоторые переменные из моего модуля в моей пользовательской форме.

Необходимо ли мне объявлять эти переменные глобально? Мне не нравятся глобальные переменные, потому что они остаются в памяти после выполнения кода, и я должен сбросить эти переменные один за другим в начале моего макроса. Я не могу использовать ключевое слово End, чтобы очистить переменные из памяти, потому что мне нужно запомнить одну или две из этих переменных. Как люди обычно делают?

Редактировать: есть ли способ передать переменную из пользовательской формы в модуль без создания глобальной переменной?

Ответы [ 2 ]

6 голосов
/ 27 марта 2012

Создайте публичное свойство в вашей пользовательской форме и передайте переменную в форму, используя это свойство. Useforms являются просто модулем класса, за исключением того, что они имеют компонент пользовательского интерфейса. Пример: в модуле кода вашей пользовательской формы

Option Explicit

Private msLocalVar As String

Public Property Get LocalVar() As String
    LocalVar = msLocalVar
End Property

Public Property Let LocalVar(sLocalVar As String)
    msLocalVar = sLocalVar
End Property

Private Sub CommandButton1_Click()

    Me.LocalVar = Me.LocalVar & " more strings attached"

    Me.Hide

End Sub

А в стандартном модуле

Sub ShowForm()

    Dim sLocalVar As String
    Dim ufUserForm1 As UserForm1

    sLocalVar = "Some string"

    Set ufUserForm1 = New UserForm1
    ufUserForm1.LocalVar = sLocalVar 'pass in variable
    ufUserForm1.Show

    'This executes after the .Hide in the form
    Debug.Print ufUserForm1.LocalVar

    'Close out the form - previously just hidden
    Unload ufUserForm1

End Sub
1 голос
/ 27 марта 2012

Один из способов сделать это - объявить публичные переменные следующим образом:

Public strvar as String
Sub Abfrage()
'Your Code
End Sub

Но если вы не предпочитаете этот способ, вы можете вставить новый лист Excel, установить для свойств нового листа значение "2 - xlSheetVeryHidden", и вы можете записать свои значения в ячейки этого листа и прочитать их в из вашей пользовательской формы.

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

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