エクセルのVBAでスレッドが使えたらちょっと便利かも、と思いちょっと実験してみた。
まず、下のようなコードをちょっと走らせてみた。
これが、走らないのだ。スレッド内の最初の一行を表示したところで固まってしまった。
まず、下のようなコードをちょっと走らせてみた。
Declare Function CreateThread Lib "KERNEL32" _
(ByVal lpThreadAttributes As Any, _
ByVal dwStackSize As Long, _
ByVal lpStartAddress As Long, _
ByVal lpParameter As Long, _
ByVal dwCreationFlags As Long, _
ByRef lpThreadId As Long) As Long
Declare Function CloseHandle Lib "KERNEL32" _
(ByVal hObject As Long) As Long
Declare Function WaitForSingleObject Lib "KERNEL32" _
(ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long
Declare Sub Sleep Lib "KERNEL32" _
(ByVal dwMilliseconds As Long)
Dim hThread As Long
Dim idThread As Long
Sub test()
Dim i As Long
For i = 1 To 10
hThread = CreateThread(0&, 0&, AddressOf ThreadProc, i, 0&, idThread)
Debug.Print "Handle=" & hThread, "Id=" & idThread
n = WaitForSingleObject(hThread, -1)
Debug.Print n
CloseHandle hThread
Next i
End Sub
Function ThreadProc(ByVal n As Long) As Long
For i = 1 To 10
Debug.Print Now() & " THREAD" & n & ":" & i
Next i
ThreadProc = 0
End Function
これが、走らないのだ。スレッド内の最初の一行を表示したところで固まってしまった。
で、WaitForSingleObjectのところを
としたところ、とりあえず動いた。
ところが、スレッド関数内のDebug.printの部分をを以下のようにセルへの書き込みに変えたところ、セルには2までしか書き込まれず、停止。
うーん、セルに書き込めないんじゃ、使えないなー。
とりあえず、この辺りで断念。また時間があったら再挑戦するかも。
n = WaitForSingleObject(hThread, 10)
While n = 258
DoEvents
n = WaitForSingleObject(hThread, 10)
Wend
としたところ、とりあえず動いた。
ところが、スレッド関数内のDebug.printの部分をを以下のようにセルへの書き込みに変えたところ、セルには2までしか書き込まれず、停止。
Sheet1.Range("A" & n).Value = i
うーん、セルに書き込めないんじゃ、使えないなー。
とりあえず、この辺りで断念。また時間があったら再挑戦するかも。
テーマ:EXCEL - ジャンル:コンピュータ
|
この記事へのコメント
小生もExcel VBAでは苦労をしています
Threadの制御には泣かされました
必要でしたらSampleを提供します
Addressがわかれば、Mailでお送りします
Threadの制御には泣かされました
必要でしたらSampleを提供します
Addressがわかれば、Mailでお送りします
このコメントは管理人のみ閲覧できます
2007/03/13(火) 19:49:07 | | #[ 編集]
結局、未だスレッドの生成には成功していないのですよ・・・(-.-;
| ホーム |
SHOJI's Code



