• ベストアンサー

Accessフォームでレベルメーター

Accessのフォームにボタンを作成し、クリックするとテーブルのデータをDAOで1件づつ読込んで、Excelワークシートを新規に作成し、そこに転記するVBAを作成しました。それはそれで動くのですが、レコード件数とフィールド数が多いので10分程度かかります。その間、このパソコン固まったのではないかと不安を誘います。 そこで、処理の進行に合わせて、そのフォームにレベルメータがあって棒が伸びていくとか、処理中のレコード数がどんどんカウントアップ表示されるとか、「ちゃんと動いてるぞ」みたいな表示するにはどうしたら良いのでしょうか?

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

  • ベストアンサー
noname#102878
noname#102878
回答No.2

#1さんの回答でOKですが、どうしてもフォーム上でプログレスバーを使用したいのならこんなのも。 ラベルを横長に配置して「立体表示」プロパティを「くぼみ」にします。「表題」プロパティは空っぽに。 もう1つラベルを横長に配置して「背景スタイル」を「普通」に、「背景色」を好きな色にします。 くぼんだラベルの上に色をつけたラベルを重ねて、「左位置」「上位置」「高さ」を適宜調節してください。 「幅」はとりあえず構いませんが、くぼんだラベルからはみ出ないで最大に伸ばした時の「幅」をVBA側から取得して覚えておいてください。(VBA側からだとセンチじゃなくてTwipというVBA独自の単位で扱いますので) フォームの初期化イベントで、 ・色つきラベルの幅をゼロにする。 ・レコードに関する処理 ・・処理済件数を格納する変数をゼロにセット ・・総件数を取得 ・・1件分を処理 ・・処理済件数をインクリメント ・・色つきラベルの幅を「処理済件数 / 総件数 * 色つきラベルの最大幅」の計算結果にします。 つまり、色つきラベルの最大幅を100%として、現在の処理率で幅を決定するので、ご要望のプログレスバーが作成できます。 Google などで「Access フォーム プログレス」で検索すれば沢山ヒットしますよ。

souta_n
質問者

お礼

ありがとうございます。#1の方のおかげでSysCmdの存在を知り、ただしHELPみてもよく分からなかったのですが、temtecomaiさんの教えでWeb上から具体例をひっぱりだして何とかできました。プログレスバー(そういう名称なのだというのも初めて知りました。)の作り方も確かにいろんなサイトがありました。

その他の回答 (1)

回答No.1

たしか、フォームのステータスバーのところにでしたら、SysCmd でできたと思います。ヘルプで SysCmdを調べてみてください。

souta_n
質問者

お礼

ありがとうございます。この方法で無事できました。

