Accessで進行状況インジケーターの表示を一時停止する方法

このQ&Aのポイント
  • Accessで進行状況インジケーターの表示を一時停止する方法について説明します。
  • VBAのSyscmdコマンドを使用して進行状況を表示している場合、マクロ動作により表示が妨げられることがあります。
  • Application.Echo falseを使用すると、ウィンドウ内の表示を一時停止できますが、インジケーターはロックされません。対処方法をご教示ください。
回答を見る
  • ベストアンサー

Accessで進行状況インジケーターの表示だけ止めたい

Accessで進行状況インジケーターの表示だけ止めたい VBAで、Syscmdなどの命令を使って、左下のインジケーター部に 進行状況を表示していますが、マクロ動作により、次のクエリが 動いているときには「クエリを実行しています■■」のような 表示になってしまいます。 Syscmdコマンドを使用した直後に、インジケータ部の表示だけ ロックして、次のメッセージを表示させたい時点でリフレッシュ するようなことは可能でしょうか。 Application.Echo falseは試してみましたが、ウィンドゥ内の 表示がロックするだけで、インジケーターはうまくロックしない ようでした。(ステップ実行で確認。) 対処方法をご存知の方、ご教示よろしくお願いいたします。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

【要旨】 データの更新を、「DoCmd.OpenQuery」から「CurrentDb.Execute」に変更 すれば、進行状況を知らせるメーターの表示を回避できます。 ※当該クエリを、更新クエリや追加クエリ等の「アクションクエリ」と想像。 【詳細】 恐らく、『アクションクエリの実行中も、「SysCmd acSysCmdSetStatus」で 設定した内容を、表示させておきたい』ということだと思いますが、 こちらで確認した限り、クエリ(DoCmd.OpenQuery)を使用した状況下での 回避策は見つけられませんでした(汗) ただ、クエリと同様の処理は、DAOのExecuteメソッドでも行うことができ、 こちらであればステータスバーでのメーター表示はされないことから、 冒頭で示したような変更をすれば、ご希望の動作になるかと思います。 なお、SQL文に差し替えるとなると、   a)SQL文は触ったことがない   b)既存のコードの修正が面倒 と二の足を踏まれるかもしれませんが、「DoCmd.OpenQuery」を以下の 関数に差し替え(VBEの画面で、Ctrl+Hキーの同時押しによる置換)れば、   a)SQL文の直接編集ではなく、クエリのデザインビューで編集可能   b)置換ダイアログでの一括置換 で対処できます。 <手順1> 標準モジュールに以下のコードを貼付し、適当な名前で保存: Public Function ProxyExecute(QName As String) As Boolean On Error GoTo エラー処理   '「ツール(T)→参照(R)」で、「Microsoft DAO ~」への参照設定が必要   Dim Rsl As Boolean, Qdf As DAO.QueryDef, strSQL As String   '指定したクエリを変数に格納   Set Qdf = CurrentDb.QueryDefs(QName)   'クエリのSQL文を取得   strSQL = Qdf.SQL   'SQLを直接実行   CurrentDb.Execute strSQL   'エラーが発生しなかったことを記録   Rsl = True 終了処理:   '本関数の戻り値として、実行/中止の結果を返す   ProxyExecute = Rsl   '念のため明示的にメモリを解放   Set Qdf = Nothing   '本関数を終了(後続の「エラー処理」の実行を回避)   Exit Function エラー処理:   Select Case Err.Number     Case 3265    '存在しないクエリ名を指定した場合       MsgBox "以下のクエリが見つかりません:" & vbCrLf & vbCrLf & QName     Case Else    '上記以外のエラー発生時はその情報を表示       MsgBox Err.Number & ":" & Err.Description   End Select   'エラーが発生したことを記録   Rsl = False   Resume 終了処理 End Function <手順2> 当該モジュールを開き、Ctrl+Hキーの同時押しで『置換』ダイアログを 表示させ、以下の条件で置換を実行:  検索する文字列(F): DoCmd.OpenQuery  置換後の文字列(W): ProxyExecute  対象:  カレント プロシージャ(P) 但し、エラートラップの設定(「ツール(T)→オプション(O)」で開く画面の 『全般』タブで変更可能)によっては、  ・OpenQuery: その場で処理を中止  ・上記関数: 関数の呼出元の後続処理を継続 という違いが発生してしまいます(汗) エラー発生時に処理を中止したい場合は、手動で(汗)以下のように書き 換えて下さい: <現在>  DoCmd.OpenQuery "クエリ名" <置換後>  ProxyExecute "クエリ名" <手動修正後>  If ProxyExecute("クエリ名") = False Then Exit Sub ・・・以上です。 長文、失礼致しました(汗)

