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

我有一个电子表格与列出的访问查询名称。 我想通过Excel VBA在Access中运行这些查询,但不想打开一个新的Access实例,我想要处理已经打开的实例(和数据库)。 我现在的代码只用于创build新的实例:

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 

我将不胜感激任何build议。

实际上,你正在使用MS Access的GUI端而不是它的底层数据库引擎。 考虑通过ADO的路由,其中​​涉及到不打开.accdb数据库来屏幕。 实际上,您甚至不需要将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(我看到的是您的configuration文件标签之一)中,您可以遍历csv(以该格式保存工作表)并在数据库中运行命名查询。

 import csv import pyodbc database = r'C:\Path\To\Database\File.accdb' constr = "Driver={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ={0};".format(database) db = pyodbc.connect(constr) cur = db.cursor() with open(r'C:\Path\To\Query\Names.csv', 'r') as f: r = csv.reader(f) for line in r: cur.execute(line[0]) db.commit() cur.close() db.close()