Открытие базы данных MS-Access из командной строки без запуска кода запуска VBA?
Есть ли способ открыть базу данных MS-Access 2003 из командной строки, не запуская код запуска vba и не отображая ошибки?
Я посмотрел на аргументы командной строки для MS Access, и, похоже, нет ни одного, который бы указывал, что вы хотите, чтобы ни один из кодов vba не выполнялся при запуске.
Я использую следующий код, чтобы открыть базу данных в отдельной базе данных VBA:
Sub test()
Dim accObj As Access.application, Msg As String
Dim application As String, dbs As String, workgroup As String
Dim user As String, password As String, cTries As Integer
Dim x
Dim theDB As Database
' This is the default location of Access
application = "C:\Program Files (x86)\Microsoft Office\OFFICE11\MSACCESS.EXE"
' Use the path and name of a secured MDB on your system
dbs = "C:\ucpdatas\awashic-pc\APLReporting.mdb"
' This is the default working group
workgroup = "E:\Tickets\CSN_NotSure\Secured.mdw"
user = "aleer"
password = "****"
Debug.Print application & " " & Chr(34) & dbs & Chr(34) & " /nostartup /user " & user & " /pwd " & password & " /wrkgrp " & Chr(34) & workgroup & Chr(34), vbMinimizedFocus
x = Shell(application & " " & Chr(34) & dbs & Chr(34) & " /nostartup /user " & user & " /pwd " & password & " /wrkgrp " & Chr(34) & workgroup & Chr(34), vbMinimizedFocus)
On Error GoTo WAITFORACCESS
Set accObj = GetObject(, "Access.Application")
' Turn off error handling
On Error GoTo 0
' You an now use the accObj reference to automate Access
Debug.Print "Access is now open."
' Do Stuff...
accObj.CloseCurrentDatabase
accObj.Quit
' Close it out...
Set accObj = Nothing
Debug.Print "Closed and complete."
Exit Sub
WAITFORACCESS: ' <--- this line must be left-aligned.
' Access isn't registered in the Running Object Table yet, so call
' SetFocus to take focus from Access, wait half a second, and try again.
' If you try five times and fail, then something has probably gone wrong,
' so warn the user and exit.
'SetFocus
If cTries < 5 Then
cTries = cTries + 1
Sleep 500 ' wait 1/2 seconds
Resume
Else
Debug.Print "It didn't work"
End If
End Sub
Эта строка... x = Shell(application & " " & Chr(34) & dbs & Chr(34) & " /nostartup /user " & user & " /pwd " & password & " /wrkgrp " & Chr(34) & workgroup & Chr(34), vbMinimizedFocus)
Оказывается... C:\Program Files (x86)\Microsoft Office\OFFICE11\MSACCESS.EXE "C:\ucpdatas\awashic-pc\APLReporting.mdb" /nostartup /user aleer /pwd *** /wrkgrp "E:\Tickets\CSN_NotSure\Secured.mdw" 2
... в командной строке.
Но когда база данных открывается, она выполняет несколько кодов VBA и отображает сообщения об ошибках.
2 ответа
Access нельзя открыть без запуска макроса AutoExec, связанного с этой базой данных. Единственное решение состоит в том, чтобы AutoExec содержал условные аргументы, определяющие, как была открыта база данных, и не выполнял команды, если база данных была оболочкой. Это потребует редактирования каждой базы данных, чтобы включить эту логику.
Технически, да, есть способ открыть базу данных MS-Access 2003 из командной строки без запуска каких-либо макросов запуска, хотя он не включает аргументы командной строки: если вы удерживаете клавишу Shift при открытии базы данных, она не будет запускать скрипт AutoExec (и подавляет несколько других вещей). Это также предполагает, что для свойства AllowBypassKey не установлено значение False.