KUMA__
質問者

お礼

丁寧な回答ありがとうございます。このような方法で回避できる という記載(検証)をしていただいたのは、他でも余り見かけず、 質問に対する、原因と対策が明確に解決し、すっきりしました。 DoCmd.OpenQueryの後ろに、“acViewNomal.acEdit”がついていたので 消去(もともと必要かわかりませんが)する必要があったのと、 CurrentDb.Executeの処理対象がテーブル作成クエリで、作成対象 クエリが既存の場合に、エラーが出るようです。(何かパラメータ 等で上書きの指定をするようでしょうか。)後はご回答いただいた もので期待した動作を確認しました。 参考のVBA部分を組み込むと、エラー処理の場合を無難?にスルー してしまうので、もう一度システムのコードを見ながら組み込みを 検討してみます。 ネットの記載を見ると、CurrentDb.Executeは同期処理なので、 理屈上動作速度がacViewNomal.acEdit(非同期)より遅くなるはず だが、実際は大して変わらない、とありました。特段利用上気にする 必要もなさそうですね。 会社では書き込みが出来ない環境なので、回答が遅くなり失礼いたしました。 今後のご活躍を期待しております。

関連するQ&A

  • デフラグ中の進行状況表示

    Vistaでデフラグを実行中に進行状況が表示されません。多分、Vistaではデフォルト設定されていないからだと思いますが、敢て、進行状況を表示させる方法があれば教えて下さい。 宜しくお願い致します。

  • マクロ進行状況

    エクセルのマクロ実行で、 処理時間短縮のために画面更新を停止させていますが、 実行中で現在どの程度まで進行しているかが分からないので、 何か進行状況が分かるような細工が出来ないかと思っています。 エクセル画面左下のステータスバーが利用できればと思ったのですが、 画面更新を停止させているとやはり無理なんでしょうか。

  • vegas 18 進行状況ダイアログに関して

    VEGAS Pro 18.0 OS:windows11 レンダリング時に表示される進行状況ダイアログが表示されなくなりました。 つい先ほどまで表示されていましたが、なんの拍子にか突然表示されなくなり、その後パソコンの再起動、キャッシュの消去、ProgramDataにあるvegas関連のファイルの削除と本体の再インストールなどは試しましたが、解決には至りませんでした。 補足:進行状況ダイアログが表示されていなくてもレンダリング自体は正常に行われているようで、タイムライン左下の進行状況バーとプレビュー画面は進行状況に応じて動いていること、また仕上がった動画も再生可能で編集通りの仕上がりになっていることは確認済み 直前にソフトのフリーズへの対処としてタスクマネージャーからタスクの終了をしたりしましたが、それ自体は普段も頻繁にしているようなことで、これまでこのような状態になったことはありません。 誤操作で進行状況ダイアログが非表示化されてしまっているのかとも思いましたが、設定を見てみたりヘルプで検索してみたりしてもレンダリング開始時からの進行状況ダイアログの表示/非表示の項目は見つけられませんでした。 助言いただけると助かります。 ※OKWAVEより補足:「ソースネクスト株式会社の製品・サービス」についての質問です。

  • 「予期しないエラーが発生しました。」

    エクセル2003を使っています。 WEBクエリのVBAコードで、 .Refresh BackgroundQuery:=False の部分で、 実行時エラー1004「予期しないエラーが発生しました。」 と出て、先へ進めません。 だからって.Refresh BackgroundQuery:=Falseの部分を、コメントブロックしてしまうと、 webクエリがエクセルに表示されません。 いままではこのコードで、webクエリをエクセルに書き出せていたのに 何がどうなったのでしょうか? ご回答よろしくお願いします。

  • Accessクエリ実行時のメッセージ表示について

    クエリ実行時にメッセージが表示されるのが面倒なので以下のようにしました DoCmd.SetWarnings False クエリ実行 DoCmd.SetWarnings True こうするとメッセージが表示されなくなりますが、他の箇所 (テーブルを開いてデータを削除とか、フォームの削除とか) でもメッセージが出なくなってしまいます。 他のところではメッセージが出るようにしたいのですが… また、一度mdbを閉じて開きなおすと、ちゃんと出ます

  • アクセスのフォーム

    アクセスのフォームで、ヘッダー部にボタンを3つ作成し、それぞれ名前を"1","2","3"とします。そして、全てのボタンに埋め込みマクロで"1"にはクエリ1を実行する、"2"にはクエリ2を実行する、"3"にはクエリ3を実行するというマクロを埋め込みます この時ボタンをクリックすると、その結果がフォームの詳細部分に表示させる事はできますか?例えば"2"をクリックすれば詳細部分にクエリ2の結果が表示される様にしたいです。それぞれのクエリの構成は異なります。テーブル形式で表示されるのではなく、フォームの形式で表示される様にしたいです。 表示された文字をクリックするとヘッダー部のテキストボックスにその文字が入力され、クエリの抽出条件がそのテキストボックスになっており、クエリ実行ボタンを押せばその抽出条件でクエリが実行され、詳細部分に表示・・・という様に検索できる様にしたいです。文字をクリックすればテキストボックスへというのは以前この場で教えて頂きました。 説明がうまくできなくてすいません。誰か教えて下さい。 よろしくお願いします。

  • ACCESSでの検索や表示に時間がかかる

    windowsxpでACCESS2000を使用しています。 最近、検索や画面の切り替えに非常に時間がかかるようになってきました。 どのようなことが原因と考えられるでしょうか。 ・レコードは5000件くらいでネットワーク上で5、6人で閲覧。 ・テーブルは切り離してリンクテープルとし、フォームやレポートだけの*.mdbを各人がローカルにコピーして使用。 ・使用フォームは単票形式で表示項目が多く、サブフォームやマクロを貼り付けたボタンなどもあり。 ・検索にはクエリーを使用。クエリーで検索した場合はすぐに表示される。 ・検索だけでなくフォームを切り替えたり、次のレコードに移動するだけでも時間がかかる。 (左下に"計算しています”と表示される) 自分で以下のことを試してみましたが効果はありませんでした。 ・データベースの最適化(常に実行) ・検索項目にインデックス(重複あり)を設定 ・フォームやレポートだけの*.mdbを*.mdeに変換。 使用状況は以上のような感じです。 アドバイスよろしくお願いいたします。

  • access 確認メッセージのはい/いいえの結果で分岐したい

    クエリ実行時に表示されるメッセージがありますが、 (DoCmd.SetWarnings False で非表示にできるメッセージ) この「はい/いいえ」を利用して if文のように分岐したいのですが、可能でしょうか? よろしくお願いします。

  • ACCESSのテーブルロックについて

    テーブルのロックについて教えて下さい。 ACCESS2000にてテーブル作成クエリを作成し、その作成したテーブルをフォームで参照しています。 そのフォームを開いたままで、再度、同じテーブル作成クエリを実行すると、 「テーブル○○は現在ほかのユーザまたはプロセスで使用されているので、ロックできませんでした。」 というメッセージが表示され、クエリを完了することができません・・・ これを回避する(クエリを優先する)方法、設定があったら教えて下さい。 宜しくお願いします。

  • プログレスバーでの経過状況表示

    vb.netでのtimerのようなものをやりたくてvbaでプログレスバーを使用して経過状況を表示するプログラムを作りました。プログレスバー自体での視覚的な経過状況表示はできたのですが、現在のパーセンテージをlabelに表示することができません。 Private Sub CommandButton4_Click() Dim i As Long Application.Visible = False i = 1 For i = i To 1000000 UserForm1.ProgressBar1.Value = i / 1000000*100 UserForm1.Label1.Caption =UserForm1.ProgressBar1.Value i = i + 1E-44 Next Application.Visible = True End Sub 上記のようにするとプログラム終了時にlabel1に現在のプログレスバーの値が表示されますが、進行中には表示されないのです。これを進行中も表示させるにはどうしたら良いのでしょうか?

専門家に質問してみよう