プロが教えるわが家の防犯対策術!

よろしくお願いします。

「印刷時に、印刷レコードに印刷年月日を自動入力したい。」
と考えて、今日も、一日中、アクセスと格闘してきましたが、もう知恵がでません。
クエリ作ってみたり、検索したコードを利用してみたり、いろいろしましたが、
どうすれば、よいのか、わからなくなってしまいました。
お知恵をおわけください。よろしくお願いします。

**************************************
(1)テーブルには、①受付日 ②商品名 ③件数 ④印刷年月日 の4つのフィールドがあります。
(2)クエリで、①にパラメータを使い、日付指定して、テーブルデータを抽出できるようにしました。
(3)クエリからレポートを作成しました。
(4)フォームの印刷ボタンで、レポート印刷するマクロを設定しました。

結果、印刷ボタンを押すと、指定受付日のレコードをレポートとして印刷できます。

今回は、
印刷ボタンを押して、指定受付日レコードをレポート印刷すると同時に、
当該印刷レコードについて、テーブルの④に印刷日を自動記録するようにしたいのです。

**************************************
なにとぞ、ご指導、よろしくお願いいたします。

質問者からの補足コメント

  • へこむわー

    画像を添付しました。

    「MS Access 印刷時に、印刷レコー」の補足画像1
      補足日時:2016/07/17 09:34
  • うーん・・・

    先の画像に 頂いたご回答を試した状況をつけました。

    「MS Access 印刷時に、印刷レコー」の補足画像2
      補足日時:2016/07/17 09:53
  • つらい・・・

    ご紹介頂いたサイトを参照しています。
    頂いたご回答と併せてやってみていますが、
    できない・・・です。。。うぅ。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/07/17 10:21
  • うれしい

    nicotinismさま

    ありがとうございます。今、実家に到着しましたので、遅くなりました。

    1、テーブル名: テーブルA
     フィールド:
     ①NO:テキスト型
     ②新規受付日:日付/時刻型(和暦)
     ③商品名:テキスト型
     ④発送年月日:日付/時刻型(和暦)

    2、クエリ名:Q 受付日指定 商品ごとの件数
     SQL文:SELECT [テーブルA].新規受付日, [テーブルA].商品名, [テーブルA].発送年月日, Count([テーブルA].商品名) AS 商品名のカウント
    FROM テーブルA
    GROUP BY [テーブルA].新規受付日, [テーブルA].商品名, [テーブルA].発送年月日
    HAVING ((([テーブルA].新規受付日)=[いつ受付?]));

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/07/17 20:58
  • うれしい

    先ほどの続き

    サンプルデータ
    NO 新規受付日       商品名  発送年月日
    01 平成28年07月08日 あいうえお
    02 平成28年07月08日 かきくけこ
    03 平成28年07月08日 さしすせそ
    04 平成28年07月08日 かきくけこ
    05 平成28年07月08日 なにぬねの
    06 平成28年07月08日 はひふへほ
    07 平成28年07月18日 まみむめも
    08 平成28年07月18日 かきくけこ
    09 平成28年07月18日 らりるれろ
    10 平成28年07月18日 かきくけこ
    11 平成28年07月19日 さしすせそ
    12 平成28年07月19日 さしすせそ

    以上。本当にありがとうございます。今日も、道中、気が気でなくて仕方ありませんでした。
    よろしくお願いいたします。m(_ _)m

      補足日時:2016/07/17 21:00

A 回答 (3件)

はい良くわかりました。


前回回答と重複する部分がありますが一通り説明します。
念のため、ファイルのバックアップコピーを取ってからにしてください。

1・レポートをデザインビューで開きレポートヘッダーにテキストボックスを配置。
2・プロパティシートを開き、このコントロールのコントロールソースに、=[いつ受付?]
3・コントロール名を、その他タブにある名前欄から、Txtパラメータ と変更。
4・書式タブから、可視 を いいえ に変更。
一旦保存します。これからはVBAの記述です。
レポートは閉じてください。

Alt + F11 を押してVBEを立ち上げます。
今後のこともあるので変数の宣言を強制するようにしてください。
メニューのツール→オプション→編集タブの「変数の宣言を強制する」のチェックを入れてください。
http://officetanaka.net/excel/vba/beginner/06.htm
Option Explicit が自動的に新しいモジュールに付与されます。
「自動構文チェック」のチェックは外しておいた方がうるさくなくて良いかも?←ご随意に。

