アプリ版:「スタンプのみでお礼する」機能のリリースについて

今、アクセス2000を使ったちょっとしたデータベースシステムを構築してます。
その中で、マクロを使ってレポートのカレントレコードだけを印刷させたいのですが、データベース全体のレコード全件が印刷されてしまいます。
どなたか、カレントレコードだけをマクロ印刷させる方法をご存知の方ご教授下さい。よろしくお願いします。

A 回答 (2件)

マクロはあまり使わないので間違っていたら御免なさい!


「印刷」を行うときには、「レポートを開く」を選択しますよね?
その際にWhere条件ってのが存在すると思うんですけど、そこにSQL文を
書くことになると思います。

※印刷の際カレントレコードのみ出力するにはIDのような「キー」が必要に
なります。まあ重複しない数字ですよね。
↑があると仮定します。単純に「=ID」のような記述ではないのでしょうか?
詳細がわからないとこれ以上はムリですね!

AccessVBAで書くとしたら↓
適当なフォームにボタン(コマンドボタン)を付ける所までは一緒です。
プロパティ→イベント→クリック時にマクロの設定してますよね?
そこを
プロパティ→イベント→クリック時に右側の「...」三点リーダーみたいな
のをクリックして「コードビルダ」を選択して下さい。
Private Sub コマンド0()
End sub
↑って画面が出てくると思うんですけど、そこに↓をカット&ペーストして
下さい。※ちゃんとPri~の後にスペースを空けてEnd~の間に入れてね!

'----------------------更新・印刷作業-----------------------

Dim lngID As Long   '変数宣言ってやつです。
Dim kosyin As Integer  
'Dimはお約束→Kosyin適当な名前→asもお約束→Integer(数字)型が入ります。

'保存
kosyin = MsgBox("更新しますか?", vbYesNo)
If kosyin = vbNo Then
'Noだったら
Exit Sub
'閉じる
End If
DoCmd.RunCommand acCmdSaveRecord  'レコードの保存

'印刷
lngID = MsgBox("印刷を行いますか?", vbYesNo)

If lngID = vbNo Then
Exit Sub
End If
'上は同じ事してる。

'ここからが印刷ね!
lngID = Me.txt1.Value

'さっき変数宣言した適当な名前の中にIDを入れます。
'IDはさっき開いていたフォームのテキストボックスに表示されていることが条件
'IDのテキストボックスの名前を[txt1]の所に入れてみて!

DoCmd.OpenReport "印刷", acViewPreview, , "lngID=" & lngID
'acViewPreview を選択するとプレビュー acViewNormalは印刷
'ここは印刷を行う所です。「印刷」の所に自分のレポート名を入れてみてね。
'以上で更新作業から印刷までの流れです。
'マクロ使うより軽く出来るし、何よりカッコいいでしょ?(笑)

'質問があれば、追記してください。(暇な時に返事します。)
    • good
    • 0
この回答へのお礼

 大変親切なご回答ありがとうございます。VBAの方は私のスキルではついて行けませんので、マクロの式をご教授頂けると助かるのですが……
 前提条件はご推察の通りです。マクロの「レポートを開く」をフォーム上のボタンに貼り付けてます。そこでWhere条件にどういう構文を入力すれば良いのかでつまづいてます。今、仮に200件あるデータのうち5番目のデータがフォームとして画面上に表示されていたとします。この5番目のデータだけをレポートとして印刷させたいのですが、上手くいかないのです。1番目から全件のデータのレポートが出力されてしまいます。
 時間が出来ましたら、教えてくださいませ。

お礼日時:2002/03/03 00:07

ん~VBAってそんなに難しいかな?


とりあえずマクロのやり方書くけど・・・前のカット&ペーストしてみてね!

マクロを選択してツールのマクロの「マクロをVisual Basicに変換」して
必要な部分だけ切り取っただけだし・・・。前回記述したことを忠実に実行
するだけで、カッコいい感じで使えますよ。

説教ではありません。不愉快だったらごめんなさい!

>[Aテーブル]![id]=[Forms]![Aフォーム]![id]
で出来ます。
解説すると連番が必要だって前に説明しましたよね。
1~200件位だっけ?※無い場合はムリ!がんばって付けてね。
厳密には方法が無いわけじゃないけど、説明が長くなるからムリ!

その番号を仮にIDとします。
元になる(200件入っている)テーブルをAテーブルとします。
そのテーブルを元に作ったフォームをAフォームとします。

難しく考えないで「Aフォームに表示されている数字(ID)=Aテーブルにある
レコードを印刷してください!」となる。

もっと簡単にいうと画面に見える物と同じレコードを印刷しなさい!となる。
私も始めて「マクロ」って作りましたが、動きました。

※ちょっと質問
1.フォームって使ってるよね?
2.コンボボタンとかも使ってるよね?
出来なかったら・・・追記してね。
    • good
    • 0
この回答へのお礼

 回答ありがとうございます。できました!!
構文は[Aテーブル]![id]=[Forms]![Aフォーム]![id] だったんですね。
私は[Aレポート]![id]=[Forms]![Aフォーム]![id] とやってしまって上手くいかなかったんです。
(マクロを実行すると)全件がいきなり印刷されたり、パラメーターの入力を求められたりと、もーワケわからん状態だったので、スッキリしました。
心の余裕ができたので、VBAの方もやってみます。

お礼日時:2002/03/05 23:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!