アクセスで他アプリから復帰した場合の再描画イベント

このQ&Aのポイント
  • VBでアクセスを使用している開発者が、アプリからの復帰時の再描画イベントについて質問しています。
  • 処理中に別の画面を表示してアクセスに戻ると、再描画が行われずに白い画面が表示される問題が発生しています。
  • 質問者はActivateイベントを使用してみましたが、アクセスに戻っただけではイベントが発生しないことがわかりました。
回答を見る
  • ベストアンサー

アクセスで他アプリから復帰した場合の再描画イベント

 エクセル、アクセスでVBAを自作している者です。コーディング暦5年以上で、フォーム画面も組めるようになりました。  いまだに理解が進まないのがイベントですが、その中で質問があります。  かなり時間のかかる処理(例えば30分とか1時間とか)を行う際に、例えば100件処理ごとに「今~件処理しました。」というようなメッセージをフォーム上に表示して、経過を知らせるとともにPCが固まっていないことを確認できるようにしています。(Application.Echoを通常はFalseにして、100件ごとにEcho=Trueに直してからRepaintメソッドで書いて、再びEcho=Falseに戻しています)  しかし、これもずっとアクセスを表示したままの場合にしか動きません。処理中に別の画面(エクセルとかエクスプローラーとか)を表示して、アクセスに戻ってくると、アクセスはVB実行中で画面の再描画はしてもらえず、処理がすべて終わるまでは白い画面(何も表示されない画面)などが表示されたままになってしまいます。フォームのActivateイベントにも仕込んでみましたが、アクセスに戻っただけではActivateイベントは発生しないようです。  Applicationオブジェクトや、CurrentProjectオブジェクトにはイベントがないようで、アクセスがアクティブになった場合に、再描画させることができるのかどうか、教えていただければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • ganbaro
  • ベストアンサー率45% (43/94)
回答No.1

あまり自信がないのですが、 REPAINTの前にDO.EVENTをかましたらうまくいきませんか。 感覚として、一度OSに制御を移して再描画になるのでないかと思うのですが。 間違ってたらごめんなさい

dKacho
質問者

お礼

ありがとうございます。 DoEventsの機能はヘルプを読んでみたものの、まだ完全に理解できていません。ただ、アドバイスの通りにRepaintの前にDoEventsを置いてみて、うまくいきました。下記のようなコードで動いています。 Private Sub Form_Activate() DoEvents Me.Repaint Exit Sub

