Miguel Altamirano Morales Ответов: 1

Почему команда "Стоп" не приостанавливает выполнение кода access VBA ?


Я работаю с исходным кодом (файл.accdb) ранее разработанного проекта Access 2010, чтобы внести некоторые изменения и модификации, требуемые пользователями, и у меня возникают определенные проблемы, когда я пытаюсь запустить его (из исходного кода) и попытаться отладить поток выполнения через модули системы.

Я заметил, что код доступа VBA не сохраняет точки останова, которые я устанавливаю при сохранении проекта, точно так же, как это делал Visual Basic 6.0 (или NET, я плохо помню). Итак, я должен снова загрузить базу данных, удерживая клавишу shift, которая, как я теперь знаю, переопределяет выполнение начального макроса autoexec и загрузку настраиваемой ленты опций. Это единственный способ, которым я могу взаимодействовать с кодом VBA как программист, насколько я видел до сих пор.

Я добавил команду" Stop "к паре модулей в коде, пытаясь имитировать точку останова во время выполнения (все еще в исходном файле), но работает только первая, которую я установил в одном из модулей, выполняемых макросом autoexec, а не вторая, которую я установил в процедуре, запущенной, когда пользователь выбирает опцию на настраиваемой ленте и триггеры XML-тега" onAction". Этот модуль находится вне диапазона макроса autoexec; это единственная "конкретная" точка, которую я замечаю.

Есть ли другой способ запустить всю систему через файл. accdb, не используя клавишу shift ? (начиная, как установлено, с макроса autoexec)

Я посылаю копию кода, который не работает. Предыдущий Msgbox перед "остановкой" работает хорошо, поэтому я не знаю, почему следующий "стоп" терпит неудачу (просто не приостанавливает выполнение). Я очень ценю вашу помощь.

Вот код:

Суб OnActionTglButton(контроля методом iribboncontrol, давили, как логическое)

'Callbackname в XML-файле" onAction"

'Обратный вызов для события нажатия кнопки переключения

MsgBox "Quitar éste mensaje", vbCritical, " basRibbonCallbacks"

Стоп

Выберите случай-контроль.Идентификатор

Дело "tgbclientes"
В разделе: tabclientes
'В группе: grpclientes
parms(6) = min_pedido()
Если параметр (125) = 1, то
DoCmd. RunSQL ("UPDATE dbo_restricciones SET formulario='f_clientes' " & _
"Где programa_id=9")
Еще
DoCmd. RunSQL ("UPDATE dbo_restricciones SET formulario='f_clientes_america' " & _
"Где programa_id=9")
Конец, Если

......... продолжает

Что я уже пробовал:

Я пытаюсь изолировать проблему, возможно, открытый режим базы данных в Access имеет к этому какое-то отношение.

Если я:

1. - дважды щелкните исходную базу данных (. accdb) через Проводник Windows:

- Он скрывает меню по умолчанию и загружает пользовательскую ленту. Не выполняет команды "Стоп".

2. - Введите доступ-дважды щелкните исходную базу данных в том, что они называют backstage списка файлов:

- Он скрывает меню по умолчанию и загружает пользовательскую ленту. Не выполняет команды "Стоп".

3. - Введите доступ - Нажмите кнопку "Открыть" - выберите БД в диалоговом окне открыть файл:

- Он скрывает меню по умолчанию и загружает пользовательскую ленту. Не выполняет команды "Стоп".

4. - Введите доступ - загрузите БД, удерживая клавишу & lt;shift> - выполните макрос autoexec непосредственно или шаг за шагом:

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

1 Ответов

Рейтинг:
10

Dave Kreskowiak

VBA поддерживает точки останова. Просто нажмите на строку, на которой вы хотите, чтобы отладчик остановился, и нажмите F9. Нет никакой необходимости перчить код "стоп".

Нет, точки останова не сохраняются вместе с проектом. Да, вы должны устанавливать их каждый раз, когда хотите их использовать.

