Я думаю, что первоначальная тема заслуживает ответа, так как вопрос был сформулирован так хорошо, что Google находит его первым.
Раздел 1 - Теория
Первая Можно сказать, что для переноса переменных между модулями совсем не сложно.
Единственное, что вам нужно сделать, - это создать отдельный модуль и поместить туда все глобальные переменные.,Тогда вы сможете читать их везде во всех формах, листах, модулях.
Вторым моментом является то, что окно должно быть МОДЕЛЬНЫМ.Почему так?Ответ - , чтобы сохранить мобильность кода , т. Е.
- . Функция, в которой выполняется самый обычный процесс, не должна находиться в модуле UserForm
- единственной связью между обычной функцией / процедурой являются глобальные переменные
Это большое преимущество, чтобы быть универсальным здесь.
Раздел 2 - Практика
1) Создайте модуль "Объявление" с глобальными переменными:
Public StopForce As Integer ', эта переменная будетиспользуется в качестве индикатора того, что пользователь нажал кнопку отмены
Public PCTDone As Single 'это% выполненной работы
Public CurrentFile As String' любой другой параметр, который нам нужендля перехода на форму.
2) Создайте форму с помощью кнопки.В событии OnClick кнопки должен быть код, где мы ссылаемся на глобальную переменную StopForce в Декларация модуль
Private Sub CommandButton1_Click()
Declaration.StopForce = 1
End Sub
3) Добавьте одну процедуру, где выобновить индикатор выполнения
Sub UpdateProgressBar(PCTDone_in As Single)
With UserForm1
' Update the Caption property of the Frame control.
.FrameProgress.Caption = Format(PCTDone_in, "0%")
' Widen the Label control.
.LabelProgress.Width = PCTDone_in * _
(.FrameProgress.Width)
' Display the current file from global variable
.Label1.Caption = Declaration.CurrentFile
End With
End Sub
4) в любом другом модуле у нас должны быть функции или процедура / подпрограмма, в которой выполняется подпрограмма:
For i=1 to All_Files
Declaration.CurrentFile = myFiles (i)
FormFnc.UpdateProgressBar (i / .Range("C11").Value)
DoEvents
If Declaration.StopForce = 1 Then
GoTo 3
End If
Next i