- ベストアンサー
Accessフォームでレベルメーター
Accessのフォームにボタンを作成し、クリックするとテーブルのデータをDAOで1件づつ読込んで、Excelワークシートを新規に作成し、そこに転記するVBAを作成しました。それはそれで動くのですが、レコード件数とフィールド数が多いので10分程度かかります。その間、このパソコン固まったのではないかと不安を誘います。 そこで、処理の進行に合わせて、そのフォームにレベルメータがあって棒が伸びていくとか、処理中のレコード数がどんどんカウントアップ表示されるとか、「ちゃんと動いてるぞ」みたいな表示するにはどうしたら良いのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#1さんの回答でOKですが、どうしてもフォーム上でプログレスバーを使用したいのならこんなのも。 ラベルを横長に配置して「立体表示」プロパティを「くぼみ」にします。「表題」プロパティは空っぽに。 もう1つラベルを横長に配置して「背景スタイル」を「普通」に、「背景色」を好きな色にします。 くぼんだラベルの上に色をつけたラベルを重ねて、「左位置」「上位置」「高さ」を適宜調節してください。 「幅」はとりあえず構いませんが、くぼんだラベルからはみ出ないで最大に伸ばした時の「幅」をVBA側から取得して覚えておいてください。(VBA側からだとセンチじゃなくてTwipというVBA独自の単位で扱いますので) フォームの初期化イベントで、 ・色つきラベルの幅をゼロにする。 ・レコードに関する処理 ・・処理済件数を格納する変数をゼロにセット ・・総件数を取得 ・・1件分を処理 ・・処理済件数をインクリメント ・・色つきラベルの幅を「処理済件数 / 総件数 * 色つきラベルの最大幅」の計算結果にします。 つまり、色つきラベルの最大幅を100%として、現在の処理率で幅を決定するので、ご要望のプログレスバーが作成できます。 Google などで「Access フォーム プログレス」で検索すれば沢山ヒットしますよ。
その他の回答 (1)
- tsukasa-12r
- ベストアンサー率65% (358/549)
たしか、フォームのステータスバーのところにでしたら、SysCmd でできたと思います。ヘルプで SysCmdを調べてみてください。
お礼
ありがとうございます。この方法で無事できました。
お礼
ありがとうございます。#1の方のおかげでSysCmdの存在を知り、ただしHELPみてもよく分からなかったのですが、temtecomaiさんの教えでWeb上から具体例をひっぱりだして何とかできました。プログレスバー(そういう名称なのだというのも初めて知りました。)の作り方も確かにいろんなサイトがありました。