Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10267 / 13644 ツリー ←次へ | 前へ→

【22677】処理を行っている間メッセージボックスを... kuppa 05/2/27(日) 23:24 質問[未読]
【22679】Re:処理を行っている間メッセージボックス... ちゃっぴ 05/2/28(月) 0:14 回答[未読]
【22680】Re:処理を行っている間メッセージボックス... ponpon 05/2/28(月) 0:44 発言[未読]
【22729】Re:処理を行っている間メッセージボックス... kazu 05/3/1(火) 13:15 発言[未読]
【22761】Re:処理を行っている間メッセージボックス... kuppa 05/3/2(水) 15:01 質問[未読]
【22764】Re:処理を行っている間メッセージボックス... Jaka 05/3/2(水) 15:55 発言[未読]
【22773】Re:処理を行っている間メッセージボックス... YN61 05/3/2(水) 22:06 質問[未読]
【22780】Re:処理を行っている間メッセージボックス... Jaka 05/3/3(木) 9:41 発言[未読]
【22805】Re:処理を行っている間メッセージボックス... YN61 05/3/3(木) 20:42 お礼[未読]

【22677】処理を行っている間メッセージボックスを...
質問  kuppa  - 05/2/27(日) 23:24 -

引用なし
パスワード
   こんばんは。

VBAで処理中、現在何件目を処理しているかを表示させるため、
処理中は常にメッセージボックスのようなものを出力しておき、
処理件数を出力させることは可能でしょうか?

メッセージボックスの「OK」ボタンを押さなくても、処理件数が
リアルタイムで表示されるものを想定しているのですが。。。

よろしくおねがいいたします。

【22679】Re:処理を行っている間メッセージボック...
回答  ちゃっぴ  - 05/2/28(月) 0:14 -

引用なし
パスワード
   >VBAで処理中、現在何件目を処理しているかを表示させるため、
>処理中は常にメッセージボックスのようなものを出力しておき、
>処理件数を出力させることは可能でしょうか?

MsgBox は Modal なので、使えないでしょう。
変わりに Modeless な UserForm 作ってやって、
そいつに表示させてやるという方法が定番ですね。

【22680】Re:処理を行っている間メッセージボック...
発言  ponpon  - 05/2/28(月) 0:44 -

引用なし
パスワード
   ▼kuppa さん:
>こんばんは。
ponponです。こんばんは。
>VBAで処理中、現在何件目を処理しているかを表示させるため、
>処理中は常にメッセージボックスのようなものを出力しておき、
>処理件数を出力させることは可能でしょうか?
ちゃっぴさんが言っているようにMsgBoxは、OKをおすまでVBAの処理が止まるので無理です。
 たとえば、こんな風なことかな。
ユーザーフォームにラベルを一つとコマンドボタンを一つ用意して、
ユーザーホームモジュールに
Private Sub CommandButton1_Click()
 Dim i As Long
 
 For i = 1 To 10
  Worksheets("sheet1").Cells(i, 1).Value = i
  Me.Label1.Caption = i & "件目の処理をしています。"
  Application.Wait (Now + TimeValue("00:00:01"))
   '↑これは、処理が早すぎるためです。
Next
 Me.Label1.Caption = "処理が終わりました。"
End Sub

【22729】Re:処理を行っている間メッセージボック...
発言  kazu  - 05/3/1(火) 13:15 -

引用なし
パスワード
   kuppa さん

個人的にはステータスバーに表示させるのも一つの手だと思いますよ。
画面上に出てくるとうっとおしく感じる事もありますし。

【22761】Re:処理を行っている間メッセージボック...
質問  kuppa  - 05/3/2(水) 15:01 -

引用なし
パスワード
   みなさん、ご回答いただきありがとうございます。
色々な案が出てきて、大変勉強になります。

 ところで、以下のようにステータスバーに表示させるには
どのようにすればよいのでしょうか?質問ばかりですみません
がよろしくお願いいたします。


▼kazu さん:
>kuppa さん
>
>個人的にはステータスバーに表示させるのも一つの手だと思いますよ。
>画面上に出てくるとうっとおしく感じる事もありますし。

【22764】Re:処理を行っている間メッセージボック...
発言  Jaka  - 05/3/2(水) 15:55 -

引用なし
パスワード
   こんにちは。

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=9957;id=excel

他、「ステータスバー」で検索してみてね。

【22773】Re:処理を行っている間メッセージボック...
質問  YN61  - 05/3/2(水) 22:06 -

引用なし
パスワード
   kuppa 様

誠に失礼します。貴殿の質問を見させていただき、勉強になりました。
この「投稿」を少し使わせていただきたく失礼かと思いますがお許しいただけませんでしょうか。

▼Jaka さん:
こんにちは。
ご指摘の
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=9957;id=excel
で、「ステータスバー」で検索しさせていただきました。

少し分からないことがあるのですが、解説いただけませんでしょうか。

4番目に書かれているコードですが
4、
3のように毎回ワードアートを作るのは嫌な場合、初めに作っておいて名前を「実行表示」とでも付けておき、それを表示させたり隠したりする方法。

ActiveSheet.Shapes("実行表示").Visible = True
DoEvents
DoEvents   '← 私のPCは、トロイので2個必要でした。
'やりたいマクロをここに書く
Application.Wait Now + TimeValue("00:00:03")
ActiveSheet.Shapes("実行表示").Visible = False

このコードを見させていただき、「実行表示」と言う言葉は何処に作成しておけばよいのでしょうか。

【22780】Re:処理を行っている間メッセージボック...
発言  Jaka  - 05/3/3(木) 9:41 -

引用なし
パスワード
   こんにちは。

▼YN61 さん:
> 略
>このコードを見させていただき、「実行表示」と言う言葉は何処に作成しておけばよいのでしょうか。


ActiveSheet.Shapes("WordArt 1").Visible = True
            ↑
      ワードアートの名前を「実行表示」と変えただけです。

手動での名前変更は、ワードアートを選択して数式のバーの名前ボックスで行います。
自分で書いていて言うのもなんですが、ワードアートやテキストボックスを使う場合、進行具合を表示させるのは止めた方がいいです。
内部処理とのタイムラグ(実際の進行より表示の方が遅い)も大きい上、処理速度を大幅に低下させます。(絶えられないほどに)

また、ステータスバーでも一々カウントさせると処理速度の低下原因にもなりますから、その辺りを考えて使用された方がいいと思います。

>ActiveSheet.Shapes("実行表示").Visible = True
>DoEvents
>DoEvents   '← 私のPCは、トロイので2個必要でした。

>'やりたいマクロをここに書く
 このコードでは、やりたいマクロが↓にあたります。
 実際のコードでは、不要。(念のため)
>Application.Wait Now + TimeValue("00:00:03")

>ActiveSheet.Shapes("実行表示").Visible = False

【22805】Re:処理を行っている間メッセージボック...
お礼  YN61  - 05/3/3(木) 20:42 -

引用なし
パスワード
   ▼Jaka さん:
こんにちは。

YN61 です
色々とありがとうございました。
大変よく分かりました。
今後ともよろしくお願いします。
失礼します。

10267 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free