関連するQ&A

  • アクセス イベントの発生を停止させたい

    アクセスでイベントを発生しないようにしたいのですが エクセルで使用できる、Application.EnableEvents = Falseを使うと、 コンパイルエラーになります。 フォームを指定して、 .FilterOn = True を通ると、 該当のフォームのPrivate Sub Form_Current()イベントが発生してしまうので、 Application.EnableEvents = Falseのように、イベントの発生を停止させたいです。

  • Access コマンドイベント前再描画

    ACCESSにて フォーム上にコマンドボタンと サブフォームがあり サブフォーム内のデータをコマンドボタンを押すとデータ不備の確認ロジックが処理されますが コマンドボタンを押すと   サブフォームのカーソルが2度 上から下まで移動します。  そのコマンドボタンのイベント関数の前にサブフォームが再描画一度処理されているようです。 再描画の指示をしているつもりがないので なぜ再描画されるかわかりません。 なにかお分かりなる方いらっしゃいませんか?

  • Access イベント制御

    Access2000+BVのフォームです。 プログラムの中でイベント発生を制御できませんか? 今困っているのは、フォームを開いている時にいろいろな処理をさせてます(処理A)。 その中にフィールドのSetFocusがあります。 すると、「レコード移動時」(処理B)と「フォーカス取得時」(処理C) のイベントが発生してそちらにとんでいきます。 ブレークポイントを置いて調べたら、処理Aの途中で処理Bに行ったり、処理Cに行ったり。 戻ってきたら処理Aの続きをしてくれるといいのですが、特にデータ量が多い時には、処理Aを頭からもう一度はじめたりします。 そしたら、また処理Bと処理Cに行ったりしてしまいます。 処理BとCに「旗」を置いて処理Aの途中だったら、なにもせず戻るようにしてますが、行き来しているうちに「旗」自体も白旗を上げてしまいます。 そこでプログラムのなかで、「 OnCurrent_Event = false 」「OnEnter_Event = true 」なんて感じでイベントが発生してもその処理に行かなくする方法はないですか? 意味が通じたでしょうか?よろしくお願いします。

  • accessでイベントを中止するようなコマンドはあるのでしょうか?

    accessでイベントを中止するようなコマンドはあるのでしょうか? excel vba でのenableevents=falseのようなものはあるのでしょうか?

  • Accessのフォームのイベントについて

    Accessのフォームをデータシートビューで開き、表示されたレコードを選択後、 セレクタのダブルクリックで、その詳細を別フォームで表示させます。 セレクタのダブルクリックで、フォームのダブルクリックイベントが発生するので、別フォームを開くことは問題ないのですが、 データシートビューのせいなのか、ラベルの部分(標題?)のダブルクリックでも、イベントが動作してしまいます。 セレクタのダブルクリックのみで処理をさせたいのですが、 フォームのダブルクリックイベント内で、セレクタがダブルクリックされたかどうかを判定する方法がありますでしょうか? よろしくお願いいたします。

  • Access2.0でフォームのイベントについて

    お世話になっております。 ムカーシのAccess2.0システムを改造しなくてはならず、当時の文献を読みあさっています。 Access2.0でフォーム中に一覧表という形で、「詳細」セクションへある数件のレコードを縦並び、スクロールバーで表示させているのですが、これをある条件下で、詳細ごとに、詳細セクション中のコントロールを表示・非表示したいと考えてます。(もっといえば、詳細セクションの高さもそれに併せて調整したく思ってます。) で、問題になるのはイベントだろうと思うのですが、そういったイベントが見あたらないのです。 もしかして、機能的にそうなっていないのでは・・・などおもったりするのですが・・・ どうか、お力添えをお願いします。

  • VC++:pictureBoxにイベントなしで描画

    前略 ・ Visual Studio 2012 のVC++を使っています。 フォームに貼り付けたピクチャーボックスに、フォームが表示された時にボタンクリック等特にイベントを発生させないでも 描画したいのですができません。 どなたか教えていただければ幸いです。  以下の例で具体的に教えてください。 ボタンもフォームに貼りつけてボタンクリックイベントの中に以下のようにコーディングしてボタンをクリックすると円が描けます。 どのようにすれば、ボタンクリックしないでもフォームが表示された時に、円がピクチャーボックスの中に描画されているようになるのででしょうか?    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { // 描画を行うグラフィックスクラスを生成 Graphics^ g = pictureBox1->CreateGraphics(); //円の描画 Pen^ blackPen = gcnew Pen(Color::Black, 3); g->DrawEllipse(blackPen, 50, 50, 75,75); //基点(50,50) 幅×高さ:75×75  } 以上、よろしくお願いします

  • Application.ScreenUpdating=Falseを使うと・・・。

    VBAでユーザーフォームを表示させ、コマンドボタンを押すと ユーザーフォームを閉じて処理を開始すると言う設定をしているのですが ここにApplication.ScreenUpdating=Falseを追加すると ユーザーフォームが閉じずに処理を行なってしまいます。 (最後まで開いたまま) コマンドボタンのクリックイベントの最初にUserForm1.hideと入れ、その後にApplication.ScreenUpdating=Falseを入れた後に 行なう処理を書いているのですが、どこか間違っていますでしょうか? お教え下さい。よろしくお願いします。

  • ACCESS2007で起動時にフォームのみにしたい

    ACCESS2007の起動時初期画面の設定についての質問です。 初期画面として、フォームを表示させたいのですが、左端に ACCESSオブジェクト欄などが表示されていて、アプリケーションっぽくありません。 表示されるのをフォームだけにしたいのですが、どのようにすれば よいのでしょうか。 よろしくお願いします。 ※あまりACCESSは慣れていません。

  • アクセスでイベントプロシージャが機能しない

    アクセス97で作成したデータベースをアクセス2000でへフォームをインポートしました。そこでデザインモードでコントロールボタンのイベントプロシージャをクリックしたら本来VBの画面になるべきところ、反応せずVB画面になりませんでした。 どうしたらいいか困っています。ご存じの方、よろしくお願いします。

専門家に質問してみよう