我编写了多线程函数,可以创建主Access数据库文件的多个副本。然后每个副本运行一个指定的循环函数“RunForVBA”。循环迭代的总数除以访问副本的数量,每个副本运行总循环计数的一部分。这非常有效,但我试图整理一个进度条窗体,跟踪所有线程的总进度。每个副本都会更新每个循环迭代的主进度条形式。
我试图在主数据库中使用TempVar来记录总计数器并将进度条引用到此tempvar。这种工作但是每个实例中的每个循环都没有更新tempvar。我不知道为什么它只是部分起作用。
代码如下
Dim para As clsMultiThread
Dim lloop As Long
lloop = 600
Debug.Print "lets go!!"
Set para = New clsMultiThread
DoCmd.OpenForm "ProgressBar"
Call Forms("ProgressBar").SetProgressBarParameters("Testing ProgressBar Again", "Message: It kind of works!!", lloop)
Call para.SetThreads(12)
Call para.MultiThreadLoop("RunForVBA", 1, lloop)
Debug.Print TempVars("ProgressBarCounter").value
DoCmd.Close ObjectType:=acForm, ObjectName:="ProgressBar"
多线程函数运行“RunForVBA”
代码如下:
Sub RunForVBA(seqFrom As Long, seqTo As Long)
Dim lTimer As Long
Dim i, iInc As Integer
Dim x As Double
Dim appAccess As Access.Application
Dim tvProgBarCtr As TempVar
Set appAccess = New Access.Application
Set appAccess = GetObject(, "Access.Application")
Set tvProgBarCtr = appAccess.TempVars("ProgressBarCounter")
lTimer = GetTickCount
For i = seqFrom To seqTo
tvProgBarCtr.value = tvProgBarCtr.value + 1
DoEvents
Sleep (400)
Next i
Set appAccess = Nothing
End Sub
我试过改变睡眠时间,改变线程数等等。是否可以执行{GetObject(,“Access.Application”)}的最大数量?
我不确定为什么它部分有效,而不是完全或根本没有。通过上述功能,TempVar通常可以在250到300之间完成任何操作,而不是总循环次数为600.