it's a problem about multithread in vba:
------------------begin macro-----------------------
'btnconfirm is a button on the user interface
Private Sub btnConfirm_Click()
'run the process of analyzing in a new thread
Dim tId As Long, hThread As Long
hThread = CreateThreadL(0, 0, AddressOf DurativeFunc, 0, 0, tId)
End Sub
'the following is parts of module1
Declare Function CreateThreadL Lib "kernel32" Alias "CreateThread" _
(ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress
As Long, _
ByVal lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadId As Long) As
Long
Function DurativeFunc(ByVal lpvThreadParm As Long) As Long
Dim dwResult As Long
dwResult = 0
'problem:
'the following process(in fact it's a timeconsuming process,here just simplified)
work well in a non-multithread function
'but here(as a multithread function) it only modify the content of cells(1,3)
'why???
For i = 1 To 10
ActiveSheet.Cells(i, 3) = i
Next
DurativeFunc = dwResult
End Function
------------------------end macro---------------------
i just want to update the user interface(informing user of what's going on),when a
time-consuming process is running.
anyway if anyone gets time to help i would be very happy.
any other method to solve the problem is appreciated.
|