2014-10-29 5 views
0

У меня есть общедоступный файл доступа ms - Frontend.accdb, для которого все таблицы привязаны к другой защищенной базе данных доступа ms, называемой Data.accdb. Задача импорта определяется в data.accdb, который приносит данные в data.accdb, который будет обновлен до Frontend.accdb при открытии.Как запустить макрос, определенный в базе данных MS Access из другого MS Access?

Я хочу добавить это задание на импорт в мое frontend.accdb, так что, нажав кнопку в frontend.accdb, data.accdb будет обновлен, а таблицы внутри Frontend.accdb будут заполнены новыми данными.

+0

Если таблицы связаны с задним концом, данные живут практически мгновенно. Вам не нужно спорить с обновлением ссылок. – PaulFrancis

+0

paul, Требование здесь другое. У меня есть макрос, включенный в data.accdb, который импортирует различные CSV-файлы в эту базу данных. Таблицы frontend.accdb связаны с таблицами в этих data.accdb. Конечные пользователи используют интерфейс front.accdb. Вместо того, чтобы разработчики собирались и обновляли data.accdb вручную, я хочу, чтобы пользователи получили возможность обновить (запустить макрос в data.accdb) data.accdb через кнопку в frontend.accdb. так что они получают таблицы с последними данными. Надеюсь, я поняла! –

+1

Возможно «DoCmd.TransferDatabase acImport», «Microsoft Access», «Data.accdb», acMacro, ... ', а затем' DoCmd.RunMacro ... '? –

ответ

0

Если внешние интерфейсы связаны в интерфейсе, вы должны переместить макросы в базу данных front-end для работы с связанными таблицами.

Вы можете использовать команду оболочки, как описано здесь

How to programatically call a macro in a different (ie. external) Access database using VBA?

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

0

Вы можете открыть базу данных базы данных из интерфейса и запустить макрос, используя объект «Приложение».

Dim appAccess As New Access.Application 

'Opening backend database 
appAccess.Visible = False 'This can only be here once everyone has trusted the 
appAccess.OpenCurrentDatabase "PathtoBackend" & "\data.accdb" 

'Time acknowledge the Trust popups if they haven't trusted the db 
Do 
    Sleep 1000 'Assumes you have the Win API Sleep command available. 
    DoEvents 
Loop While Not appAccess.CurrentProject.IsTrusted 

appAccess.Run "Import Data Macro Name" 
appAccess.CloseCurrentDatabase 
appAccess.Quit 

ИЛИ

переместить все обновление таблицы макросы к переднему концу, и передать данные от источника к фронтэнду, к связанным таблицам в интерфейсе с использованием TransferDatabase.

'Bunch of code that builds the DAO or ADO objects from the source data  
Docmd.TransferDatabase acLink, , "PathToBackend" & "\data.accdb", acTable, "FrontEndTableNameContainingSourceData", "BackendTableNameDestination", ,)