Как выйти из нескольких сабов в Word VBA - PullRequest
1 голос
/ 27 февраля 2020

Я использую VBA. У меня есть Word do c, который запускает пользовательскую форму при открытии. Пользовательская форма принимает множество входных данных от пользователя (через текстовые поля, поля со списками, флажки и списки), а затем нажимается командная кнопка внизу пользовательской формы. Затем исполняемый код берет все входные данные из пользовательской формы, обрабатывает информацию и заполняет соответствующие данные в нескольких закладках в документе.

Обычно я не уделяю много внимания исправлению ошибок и, следовательно, моим макросам cra sh если я не все делаю правильно (я просто в нерабочее время нуб, делаю личные проекты). Я пытаюсь реализовать лучшие практики, и поэтому я хочу встроить некоторый код обработки ошибок. В частности, я хочу, чтобы пользователь был проинформирован, если поле данных в пользовательской форме пропущено, и обработка сценария остановлена.

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

Мой текущий поток такой: нажата командная кнопка и суб процедура проходит через каждое поле ввода в пользовательской форме. Для каждого поля ввода он вызывает другую подпрограмму, чтобы получить значения из поля ввода. Затем эта подпрограмма вызывает другую подпрограмму для обновления соответствующей закладки. Затем управление возвращается к основной подпрограмме, которая вызывается кнопкой команды, и обрабатывается следующее поле ввода.

Я проверяю пустое поле / пропущенный ответ во второй подпрограмме, которая захватывает значение для поля. Используя оператор If, я могу запустить окно сообщения и выйти из подпрограммы, если есть нулевое значение. Но это выходит только из вторичной субмарины; основная подпрограмма, которая была запущена при нажатии кнопки, продолжает работать и обрабатывать оставшиеся поля ввода. Я также хочу остановить этот процесс, так что пользователь должен снова нажать командную кнопку после исправления ошибки. Я не хочу делать команду завершения терминала, потому что это очистит пользовательскую форму, и мне придется начинать с нуля. Как я могу остановить обе запущенные подпрограммы, не отключая все это?

Заранее спасибо,

1 Ответ

0 голосов
/ 27 февраля 2020

Вы можете изменить свою вторую подпрограмму на функцию, которая возвращает значение bool для успеха или неудачи, а затем при выходе из основной процедуры, если это ошибка.

...