2012-03-27 2 views
6

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

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

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

ответ

6

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

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 

код вашего UserForm, так и в стандартном модуле

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 
+0

Совершенная, спасибо! – Cutter

+0

Возможно ли передать переменную из Userform в модуль без создания глобальной переменной? – Cutter

1

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

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

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

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

Смежные вопросы