在已打开的Access实例上通过Excel VBA运行Access查询

在已打开的Access实例上通过Excel VBA运行Access查询,vba,excel,ms-access,Vba,Excel,Ms Access,我有一个列出Access查询名称的电子表格。我想通过Excel VBA在Access中运行这些查询,但我不想打开Access的新实例,而是想处理已经打开的实例(和数据库)。 我当前拥有的代码仅用于创建新实例: Sub RunQueries() Dim appAccess As Object Set appAccess = CreateObject("Access.Application") appAccess.Visible = True appAccess.OpenCurrentDataba

我有一个列出Access查询名称的电子表格。我想通过Excel VBA在Access中运行这些查询,但我不想打开Access的新实例,而是想处理已经打开的实例(和数据库)。 我当前拥有的代码仅用于创建新实例:

Sub RunQueries()

Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")
appAccess.Visible = True
appAccess.OpenCurrentDatabase "D:\Access\tysql.accdb", False

Dim QueryName As String

For i = 2 To Queries.Count + 1
    QueryName = Cells(i, 1).Value
    appAccess.DoCmd.OpenQuery QueryName
Next i

End Sub

如果您有任何建议,我将不胜感激。

实际上,您使用的是MS Access的GUI端,而不是其底层数据库引擎。通过ADO来考虑这个路由,包括打开.ACDB数据库到屏幕。事实上,您甚至不需要将MSAccess.exe GUI安装为MS Office程序

Dim conn As Object

Set conn = CreateObject("ADODB.Connection")

conn.Open "DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=C:\Path\To\Database\File.accdb;"

Dim QueryName As String

For i = 2 To Queries.Count + 1
    QueryName = Cells(i, 1).Value
    conn.Execute QueryName
Next i

Set conn = Nothing
将Access用作数据库引擎的好处在于,它可以移植到其他语言,如任何RDBMS,而不仅仅是Excel VBA。例如,在Python中(我看到的是您的配置文件标记之一),您可以迭代csv(以该格式保存工作表)并在数据库中运行命名查询

导入csv
导入pyodbc
database=r'C:\Path\To\database\File.accdb'
constr=“Driver={{Microsoft Access驱动程序(*.mdb,*.accdb)}};DBQ={0};”。格式(数据库)
db=pyodbc.connect(constr)
cur=db.cursor()
将open(r'C:\Path\To\Query\Names.csv,'r')作为f:
r=csv.reader(f)
对于r中的行:
当前执行(第[0]行)
db.commit()
当前关闭()
db.close()

你不能用
GetObject(,“Access.Application”)
而不是
CreateObject(“Access.Application”)
吗?如果在使用了
GetObject之后,appAccess什么都不是,你仍然可以使用CreateObject。请参阅:靠近解决方案1(并替换为“Access.Application”foe“Excel.Application”),谢谢大家,GetObject正是我所需要的。