Кроме того, вам не нужно закрывать и снова открывать проект каждый раз, когда вы хотите его запустить. Autoexec следует использовать только для инициализации кода, а не для запуска всего в проекте.


Miguel Altamirano Morales

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

Есть опция " выполнить "в панели инструментов Visual Basic, с" выполнить Sub/UserForm", я пытаюсь увидеть, как это работает.

Моя непосредственная потребность-запустить весь код с самого начала в файле. accdb.

Miguel Altamirano Morales

Единственный способ увидеть код vba для установки точек останова-это загрузить базу данных, удерживая клавишу shift. И если я это делаю, то моя настроенная лента не загружается, а находится именно в том модуле, где XML-тег "onAction" моей ленты запускает все формы и другие процедуры.

Такой бардак !!!.

Есть ли способ получить доступ к коду VBA без загрузки исходной базы данных, удерживая клавишу shift ?

Dave Kreskowiak

Нажмите Alt-F11.

Miguel Altamirano Morales

Я пробовал это несколько раз, но это не работает, Дейв.

Я дважды щелкаю исходную базу данных в списке backstage, чтобы выполнить ее, и когда появляется первая форма, я пытаюсь установить точки останова, но Access не реагирует на комбинацию Alt-F11. Единственный способ увидеть код VB-это загрузить базу данных, удерживая клавишу shift. Если я найду способ увидеть код при запуске приложения таким образом (в исходной базе данных), то я решу свою проблему. Я не знаю, является ли это проблемой конфигурации.

Еще раз большое спасибо, Дэйв, и, пожалуйста, извините меня, если я звучу слишком наивно с этими вопросами, я никогда раньше не работал с Access (среда, а не код vba). Я знаю, что это должно быть очень просто, и когда я найду это, я буду смеяться над этим, но сейчас я действительно спешу, мне очень нужны деньги.

Dave Kreskowiak

Все, что я могу вам сказать, - это удалить макрос Autoexec и переместить любой код, который был в нем, в свой собственный метод. Затем вы можете настроить кнопку для вызова этого метода, чтобы запустить приложение на butt on click.

Miguel Altamirano Morales

Я полагаю, что это было бы то же самое, если бы я установил начальную форму и вызвал функции, которые были вызваны из autoexec при загрузке форм, не так ли ?

Dave Kreskowiak

Что происходит, когда вы пытаетесь это сделать?

Miguel Altamirano Morales

То же самое, я больше не могу видеть код vba, чтобы установить точки останова, даже с помощью Alt+F11. И вся система зависит от того, чтобы для выполнения ее нескольких вариантов увидеть настроенную ленту.

Miguel Altamirano Morales

Единственный способ получить доступ к коду vba, который я нашел до сих пор, - это загрузить базу данных, удерживая клавишу shift. Я читал, что это предотвращает загрузку настроенной ленты. Поэтому я должен выяснить, как установить точки braek при запуске приложения. Именно по этой причине я пытался использовать утверждения "стоп".

Dave Kreskowiak

У меня нет для тебя решения.

Miguel Altamirano Morales

В любом случае большое спасибо, Дэйв, я полагаю, что мне придется работать без использования точек останова в некоторых областях кода. Если я найду решение, я дам вам знать (если вы согласны). Это очень странная проблема. это противоречит всему, что я читал об этом. Не знаю, смогу ли я сделать это здесь.

Dave Kreskowiak

Честно говоря, мне все равно. Я больше никогда не использую Access ни для чего из-за такого дерьма, как это, и у него ограниченный SQL-движок.

Miguel Altamirano Morales

Да!!. Ты прав, это настоящее дерьмо. Я делаю это только ради денег. Я работаю всего полдня, зарплата хорошая, а компания находится в 10 минутах езды от дома.
Я буду следить за другими проектами и при первой же возможности уволюсь.
Единственное, что интересно, если я смогу управлять этим в совершенстве, я уверен, что смогу заработать больше денег, и работа может быть долгосрочной, даже, возможно, заменить эту систему. Это действительно стоит моих 67 лет.

Приветствую !!