Как вы можете просматривать документы Word во время работы макроса? - PullRequest
0 голосов
/ 19 июня 2019

Я хочу, чтобы пользователь мог просматривать документ Word, который генерирует макрос, до его остановки.Таким образом, им не нужно вводить все данные снова, поскольку, когда макрос останавливается, все данные стираются.Есть много полей, которые я не хочу, чтобы пользователь вводил повторно, если что-то не так.

Я пытался активировать макрос несколькими разными способами, от кнопки в текстовом документе до запуска его из VBA Alt + F11, но я получаю тот же результат: пользователь не может редактировать или просматривать словодокумент во время работы макроса, даже если он ничего не делает.

'' 'Private Sub CommandButton1_Click ()

InputForm.Show

End Sub' ''

Пользователь не может просматривать документ word до тех пор, пока макрос не будет остановлен и все введенные данные будут удалены.В качестве альтернативы, если есть возможность сохранить введенные данные, чтобы сохранить их при следующем запуске программы, это сработало бы, поскольку у меня есть кнопка «Очистить все».

1 Ответ

0 голосов
/ 19 июня 2019

Где-то у вас есть подпрограмма, которая выполняет что-то вроде этого:

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>.Конечно, можно было бы сериализовать эти данные в текстовый файл или сохранить их каким-либо образом в пользовательских свойствах документа / свойствах данных клиента, но, вероятно, это должен быть отдельный вопрос.

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