Вопросы | ms-access

Периодическая ошибка при попытке управления другой базой данных в VBA

Вопрос

GUI Junkie | 9801 просмотров | рейтинг: 1

У меня есть следующий код:

 Dim obj As New Access.Application
obj.OpenCurrentDatabase (CurrentProject.Path & "/Working.mdb")
obj.Run "Routine"
obj.CloseCurrentDatabase
Set obj = Nothing
 
Проблема, которую я экспериментирую, - это всплывающее окно, которое говорит мне, что Access не может установить фокус на другую базу данных. Как вы можете видеть из кода, я хочу запустить подпрограмму в другом mdb. Любой другой способ достижения этого будет оценен. Я работаю с MS Access 2003. Это временная ошибка. Поскольку это производственный код, который будет запускаться только один раз в месяц, его очень сложно воспроизвести, и я не могу дать вам точный текст и номер на данный момент. Это второй месяц, это случилось. Я подозреваю, что это может произойти, когда кто-то работает с этой или другой базой данных. Поток данных должен обновлять все «проекты» один раз в месяц в одной базе данных, а затем делать эту информацию доступной в другой базе данных. Может быть, это из-за первой строки в коде Routines:    Если vbNo = MsgBox (Хотите обновить ?, vbYesNo, Обновить) Тогда        Функция выхода    End If Я сделаю еще одну подпрограмму без MsgBox. Я был в состоянии воспроизвести это поведение. Это происходит, когда фокус должен сместиться на вызываемую базу данных, но пользователь устанавливает фокус ([ALT] + [TAB]) на первую базу данных. «Решением» было обучение пользователя. Это временная ошибка. Поскольку это производственный код, который будет запускаться только один раз в месяц, его очень сложно воспроизвести, и я не могу дать вам точный текст и номер на данный момент. Это второй месяц, это случилось. Я подозреваю, что это может произойти, когда кто-то работает с этой или другой базой данных. Поток данных должен обновлять все «проекты» один раз в месяц в одной базе данных, а затем делать эту информацию доступной в другой базе данных. Может быть, это из-за первой строки в коде Routines:     Если vbNo = MsgBox (Хотите обновить ?, vbYesNo, Обновить) Тогда         Функция выхода     End If Я сделаю еще одну подпрограмму без MsgBox. Я пробовал это в нашей базе данных разработки, и это работает. Это ничего не значит, так как другой код также отлично работает в разработке.

Комментарии:

Chris OC

Я никогда не видел, чтобы Access выдавал это сообщение об ошибке. Я видел, что у вас нет разрешения на открытие базы данных, и Access не может установить фокус на объекте, но не на сообщении об ошибке, которое вы указали. Не могли бы вы опубликовать номер ошибки и точное сообщение об ошибке? Я подозреваю, что, как и Реми, ошибка в коде вашей подпрограммы в другом БД, так что вам, вероятно, придется опубликовать это тоже.




Ответы

Curtis Inderwiesche

+ 1 -
Если вам нужен другой способ запуска функции, попробуйте следующее:
 Dim obj As New Access.Application
obj.OpenCurrentDatabase (CurrentProject.Path & "/Working.mdb")

obj.DoCmd.RunMacro "MyMacro"
obj.CloseCurrentDatabase
Set obj = Nothing
 

Где «MyMacro» имеет действие «RunCode» с именем функции, которое вы бы предпочли выполнить в Working.mdb  


GUI Junkie

+ 1 -
Я смог воспроизвести ошибку в «разработке». Это действие невозможно выполнить, так как другое приложение занято. Выберите «Переключить на», чтобы активировать .... Я действительно не вижу остальной части сообщения, поскольку оно мигает очень быстро. Я предполагаю, что эта ошибка связана с «переключением» между двумя базами данных. Я надеюсь, что, обучая пользователя, это остановится. Филипп, твой ответ, конечно, правильный. Я бы выбрал этот путь, если бы не разработал «рутину» заранее. Я был в состоянии воспроизвести это поведение. Это происходит, когда фокус должен сместиться на вызываемую базу данных, но пользователь устанавливает фокус ([ALT] + [TAB]) на первую базу данных. «Решением» было обучение пользователя. Поскольку невозможно запретить пользователю переключать приложения в Windows, я хотел бы закрыть тему.


Теги

ms-access | access-vba