我尝试使用VB脚本在Access VBA中设置多线程。这些例程基于Tomasz Kacprowicz的Excel例程。
这些方法创建主数据库文件的单独副本,该副本也包含VBA函数。然后,脚本文件将打开每个副本并在每个副本中运行相同的功能。 Access数据库的所有副本都运行相同功能的副本。这工作正常,直到函数尝试打开公共数据库。
第一个副本打开标准数据库,但无意中锁定了公共数据库,使其无法被其他Access副本打开。它抛出错误3260.
VB脚本是: { 设置objAccess = CreateObject(" Access.Application")
With objAccess
.OpenCurrentDatabase("C:\Personnal\investment\7055_1.accdb")
.Run "RunForVBA", 1, 501
End With
Set objAccess = Nothing
Set objAccess = GetObject(, "Access.Application")
objAccess.TempVars.Item ("S7055_1") = 1
Do Until objAccess.TempVars.Item ("S7055_1")
If Err.Number <> 0 Then Exit Do
WScript.Shell.Sleep(100)
objAccess.TempVars.Item ("S7055_1") = 1
Loop
Set objAccess = Nothing
&#34; RunForVBA&#34;是VBA功能,在每个访问副本中都是相同的。 &#34; 7055_1.accdb&#34;是复制的数据库之一。
我已检查默认开启和默认锁定模式。我还试图强制打开模式在Opendatabase和OpenCurrentDatabase方法中共享。它似乎没有任何区别。
以下代码位于函数&#34; RunForVBA&#34;:
中Set DBFunc = New clsDBFunctions
Set objAccess = CreateObject("Access.Application")
With DBFunc
.TableName = "TestTable"
.DataBaseName = .GetLinkedDBName(.TableName) 'full DB path
If .DataBaseName <> vbNullString Then 'will return 0 if no table
Set .db = Nothing 'clear preset DB in clsDBFunctions
Set .db = OpenDatabase(.DataBaseName, False, False)
End If
任何帮助都将不胜感激。