Microsoft Access 掲示板

帳票フォームでの画像表示ついて

4 コメント
views
4 フォロー

https://hatenachips.blog.fc2.com/?no=362#comment
こちらの記事を読ませていただき、使っていたのですが
フォームに日付コントロールを設置し、日付の更新後処理をできるように
http://hiroses.seesaa.net/article/397791059.html
を参考に開発したのですが、

Me.Refreshをすると、画像が一旦非表示なってしまいます。

色々確認したのですが、どうやら、コントロールソースが"="で始まるんものは
全て、一旦非表示になってしまいます。

単票フォームの場合は、非連結でvbaでコントロールソースを設定することで画像が非表示にならずに
ずっと表示されています。

問題はやはり帳票のようです。
vbaで設定すると、昔のように全て同じ画像になってしまいます。
レコード移動時に全てが同じく変わるというようになります。

何か、良い方法は、ないでしょうか?
最悪、日付はコンボボックスにすれば更新後処理でも帳票の画像は非表示になる事なくずっと表示されてるままなのですが・・・
やはり、カレンダーで入力させたいので・・・

よろしくお願いいたします。

アラレ
作成: 2024/04/24 (水) 16:25:23
通報 ...
1

そもそもMe.Refreshをする必要性が分からないのですが、なんのために必要なのでしょうか。

リンク先の説明では、日付選択カレンダーで日付を選択した瞬間に「更新後処理」イベントを実行したいということのようですが、そのために Me.Refresh は目的と手段があっていないように思います。
Refresh はカレントレコードの更新をテーブルに反映させて(=レコード保存)、かつ、テーブルデータを再読込するということですが、その必要性があるでしょうか。(再読込するので一旦非表示になる)

「更新後処理」プロシージャを実行したいのなら、それをCallすれば済む話です。

リンク先のコードなら、下記でいいとおもうのですが。

Private Sub txt_date_Change()

    'キー入力フラグがfalseのときはフォーム入力値を確定する
    If Me![chk_date] = False Then
        'Me.Refresh
        Call txt_date_AfterUpdate()
    End If

End Sub

もし、日付選択カレンダーで日付を選択した瞬間にレコード保存(?)したいのなら、下記でいいですし。
(再読込はしないので非表示にはならない)

Private Sub txt_date_Change()

    'キー入力フラグがfalseのときはフォーム入力値を確定する
    If Me![chk_date] = False Then
        DoCmd.RunCommand acCmdSaveRecord
    End If

End Sub
2
アラレ 2024/04/25 (木) 11:20:03 000c5@8dc8e

おはようございます。
ご返信ありがとうございます。
http://hiroses.seesaa.net/article/397791059.html
上記のサイトでは
日付選択カレンダーで日付を選択した瞬間にイベントを走らせる事ができないので
Me.Refreshを入れていると思います。
詳しくはわからないのですが・・・

    'キー入力フラグがfalseのときはフォーム入力値を確定する
    If Me![chk_date] = False Then
        'Me.Refresh
        Call txt_date_AfterUpdate()
    End If

こちらを試してみたのですが、日付を選択した瞬間には発生しなかったでした。
フォーカスが移動した瞬間には発生します。

色々ググってみてはみたのですが、日付カレンダーはで日付を選択した瞬間は、イベントが発生しないみたいです。

3
アラレ 2024/04/25 (木) 11:26:12 000c5@8dc8e

追記です。
    'キー入力フラグがfalseのときはフォーム入力値を確定する
    If Me![chk_date] = False Then
        DoCmd.RunCommand acCmdSaveRecord
    End If

こうする事で、日付を選択した瞬間にイベントが発生することができました。
保存したいとか、そういう理由はありませんが、そこで保存したことによって
問題もないですし、イメージ通りに動くことができたのでよかったです。
ありがとうございました。

4

日付選択カレンダーで日付を選択した瞬間にイベントを走らせる事ができないので
Me.Refreshを入れていると思います。

日付を選択した瞬間にイベントを走らせるのに、Me.Refresh をするというのは目的のための道具の選択が適切でないということです。

例えると、大根を切るのに適切な道具は、包丁ですが、チェーンソーを持ち出して切る、というイメージです。