我有一个 Access 数据库,用于计算大量人员一周中每一天的绩效分数。
由于数据集的大小,该过程运行得相当慢。作为加快速度的一种潜在方法,我正在考虑一个过程,该过程将有 5 个独立的数据库,每个数据库计算一天的分数。
我编写了下面的 VBA 代码,它只打开所有这些数据库(一旦每个数据库打开,它都有自己的 autoExec 宏,将启动它自己的过程)。
Sub DBloop()
Dim dbArr As Variant
Dim i As Integer
dbArr = Array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday")
For i = 0 To UBound(dbArr)
openDBs CStr(dbArr(i))
Next
End Sub
Sub openDBs(dbname As String)
Dim acc As Access.Application
Dim DBpath As String
Dim strDbName As String
DBpath = "H:\Performance Test\"
strDbName = DBpath & dbname & ".accdb"
Set acc = New Access.Application
acc.Visible = True
acc.OpenCurrentDatabase strDbName, False
End Sub
不幸的是,当每个数据库打开时,初始过程都在等待该数据库的 autoExec 宏完成,然后再打开下一个数据库。有谁知道是否有解决方法?
最佳答案
有很多方法可以确保您不会同步打开数据库。
下面是最简单的一个:
Application.FollowHyperlink strDbName
(无需创建新的 Access 应用程序对象)。
另一种方法是让 AutoExec 宏中的代码异步执行。我为此使用的技术如下:
- 创建隐藏表单
- 将它的计时器设置为 1
- 执行代码,并在计时器上关闭窗体
其他方法包括使用 Shell
或 WScript.Shell
对象。
关于database - 使用 VBA 并行打开数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47658844/