У меня запланирована следующая процедура:
1.Пользователь выбирает данные, используя пользовательские формы
2.Пользователь просматривает данные, используя обычный Excel
3.Пользователь подтверждает, что данные в порядке (например, с пользовательской формой)
4.данные сохраняются
Все в одной программе VBA.
Вот мой прототип:
Модуль:
Sub ControlDataUI()
Dim Ui As New UserForm1
Dim Confirmend as Boolean
Debug.Print "dostuff"
With Ui
.Show (False) 'or .Show(True)
While Not .IsHiden
Wend
Confirmed=.Confirmed
End With
Debug.Print "Do some more stuff!"
If Confirmed then Call SaveStuff
Debug.Print "I will die!!"
End Sub
Userform1:
Private Type TView
IsCancelled As Boolean
Confirmed As Boolean
IsHiden As Boolean
End Type
Private this As TView
Public Property Get Confirmed() As Boolean
Confirmed = this.Confirmed
End Property
Public Property Get IsHiden() As Boolean
IsHiden = this.IsHiden
End Property
Private Sub CommandButton1_Click()
Debug.Print "YES!!!!"
this.Confirmed = True
this.IsHiden = True
Me.Hide
End Sub
Private Sub CommandButton2_Click()
Debug.Print "NO?!?!"
this.Confirmed = False
this.IsHiden = True
Me.Hide
End Sub
Private Sub UserForm_Terminate()
Debug.Print "Murder! I was killed!"
End Sub
Теперь проблема:
Без режима
При использовании режима без режима отображается пользовательская форма, но код продолжает работать до завершения.Я пытался остановить выполнение кода с помощью While Not .IsHiden
конструкции.Код замораживает Excel, потому что это бесконечный цикл.Так что это исключено. Есть ли способ реализовать это с немодальным дисплеем?
Модальный
Если я использую модальный дисплей, использование Excel блокируется иотображается только пользовательская форма.
В заключение: как модальное, так и немодальное отображение не позволяют пользователю управлять данными на листе.Есть ли решение этой проблемы?