是非お力をお貸し下さい。
よろしくお願いします。
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内の文字が
点滅します。
実現したいのは「使用者が動いていることを(ハングアップしていない
ことを)確認出来る」という点です。
どうぞ よろしくお願いします。
No.3
- 回答日時:
残念ですがVBAはマルチスレッドは処理できません。
私は必要に迫られて、機械語をバイト配列に詰め込み、
CreateThreadでこの機械語に別スレッドで処理させる
という手段をしばしば使いますが、Windowsのアーキ
テクチャ、機械語、マルチスレッドの同期などの知識が
ないと成功しません。
実現手段として思いつくのは新たなウィンドウを別の
スレッドで作成して点滅させるものです。
但し、Hellow World をCだけで作る技量がなければ
実現はできません。
ネットを探すと、都合のよいコントロールがあるかも
知れませんが、ウィルス感染の危険もあるので、簡単に
手を出すのも考え物です。
#1の方の提案にもありましたように、別プロセスなら
処理できますので、HTA等で点滅ウィンドウを表示させ、
用が済んだらプロセスを終了させるという方法もあると
思います。こちらはAPIだけで制御できます。
CreateProcessで起動、TerminateProcessで終了です。
また、APIでなくWSHのRunメソッドでも起動できます。
ただ、こちらは終了させる方法がありませんが・・・
もっとも、別プロセスなので処理の終了前に利用者が
勝手に閉じてしまうこともあります。
nda23さま
回答ありがとうございます。
色々な方法をご紹介頂いてありがとうございます。
VBAでマルチスレッドが出来ないことが確認出来て
良かったです。
私はCの知識が無いため今回はnac03056さまに
提案頂いたHTML(HTA)の方法で行こうと思います。
どうもありがとうございました。
No.1
- 回答日時:
mainの中でDoEventsを多用してApplication.Ontimeを動作させることはできますが、Excel2010でやってみたところ、単純なカウンターの場合に速度が20倍くらい遅くなりました。
2003版では数倍程度で収まるかもしれませんが、長い処理がさらに何倍も長くなるのは得策ではないと思います。 単にuserformをmodalで使えないようにして「動作中」などの表示をさせておくとか、使用中の札を置いておくとかするのがいいかと思います。
DreamyCatさま
回答ありがとうございます。
そうですね、これ以上処理が長くなるのはちょっとつらいです。
ステータスバーを使って進捗表示させることも考えましたが
時間がかかる処理の主の原因はVBAから呼び出すVBScript
でして、結局ステータスバーが動かず、「動いてるかどうか
分からない」状態になってしまいます。
モーダルにして使用者が操作できなくするというのもありかと
思いますが、出来ることならチカチカさせたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
エクセル マクロの同時実行について
Visual Basic(VBA)
-
vba セルに入力した時間をマクロで受け取るには?
Excel(エクセル)
-
ExcelVBAで、タイマー割り込みって使える?
Excel(エクセル)
-
-
4
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
5
エクセルVBAで2つのマクロを同時に動かす
Excel(エクセル)
-
6
【VBAユーザーフォームで閉じるボタンを表示したくない】
Visual Basic(VBA)
-
7
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
8
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
9
Excel マクロ:変数を複数使う場合
Excel(エクセル)
-
10
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
11
excel2013でマクロを複数独立して実行する
Excel(エクセル)
-
12
vba 時間の引き算 例えば 15:00から16:15の間の時間は1時間15分ですが、vbaのコード
Visual Basic(VBA)
-
13
VBで構造体の配列を関数に渡す方法?
Visual Basic(VBA)
-
14
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
15
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
16
1つのVBAコードをすべてのコアを使って実行させたい
PowerPoint(パワーポイント)
-
17
Excelのセルの色指定をVBAから配列を用いて効率的に行う方法はあり
Visual Basic(VBA)
-
18
EXCEL VBAのユーザーフォームに引数を渡す方法について
Excel(エクセル)
-
19
VBA EXCEL 開かずにデータ操作
その他(Microsoft Office)
-
20
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
DoEventsがやはり分からない
-
UMLでの例外処理
-
【Excel】特定の文字を含むセル...
-
メルカリのメルカードで買い物...
-
VB.NET Excelを読み込んでDataT...
-
C# 二次元配列 ドット絵の表示...
-
findは動くがfindnextがマクロ...
-
Loadイベント中にほかのイベン...
-
EXCEL VBA マクロ 実行する度に...
-
switch の範囲指定
-
月度は何て読みますか?
-
処理の実行中にOutLookがまとも...
-
ボタンクリックイベント 重複...
-
変数が""(空文字)かどうか判別...
-
NULLを含むフィールド値の条件分岐
-
C言語:数値の桁数指定について...
-
性欲はあるのですが、性的願望...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
DoEventsがやはり分からない
-
switch の範囲指定
-
メルカリのメルカードで買い物...
-
【Excel】特定の文字を含むセル...
-
VBの質問#if 0 then ってどう...
-
VBAでCOPYを繰り返すと、処理が...
-
EXCEL VBA マクロ 実行する度に...
-
findは動くがfindnextがマクロ...
-
インタラクティブの反対語は?
-
UMLでの例外処理
-
リョウ・・・量?料?
-
Do~Loopした回数をカウントしたい
-
セックスレスの既婚女性は自慰...
-
月度は何て読みますか?
-
セルの値が0はクリアするマクロ
-
Loadイベント中にほかのイベン...
-
FFTの結果ついて
おすすめ情報