Где-то у вас есть подпрограмма, которая выполняет что-то вроде этого:
Sub foo()
UserForm1.Show
End Sub
Вам необходимо изменить это для отображения формы vbModeless
, чтобы позволить пользователю взаимодействовать с Документом.Обратите внимание, что это позволит пользователю взаимодействовать с документом , пока отображается форма .
Sub foo()
Dim uf As New UserForm1
uf.Show vbModeless
End Sub
Если после uf.Show
есть какой-либо дополнительный исполняемый код, возможно, потребуетсятакже подвергнуться рефакторингу, так как он выполнит немедленно после того, как форма Show
n.
Если вы не хотите, чтобы пользователь мог взаимодействовать до тех пор, пока после форма не сделает то, что она делает, тогда не используйте параметр vbModeless
,и добавьте обработчик событий QueryClose
в форму.Таким образом, мы спрашиваем пользователя, хотят ли они просмотреть;если они говорят «Да», то мы скрываем и повторно отображаем форму с параметром vbModeless
.Теперь у них будет открытая форма и документ будет редактируемым.
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If MsgBox("Review document?", vbYesNo) = vbYes Then
Cancel = 1
Me.Hide
Me.Show vbModeless
End If
End Sub
Конечно, это может быть не совсем то, что вы хотите.Но эти тонкие моменты могут быть разработаны отдельно.Есть много вещей, которые я не знаю о вашем сценарии использования, который почти наверняка можно приспособить при правильном использовании UserForm
.Обратите внимание, что я не могу развлечь слишком много касательно связанных последующих вопросов, но этого должно быть достаточно, чтобы вы начали.
Я не уверен, что возможно сохранить значения в форме за пределами это Terminate
событие, которое происходит, когда пользователь закрывает форму или любой код вызывает Unload <userform object>
.Конечно, можно было бы сериализовать эти данные в текстовый файл или сохранить их каким-либо образом в пользовательских свойствах документа / свойствах данных клиента, но, вероятно, это должен быть отдельный вопрос.