プロが教える店舗&オフィスのセキュリティ対策術

こんにちは
VBAの初心者なんです。 
VBAのデータ検索処理、超時間がかかりそうです。ですが、検索ボタン押下時に、処理待ち画面を表示させ、検索が終ったら、処理待ち画面を
閉じる仕様になりました
下記のように、なかなかうまくいけませんでした。
Private Sub CommandButton1_Click()
'userform6は処置待ちフォーム
userform6.show
'検索処理
検索処理()
userform6.hide
end sub

ご存知の方がいらっしゃいましたら、ぜひ、お力を貸していただきたい......

A 回答 (2件)

  isCompleted = False


  userform6.show '処理待ち画面の表示
  検索処理()
  Do
    DoEvents
  Loop Until isCompleted   
  userform6.hide '処理待ち画面隠す

sub 検索処理()
...
...
isCompleted=true
end sub

=======================================================================================

DoEvents関数

>発生したイベントがオペレーティング システムによって処理されるように、
>プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。

=======================================================================================

検索処理()実行後に待機しなきゃーフォームを隠すコードが実行される不具合と推察。
で、検索処理()実行後に待機すればと思った次第です。
で、待機の条件を isCompletedにしてけば、検索処理()の最終行でこれを真にすれば抜けると。
が、が、この場合、DoEvents関数をDo-Loopに書いておかないと検索処理()のプロセスも停止。
Do-Loopの処理が優先されるからです。

還暦まじかで実践から遠ざかって数年。
外してなきゃーいいのですが・・・。
    • good
    • 0
この回答へのお礼

いろいろ、ありがとうございました。参考になって、解決しました
  Private Sub CommandButton1_Click()
isCompleted = False
Me.Hide

UserForm3.Show vbModeless
Do
DoEvents
検索処理
Loop Until isCompleted
Unload UserForm3
MsgBox "終了"
Me.Show
End Sub
sub 検索処理()
...
...
isCompleted=true
end sub
そういう感じでした、ありがとうございました

お礼日時:2008/06/20 18:07

Option Explicit



Dim isCompleted As Boolean

Private Sub CommandButton1_Click()
  isCompleted = False
  Do
    DoEvents
  Loop Until isCompleted
  MsgBox "終了"
End Sub

Private Sub CommandButton2_Click()
  isCompleted = True
End Sub

エクセルは操作したことがない門外漢ですが・・・。

CommandButton1が押されてもメッセージは表示されません。
CommandButton1が押されるまで待機します。

質問の件では、検索処理開始前に isCompleted を偽にします。
質問の件では、検索処理終了と同時に isCompleted を真にします。
そうするとD0-Loopから抜けます。
この抜けた後に処理待ち画面を隠します。

重要なことは、待機中にプロセスを解放することです。
でないと、検索処理がとまります。

この回答への補足

Husky2007さん
こんにちは
下記のようになかなかうまくいけません
Dim isCompleted As Boolean
Private Sub CommandButton1_Click()
  ...
  isCompleted = False
  Do
    userform6.show '処理待ち画面の表示
  Loop Until isCompleted   
  検索処理()
  userform6.hide '処理待ち画面隠す
...
End Sub
sub 検索処理()
...
isCompleted=true
...
end sub
ご指摘をお願いします
よろしくお願いいたします

補足日時:2008/06/20 16:11
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございました
不明点がありまして、

重要なことは、待機中にプロセスを解放することです。
でないと、検索処理がとまります。

プロセスを開放するってはなんですか。私は今の状態は仰っている状態になりました。検索処理が止まっている状態でした

VBAの門外漢のものですが、教えていただけませんか

お礼日時:2008/06/20 16:00

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

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