Microsoft Access 掲示板

サブフォームのタイマーイベント

8 コメント
views
4 フォロー

お世話になっております。メインフォームの検索によってサブフォームにデータを表示しています。
| 伝票番号 | 工程    | 注文番号  | 品名     | 数量    | 納期      | 備考    |
| -------- | --------- | --------- | ---------- | -------- | ---------- | -------- |
| 001     | A工程   | 注文1     | 品名A    | 100     | 22/01/25 |         |
| 002     | B工程   | 注文2     | 品名B    |  50     | 22/02/01 |         |
| 003     | C工程   | 注文3     | 品名C    | 200     | 22/01/27 |         |
| 004     | D工程   | 注文4     | 品名D    | 300     | 22/01/29 |         |
各工程ごとに背景色が変えてあります。
このとき 納期が当日(22/01/28)より前ならば 納期のコントロールを点滅したいです。
(表示されているデータでは 22/01/25,22/01/27 を点滅したい。)
サブフォームでタイマーイベントは使えるのでしょうか?
よろしくお願いします。

すー
作成: 2022/01/28 (金) 15:23:26
最終更新: 2022/01/28 (金) 15:57:07
通報 ...
1
hiroton 2022/01/28 (金) 16:55:10 17ac2@f966d

サブフォームもフォームです。適切にプロパティを設定すればその通り動作します


親フォームのタイマーイベントでサブフォームのコントロールを弄るということもできますが、今回の例ではそうすることもないでしょう

2
すー 2022/01/28 (金) 17:18:25 cd14b@b9210

hirotonさま 返信ありがとうございます。
サブフォームのモジュールに

Private Sub Form_Open(Cancel As Integer)
    Me.TimerInterval = 1000

End Sub

Private Sub Form_Timer()
    
    If Me!納期 < Date Then

            If Me!納期.ForeColor = RED Then
                Me!納期.ForeColor = DARKYELLOW
            Else
                Me!納期.ForeColor = RED
            End If
    End If

End Sub

と記述しましたが、サブフォームの1件目の納期を参照しているようで
全ての納期のコントロールが同じ動きをしてしまいます。
どのように記述すればよいのでしょうか?

3
hatena 2022/01/28 (金) 23:14:01 修正

各工程ごとに背景色が変えてあります。

これはどのように実現していますか?
帳票フォームでレコード毎に背景色を変更するのは、条件付き書式しかないですが。

点滅させるなら、その条件式を変更することになります。

現状の条件付き書式の設定を提示してもらえますか。

7

hatenaさま 返信ありがとうございます。
背景色は条件付き書式で設定しています。
帳票フォームの最背面にテキストボックス(非連結)を作り
ルールの内容を式にして
[工程]="A工程" のとき 背景色を青 のようにして7工程設定してあります。 

4
hiroton 2022/01/29 (土) 19:28:06 9b9bd@68800

タイマーイベントは単純に時間ごとにイベントを実行するだけ。その挙動(すべてのレコードのコントロールが同時に変更される)は帳票フォームの仕様ですね


基本事項の確認ですが、コントロールの「見た目」はいくつかの要素からなっています
・背景色
・前景色
・枠線(スタイル/色)

hatenaさん指摘の通り、背景色前景色であれば条件付き書式を切り替えれば実現できるでしょう。枠線もやりたいとなると案がないこともないですが、そこまでする?って感じです


さて、条件付き書式を変更すれば点滅できそうだ、となりましたが、hirotonは条件付き書式が好きではありませんし、VBAでいじるのは大変です。条件付き書式を使わずにレコードごとに書式を設定する方法を使うと楽ができそうです

カレント行の背景色の変更 その3(hatena chipsさん)

hatenaさんのブログですね。記事では背景色ですが、前景色も同じ考え方で実装できます
背景色に適用したい場合
メインのコントロール>背景色:透明コントロールの配置:前面
書式設定用コントロール>背景色:本来の背景色、コントロールの配置:背面

前景色に適用したい場合
メインのコントロール>背景色:本来の背景色、コントロールの配置:背面
書式設定用コントロール>背景色:透明コントロールの配置:前面

納期コントロールにぴったり重なる点滅用納期テキストボックスを配置します
コントロールソース:=IIf([納期]<Date,[納期])
背景色:透明
前景色:本来の背景色(※1)

このコントロールを表示したり消したりすれば特定のレコードのコントロールだけ点滅しているように見えます

Private Sub Form_Timer()
    Me!点滅用納期.Visble = Not Me!点滅用納期.Visble
End Sub

注意事項として、前面のコントロールなので普通に触れます。フォーカスがあるときにコントロールを消そうとするとエラーになります。触れないコントロールにするか、即座に納期.Setfocusするような仕掛けが必要でしょう

※1
本来の背景色と同じ色のテキストを前面に配置する≒背景と同化して見えなくなる。です。「文字を消す」ことが目的なら背景色のテクニックで完全にかぶせてしまってもいいですね。前景色でやると、調整によって薄めの文字との点滅とかができたりします

6
hiroton 2022/01/31 (月) 09:12:18 53823@f966d >> 4

改めて考えてみたら条件付き書式を弄るのは大変ですが、条件を弄るのは簡単でした

チェックボックスを配置する(名前:点滅用)

Private Sub Form_Timer()
    Me!点滅用 = Not Me!点滅用
End Sub

条件付き書式の条件を調整する
ex)

書式設定:式
   式:[納期]<Date() And [点滅用]

これでタイマーごとに条件付き書式が反映される/されないを繰り返すので点滅してるように見えると思います

コントロールがチェックボックス一つで済む(位置・表示不問)なのでこっちのほうが楽そうです。点滅させたいコントロールが多いなら断然ですね


hirotonが条件付き書式を好きでないのはスクロールバーを掴んでいると反映されないからという理由があったりします

5
りんご 2022/01/30 (日) 15:22:41 c564b@0e907

 メインフォームの検索条件を増やせば済むようにも見えますが。話題作りとしては、導出フィールドを作って何か出来ないか、なんてどうでしょう。
 工程別に色を変え失敗したものを強調したら、次はどうしますか。例えば、期限間近のものに音を鳴らしたり、数量が大きいものを立体的にしたり、手間と時間を見た目に費やすのでしょうか?
 そういえば、期限を過ぎたものって、データベースでどういう扱いになるのでしょうか。それから、工程フィールドは別に切り出さないの?

8
すー 2022/02/02 (水) 10:06:42 cd14b@b9210

皆様 返信ありがとうございます。
hirotonさまに提示していただいた

Private Sub Form_Timer()
    Me!点滅用納期.Visble = Not Me!点滅用納期.Visble
End Sub

の方法がうまくいきそうです。
ありがとうございました。