SHOJI's Code
仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++,JavaScript等)、その他雑記。
アクセスアップ・SEO対策・検索エンジン登録
2008.06<<12345678910111213141516171819202122232425262728293031>>2008.08
スレッドの実験 (EXCEL VBA)
エクセル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のところを
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使用
小生もExcel VBAでは苦労をしています
Threadの制御には泣かされました
必要でしたらSampleを提供します
Addressがわかれば、Mailでお送りします
2006/08/17(木) 15:11:17 | URL | 江川明人 #-[ 編集]
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
2007/03/13(火) 19:49:07 | | #[ 編集]
結局、未だスレッドの生成には成功していないのですよ・・・(-.-;
2007/07/08(日) 19:39:59 | URL | SHOJI #-[ 編集]
コメントを投稿する

管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
無料ホームページ アフィリエイト レンタルサーバー FC2ブログ 一戸建て