メニューから挿入→標準モジュールにてその宣言部に
Declare Function apiIsWindowEnabled Lib "user32" _
Alias "IsWindowEnabled" (ByVal hWnd As Long) As Long

そのレポートのモジュールには
Dim IsPrintOut As Boolean
Dim IsPreview As Boolean
上二行は宣言部に

Private Sub Report_Activate()
IsPreview = True
End Sub

Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
IsPrintOut = (apiIsWindowEnabled(Me.hWnd) = 0)
End Sub

Private Sub Report_Close()
dim sSql as String '更新クエリのSQL文
on error goto errH
sSql="UPDATE テーブルA SET 発送年月日=#" & date & "# WHERE 新規受付日=#" & Me!txtパラメータ & "#"

If IsPrintOut Then
currentdb.execute ssql,dbfailonerror
Else
'MsgBox "プレビューのみです。"
End If
exit sub
errH:
debug.print err.number,err.description
msgbox err.description & "が発生しました。発送年月日は更新されません。"
End Sub

最後にメニューからデバッグ→○▽□のコンパイルを行ってエラーが出ないことを確認。
これで大丈夫かと思います。多分。
前回回答でおバカなことをしていました。すみません。
    • good
    • 0
この回答へのお礼

nicotinismさま

こんにちは!できましたっ!ありがとうございますっ!
キャーキャー言ってしまいました!
苦しんできたけれど、できましたっ!
すっごく嬉しいし、nicotinismさま、すごいです。
心から感謝申し上げます。
しばらく、何回も、やって、できたことを実感して喜びます。
この喜びをまずは、ご報告させて頂きます。
本当にありがとうございました。

お礼日時:2016/07/18 10:52

残念ながら、添付された画像では拡大しても文字の判別が困難です。


(多分、そちらでも同様かと)

以下の情報を載せてください。
※本番のテーブル名やクエリ名でお願いします。

1・印刷日時を保存したいテーブル名。
  そのフィールド名とデータ型。

2・レポートのレコードソースとなっているクエリ名。
  そのSQL文。
   (SQL文はクエリをデザインビューで開き右クリックして、SQLビューに切り替えて得られます)。
  出来ればサンプルデータを数行(ダミーで構いません)。

取りあえず以上五点。
この回答への補足あり
    • good
    • 0

問題の半分(【印刷時にだけ】印刷日時を記録する)は


こちらで解説されている方法で解決するものと思われます。
『レポートで印刷かプレビューか判断する』
http://hatenachips.blog34.fc2.com/blog-entry-170 …

残りの半分は、
パラメータ値をWHERE句に指定した更新クエリで行えばよいのでは?
例えばパラメータクエリで尋ねてくるときに、
「いつ?」としてあるようなら
レポートのレポートヘッダーにでも非連結のテキストボックスを配置。
そのデータタブのコントロールソースに、
=[いつ?]
名前を、Txtパラメータ とか適当につけます。
このコントロールは、可視に、いいえ で非表示にしておきます。
で、お手本の確認用コードを変更して

Private Sub Report_Close()
dim sSql as String
sSql="UPDATE テーブル名 SET 印刷年月日=#" & Me!txtパラメータ & "# WHERE 受付日=#" & Now & "#"

If IsPrintOut Then
currentdb.execute ssql,dbfailonerror
Else
MsgBox "プレビューのみです。"
End If
End Sub

のような・・では?
この回答への補足あり
    • good
    • 0
この回答へのお礼

nicotinismさま

おはようございます。そして、ご回答をありがとうございます。
今か今かとずっと待っていたので、すぐに試してみました。
添付画像のクエリの種類を「更新」に変更して、続きをそのとおりにしてみたのですが、
【アクションクエリをデータソースとして使用できません】と断られてしまいました。
「更新」を「選択」に戻して、動かしてみると、今度は、
【式が正しく入力されてないか、複雑すぎるために評価できません】と断られてしまいました。

画像のとおり、元のテーブルの発送年月日に、印刷年月日が印刷タイミングで自動入力されていたいです。
新規受付日と発送年月日は、異なります。

先日から、助けて頂いていて、感謝しております。
すごくわかりやすいご回答で、ありがたく、うれしい気持ちです。
何卒よろしくお願いいたします。

お礼日時:2016/07/17 09:52

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す