dポイントプレゼントキャンペーン実施中!

是非お力をお貸し下さい。
よろしくお願いします。
Windows XP
Excel2003 (VB6.0)

メイン処理が非常に時間がかかるため、フォームを表示させ
文字(Label)を点滅させて「動いている(ハングアップしていない)」ことを
使用者に伝えようとしています。

--- Form1内のコード(メイン) ---
Sub Main()

Form2.Show vbModeless

[ ~メイン処理~ ]

End Sub

--- Form2内のコード ---
Sub UserForm_Initialize()

Call Blink

End Sub

--- 標準モジュール内のコード ---
Sub Blink()

If Form2.Label1.Visible = True Then
Form2.Label1.Visible = False
Else
Form2.Label1.Visible = True
End If

Form2.Repaint

DoEvents

Application.OnTime Now + TimeValue("00:00:01"), "Blink"

End Sub


これを実行すると、メイン処理が終了した後にForm2内の文字が
点滅します。

実現したいのは「使用者が動いていることを(ハングアップしていない
ことを)確認出来る」という点です。

どうぞ よろしくお願いします。

A 回答 (3件)

単純に、HTMLファイルを表示するとかいうのではだめでしょうか?VBAに影響を与えることなくブラウザ側が勝手にやってくれるので、負荷は少ないように思うのですが。


的を外した回答でしたらすみません。
    • good
    • 1
この回答へのお礼

nac03056さま
回答ありがとうございます。

HTMLとは思いつきませんでした。
早速やってみます。

お礼日時:2012/02/15 20:11

残念ですがVBAはマルチスレッドは処理できません。


私は必要に迫られて、機械語をバイト配列に詰め込み、
CreateThreadでこの機械語に別スレッドで処理させる
という手段をしばしば使いますが、Windowsのアーキ
テクチャ、機械語、マルチスレッドの同期などの知識が
ないと成功しません。
実現手段として思いつくのは新たなウィンドウを別の
スレッドで作成して点滅させるものです。
但し、Hellow World をCだけで作る技量がなければ
実現はできません。
ネットを探すと、都合のよいコントロールがあるかも
知れませんが、ウィルス感染の危険もあるので、簡単に
手を出すのも考え物です。
#1の方の提案にもありましたように、別プロセスなら
処理できますので、HTA等で点滅ウィンドウを表示させ、
用が済んだらプロセスを終了させるという方法もあると
思います。こちらはAPIだけで制御できます。
CreateProcessで起動、TerminateProcessで終了です。
また、APIでなくWSHのRunメソッドでも起動できます。
ただ、こちらは終了させる方法がありませんが・・・
もっとも、別プロセスなので処理の終了前に利用者が
勝手に閉じてしまうこともあります。
    • good
    • 2
この回答へのお礼

nda23さま
回答ありがとうございます。

色々な方法をご紹介頂いてありがとうございます。

VBAでマルチスレッドが出来ないことが確認出来て
良かったです。

私はCの知識が無いため今回はnac03056さまに
提案頂いたHTML(HTA)の方法で行こうと思います。

どうもありがとうございました。

お礼日時:2012/02/15 20:32

mainの中でDoEventsを多用してApplication.Ontimeを動作させることはできますが、Excel2010でやってみたところ、単純なカウンターの場合に速度が20倍くらい遅くなりました。


2003版では数倍程度で収まるかもしれませんが、長い処理がさらに何倍も長くなるのは得策ではないと思います。  単にuserformをmodalで使えないようにして「動作中」などの表示をさせておくとか、使用中の札を置いておくとかするのがいいかと思います。
    • good
    • 0
この回答へのお礼

DreamyCatさま
回答ありがとうございます。

そうですね、これ以上処理が長くなるのはちょっとつらいです。

ステータスバーを使って進捗表示させることも考えましたが
時間がかかる処理の主の原因はVBAから呼び出すVBScript
でして、結局ステータスバーが動かず、「動いてるかどうか
分からない」状態になってしまいます。

モーダルにして使用者が操作できなくするというのもありかと
思いますが、出来ることならチカチカさせたいです。

お礼日時:2012/02/15 15:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A