関連するQ&A

  • アクセス97のフォームについて

    前回質問したのですが回答がなかったので再度簡単に質問させていただきます 現在、帳票フォームとしてフォームを作成しています コードをレコードの項目にふってあるのですが、入力するさいに既存レコードとコードが重複した場合にエラーを表示したいのです 出来れば同一コードを入力された場合次のレコードへは行けないようにしたいのですが・・・。 フォームの更新前処理に設定すればとりあえず次のレコードへは行かなくなるのですが、既存レコードを編集した場合にもエラーが表示されるのです 更新前処理で処理をしたいのですがムリでしょうか? なにか良い方法があれば教えてください 宜しくお願いします

  • Accessのフォームで…

    Access 2010のフォームのリストボックスで、あるテーブルのフィールドの値を選択した場合に、同じテーブルの同じレコードにある違うフィールドの値を、テキストボックスに読み込みたいのですが、どうすれば出来ますでしょうか? VBAのサンプルソース等でも構いません。回答お願いしますm(_ _)m

  • 異なるフォームに属する関数間でACCESSのレコードセットを受け渡しする。

    msAccess2000のVBAコードの質問です。 元々、全てを理解しているわけではないのにVBAコードを書いているのが無茶なんですが、無茶を承知でプログラミングしています。 あるクエリの結果を、あるフォームで帳票表示しています。この帳票の一レコードにボタンをつけて、クリックイベントで、そのレコードを取得しようとしています。フォームはこの後、閉じられた後、呼び出された親にその、レコードを渡したいのです。 フォームは、親フォームのボタンクリックイベントから、DoCmd.Openformメソッドによって呼び出されるので、戻り値は使えません。 しょうがないので、広域変数rst(DAO.Recordset型)で、受け渡そうと思ったのですが、recordset型は、どうやら参照のようで、フォーム(クエリ?)を閉じると、レコードが壊れてしまうようなのです。 Module1で、 public rst as DAO.recordset として、 Private Sub コマンド34_Click() set Module1.rst=me.recordset ' この中では、rst.fields(*)で、フィールドの値を使えるのですが・・・ END Sub 呼び出した親フォームでは、module1.rst.fields(*)を使用できません。 質問は二つあります。 1)広域変数rstは、上記のような宣言・使用法で問題ないですか? 2)sub またはfunction間にわたって、レコードを渡す、いい方法はないですか?

  • ACCESS フォームで抽出条件の違うレコード表示

    宜しくお願いします。 ACCESSでレコードソースをQ_Bとするフォームに、ヘッダー部分に別のクエリ(Q_Aとします)のデータを表示させようと思っています。 Q_Aのデータを元にフォーム内でnoごとに表示するテキストボックス(リストボックスなどでも可)を変えて表示させたいのですがうまくいきません。 Q_Aは No 日付 1 1/15 2 2/1 3 2/5 4 3/12 ・・・レコード数は10あります。 Q_Aの日付フィールドのみ一定期間ごとに変更します。 ですので、一つのテキストボックスには例えば Noのフィールドの「1」のレコードが表示されるようにしたいのです。 Q_Aを元に、レコード数10が個別に表示されるテキストボックス等を、VBAなど?で抽出条件を指定しておきフォームを開いた際に表示できるようにしておきたいのですが、どのような方法があるかご教授願えますでしょうか? よろしくお願い致します。

  • ACCESSのレポートでの表示について

    1つのレコードに複数のフィールドを作り、帳票フォームを作成し、それをレポートにしました。 レポートで表示すると、1ページに複数のレコードの内容が表示されています。 そこで、それぞれのレコードには空欄のフィールドが多くあるので、データが入力されてあるフィールドのみを表示させていきたのですがどうすればよいでしょうか。 そうやってつめる事によって1ページに表示されるレコード数を増やしていきたいのですが・・・・・。 よきアドバイスお願いいたします。

  • ACCESS データの抽出 同一フォーム内でコマンドボタンを使用して

    ACCESSでシステムを作成中です。 T_全生徒情報 というテーブルがレコードソースに設定されています。 レコード数は約300あります。 フォームで学生一覧が参照できていますが数が多いので、条件を指定して絞り込めるようにしたいと考えています。 同一フォーム内に コマンドで「1年生」「2年生」「3年生」と作成し、 「1回生」を押すと、300のレコードの内、テーブルでフィールドの「学年」が「1」のレコード全てを表示できるようにしたいのです。 同じフォーム内でのレコードの抽出が難しく四苦八苦しています。 参考書などで Filter 等いろいろを試してみましたがうまくいきません。 どなたか教えてください!!

  • Access フォームからの検索について

    初歩的な質問で申し訳ありませんが教えて下さい。 Access2000を使っています。 フォームに作ったテキストボックスに、入力した値又は文字と、特定のフィールドと比較し一致した場合にそのレコードをフォームに表示する方法はないでしょうか? いろいろと、web上のQ&Aなども見ましたが、思った動作をしませでした。 考えているのは、   ・テキストボックスにある値を入力し、『Enter』を押すとテキストボックスに入力した値と特定のフィールドと一致したレコードをフォームに表示 ・一致しない場合はメッセージボックスで一致しない旨を表示 です。 ・完全一致のみ表示 VBAでの動作を考えていますが、合わせて他の方法があれば教示頂ければと思います。 以上、お手数をお掛け致しますがよろしくお願い致します。

  • Access のフォームで新しい行を挿入する方法

    アクセスの表形式でフォームを作成した時、データの先頭を右クリックすると ボックスが表示され、切り取り、コピー、貼り付け と表示されますが、ここに 挿入 がありません。  そこで、ここでダブルクリックをする事により、行挿入を行おうと思いました。 実際やってみるとテーブルの中には新しいレコードが挿入されているのですが、フォームを再表示(Repaintメゾッドを使用)しても、作成されたレコードが表示されません。 この時、レコード件数も増えているのに、以前のままの表示です。追加した後の枝No.は変更されて表示されています。  レコードには、キー項目と枝No.があります。  最初、レコード件数は2件とします。 1件目と2件目の間に新しいレコードを挿入したいので、2件目をダブルクリックして、新しく枝No.「2」のレコードを作成し、元の枝No.「2」のレコードは「3」に変更している事はテーブルを開けてみて確認しています。  この時、フォームでも枝No.は Repaint 実行後、変更されて表示されています。  どのようにすれば、新しいレコードが表示する事が出来るでしょうか。 実際には、この表形式はサブフォームにしており、メインフォームから、この挿入イベントを実行したいのです。 メインフォームでイベントを実行後、新たにサブフォームだけ開けてみると、ちゃんと新しいレコードが表示され、レコード件数も3件になっています。  よろしくお願いいたします。

  • Access 検索した値を別フォームに

    Accessのシステムを会社で作ってます。 検索したIDをサブフォーム(データシート型) で表示したレコードを編集フォーム(別フォーム)に呼び出したいのですが上手く出来ません。 ネットでも検索しましたが良いのがありませんでした。 どなたか、お手数ですがコードを教えていただけないでしょうか? 何卒よろしくお願いします。 *adodbとDAOのどちらか使う必要があるならDAOを使用して作成したいです。 *クエリは使わずに作成したいです。 ○検索フォーム 検索ボタン ID入力テキスト 編集ボタン サブフォーム(データシート型) 編集ボタンを押すと ○編集フォーム 単帳型 *レコード項目 ID プロジェクト名 日付 モジュールNO

  • Accessフォームの検索画面作成について

    ご存知の方、教えてください。 ・会員情報の単票フォームを作成し、同フォームのフォームヘッダーにテキストボックスとボタンを作成しました。 ・テキストボックスにフリガナの頭文字を入力し、ボタンを押すと、該当する会員のレコードが表示されるようにしました。 (VBAのFindRecordで作成) ここからが分からないのですが・・・。 ・フリガナに同じ頭文字を持つレコードが複数ある場合、「次へ」というボタンを押すと上部レコードから順に次のレコードが表示されるようにしたいのです。また、同じ頭文字のレコードがない場合は「検索が終了しました」というメッセージを表示したいのです。 VBAでどのような記述をすればいいのか、教えてください。よろしくお願いします。

専門家に質問してみよう