Please visit our sponsors.
スポンサーも訪れて下さい

トップページ ★MSアクセスウエッブカレッジサンプル(ダウンロードする)|業務統合4in1小さな会社用『感嘆!』  

▲マクロで指定したデータ(レポート)の印刷をする▲2001.06.27

画面操作でやっていると出来るが、マクロだと出来ないことが、よくあります。以前に自分で作成したソフトが、他の人には使えないとの相談があって、私が手直ししたソフトがありましたが、その場合も、作った人は、注意して操作するが、他のひとがやると駄目で、実務で使えないというものでした。


その現象の中心は、「動きが安定しない」というものでした。これはアクセスに限らず、ソフト開発の大きな課題で、ソフト開発者はそのために苦労します。


動作が安定しない原因の多くは、アクセスそのものより、開発側の問題のことが多いと思います。

実務においては、いろいろのことが起こります。イレギュラーな操作に対して、プログラム、マクロが対応できていない、又は、処理するタイミングが悪くて、頭で考えていることと、動くマクロが一致していないなどです。


今回取り上げるテーマはまさにそのことです。自分の思っているように、マクロが動いてくれない。そんなテーマに挑戦します。(今回テーマは、下記質問がマクロ掲示板にあり、まだ回答がありませんでしたので、ここで取り上げることにしました。)



「質問」

「仕事で書類管理するようになったのでアクセス(2000)使うようになったのですが、通常、レポートの印刷を行う場合、フォームにデータを入力して、その後レポートを確認、任意のページを印刷するじゃないですか。(間違っていますか)   その作業がめんどくさいので、マクロを使ってフォームでのデータ入力後印刷できるようコマンドボタンをフォームに追加しました。 


ところが、印刷を行うと、入力したレコード(フォームならそのページ゛ですか)のみ印刷してくれればいいのに、入力したレコードが全部印刷されてしまいます。 これじゃ仕事になりません。 御詳しい皆さん! 便利な使い方教えて下さい!」

という質問です。思ったように動かないとき、頭にきますよね、今風に言うとキレますよね。ソフト開発を仕事にしていると、これが毎日です。これは克服できナインですね。常に起こる問題なんです。


「回答」

では、回答を考えましょう。といってもこれが絶対解答ち言うわけにはいきません。多分回答でしょう。というあたりで読んでください。

1 画面操作と、マクロ内処理の違い
  これを理解するには、アクテイブかアクテイブでないかということを知らな
  ければなりません。


画面で操作している状況は全てアクテイブ状態です。ところが、マクロで自動処理をする場合、何がアクテイブで何がアクテイブでないかが分かりません。さあ、ややこしくなってきましたか?


アクテイブのは、ホーカス去れている状態をいいます。フォームを開いて、入力するため、マウスを乗せれば、そのフォームのそのレコードがアクテイブということになります。


生徒がABCの3人いて、今フォームでBの人を画面に出して、生年月日の入力を始めた場合、今開いたフォームとBのレコードがアクテイブ状態で、AとCはアクテイブではありません。画面からの支持は、このアクテイブフォームに対して実行されます。マクロでは、フォームを開くのも値の代入も、印刷も、自動で行うことになりますが、欲しいものが、マクロ上でアクテイブになっているかどうか、が決め手になります。

自分の意図したものが、アクテブになっているか確認しなければなりません。


2.目的のデータが選択されているか?

 今回の質問は、アクテイブにはなっているが、レコードが選択されていないので全部のデータがアクテイブ状態になってしまうためにおきていると推測する。

最も簡単な方法は、レポートを印刷するアクションで「印刷プレビュー」にして、画面で、該当分を選択して(画面に出して)ファイルー印刷でも出来ます。

もっと自動で格好よくというときは、マクロで、レコードの選択をしなくてはなりません。10個のデータのうち、印刷したいのはどのデータかを選択します。

1) 選択キー項目を決める
レコード番号など、特定出来る番号(テキストでも可)を決めます。

2) 選択クエリーを作る
上記で決めた番号で選択する選択クエリーを作成します。このとき、例えば生徒番号として、3番の人を選択するとして、3番というデータをいれるところを造ります。又は、フォームで入力していれば、その番号と同じレコードのレポートを開く(印刷)ようにします。クエリーの抽出条件をフォームの番号と設定します。

3) レポートのソースをクエリーに変更します。
これで、入力している分の印刷だけ行います。

4) もう一つの方法は、クエリーを使わない方法です。
その場合は、レポートを開く(印刷)アクションに、WHERE設定で
番号=○レポートの番号
と指定します。
(指定方法は省略)
これでも、OKでしょう。


3番を印刷して次に5番を印刷するような場合、どうしても3番のみを繰り返して印刷してしまうことがありますが、これは、タイミングの問題です。マクロではまだ3番と言う認識になっているので、何回印刷しても3番が出ます。マクロにもう5番に変わりましたよ!としっかり教えなければなりません。


ココに、プログラムで問題の多い、更新処理が浮かんできます。
これは次回に……




お得で便利なNTTネットワークサービス!クリックしてみて!


メール:macro@mscn.net

| トップ4in1曙司法書士システム公益法人
|弁理士用大丈夫弁護士用大丈夫ARA ! |
| マクロ研究会MSアクセス入門マガジン |マクロ会議室ダウンロード