- ベストアンサー
DoEvents(VBA)の質問です。
Office 2010 のVBAで、コマンドボタンを押し、画面を少しだけ書き換えて処理に移ります。 問題は、DoEvents を数個連続して記入しなしと画面への書き直しが反映されません。 今までの経験では、このような場合DoEvents は1個で充分に機能してくれたと思い、面食らっています。 具体的には、 DoEvetns 2個ではだめで、3個ならOKです。心配なので4個挿入していますが、他のPCに移植した場合の挙動が心配です。 書き直しているのは、Label 2つの文字列で、文字数は15文字程度です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
失礼、エクセルではrefreshがつかえないようですね。 となると、コントロールをフォーム上においてRepaintするのがいいかな。 Private Sub CommandButton1_Click() Label1.Caption = "changed" UserForm1.Repaint Do Loop End Sub あとは、書き換えた後に確認ダイアログをだすとか。 Private Sub CommandButton1_Click() Label1.Caption = "changed" If MsgBox("処理を行います", vbOKCancel) Then Exit Sub Do Loop End Sub どちらもしたくないなら、一定時間ループでdoeventsするくらいしか思いつかないけど、 doeventsって、いろいろ不思議なことが起こる可能性を秘めているような気がするから (私は)本当に必要なとき(ほかのプロセスが絡んでいるとき)以外は原則的に使わない。
その他の回答 (3)
- ShowMeHow
- ベストアンサー率28% (1424/5027)
If MsgBox("処理を行います", vbOKCancel)=vbcancel Then Exit Sub のつもりでした。 すみません。
こんばんは。 VBAですよね? Labelの文字列を書き直し(変更?)するくらいでDoEvents?どんなコードを書いているのですか? 何かの処理中に行おうとしているのかな?
補足
コマンド ボタンで少し時間のかかる処理をはじめます。処理が終わってからではなく、処理が始まると同時にLabel に表示される文字を変更したいのです。 変更する文字列は、押すコマンド ボタンにより変わり、ボタンを押す前の変更はできません。 これで、私の要求を理解いただけますか?
- ShowMeHow
- ベストアンサー率28% (1424/5027)
コントロールもしくはフォームのrefreshではどうだろう。
お礼
1回で効果があるものと思っていました。3回やって効果があったので、これで良しとします。