質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

4025閲覧

access イベントの変更

yama0131

総合スコア16

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2020/02/26 08:24

編集2020/03/02 00:25

前提・実現したいこと

accessでテキストボックスに日付を入力した際にイベントの変更時処理でRequeryを実行して、
フォーム内のデータを更新したいと考えています。

現状は更新後処理で動いているものの、エンターや画面外をクリックしないと更新されないため不便に感じています。
日付が変わったら更新されるようにしたいと考えています。

追記
現状は日付にカレンダーを表示させて、そこをクリックして日付を表示させることが多いです。
なので、カレンダーをクリックして日付が変わったタイミングでrequeryが実行したいです。

発生している問題・エラーメッセージ

該当のソースコード

VBA

1Private Sub 日付_Afterupdate() 2 DoCmd.SetWarnings False 3 4 Me![年] = Format(Me.日付.Value, "yyyy") 5 Me![月] = Format(Me.日付.Value, "mm") 6 Me![日] = Format(Me.日付.Value, "dd") 7 8 Me![日報サブ].Requery 9 10 DoCmd.SetWarnings True 11End Sub

VBA

1Private Sub 年_Afterupdate() 2 DoCmd.SetWarnings False 3 4 nengappi = Me![日付] 5 Me!日付.SetFocus 6 Me!日付.Value = nengappi 7 8 Me![日報サブ]![製造品].Requery 9 End If 10 11 DoCmd.SetWarnings True 12End Sub

VBA

1Private Sub 日付_change() 2 DoCmd.SetWarnings False 3 4 Dim s As String 5 s = Me.日付.Text 6 If Not IsDate(s) Then Exit Sub 7 8 Me![年] = Format(s, "yyyy") 9 Me![月] = Format(s, "mm") 10 Me![日] = Format(s, "dd") 11 12   13 nengappi = Me![日付] 14 Me!日付.SetFocus 15 Me!日付.Value = [Forms]![日報入力画面]![年] & "/" & [Forms]![日報入力画面]![月] & "/" & [Forms]![日報入力画面]![日] 16 17 Me![日報サブ].Requery 18 19 DoCmd.SetWarnings True 20End Sub

試したこと

イベントをchangeに変更したがうまく動作しない。

補足情報(FW/ツールのバージョンなど)

access2016

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2020/02/26 10:51 編集

> 現状は更新後処理で動いているものの、エンターや画面外をクリックしないと更新されないため不便に感じています。 Windowsの一般的なユーザーインターフェースは、Enterキー、あるいはフォーカス移動でというのが入力欄を確定する動作ですが、そうでない動作にしたい理由はなんでしょうか。 入力者がいつ入力を完了したかを確定するには、なんらかのきっかけが必要です。
hatena19

2020/02/26 11:38

サブフォームをRequeryしてますが、メインフォームとサブフォームの関係はどうなってますか。 メインフォームのレコードソースのテーブルのフィールド構成、 サブフォームのレコードソースのテーブルのフィールド構成はどうなってますか。
guest

回答2

0

ベストアンサー

一つの案です。

日付テキストボックスのプロパティを下記のように設定します。

プロパティ設定値
定型入力0000/00/00;0;_
自動タブはい

これで日付テキストボックスに、今日の日付なら
20200227
というように8桁の数字を入力すると自動的に次のコントロールへ移動して、Afterupdateイベントが発火します。


Changeイベントで処理したいのなら、下記のような感じで。

vba

1Private Sub 日付_Change() 2 Dim s As String 3 s = Me.日付.Text 4 If Not IsDate(s) Then Exit Sub 5 6 Me![年] = Format(s, "yyyy") 7 Me![月] = Format(s, "mm") 8 Me![日] = Format(s, "dd") 9 10 Me![日報サブ].Requery 11End Sub

Changeイベントで入力中のテキストを取得するのは Textプロパティ。
IsDateでテキストが日付かどうか判断して日付のときだけ処理する。

ただし、これだけだと、2020/02 と入力した時点で日付と判断されるので、
入力するフォーマットを限定して条件を追加したほうがいいかもしれない。

自分なら、最初の案のほうを採用します。


追記

現状は日付にカレンダーを表示させて、そこをクリックして日付を表示させることが多いです。
なので、カレンダーをクリックして日付が変わったタイミングでrequeryが実行したいです。

それなら、上の後者のChangeイベントの方法でご希望の動作になります。

投稿2020/02/27 08:09

編集2020/03/01 14:31
hatena19

総合スコア33782

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yama0131

2020/02/29 13:08

ご回答ありがとうございます。 試してみます!
yama0131

2020/03/01 14:05

後者のchangeイベントでやってみたのですが、日付をカレンダーから選択をすると日付自体は変わるものの、一度カレンダーの外をクリックしないと動きませんでした。 加えて選んだ日付からひとつ前の日付のデータが出力されました。
hatena19

2020/03/01 14:12

「日付にカレンダーを表示させて、」というのは、テキストボックスの「日付選択カレンダー」プロパティを「日付」に設定しているということですよね。 当方でサンプルを作成して動作確認してますが、カレンダーで選択すると同時に日付が変更されて、年、月、日のテキストボックスも変更されます。 回答のコードと実際のコードに違いがないか確認してみてください。
yama0131

2020/03/01 14:24

おっしゃる通り日付選択カレンダーを使っています。 コード内の  s = Me.日付2.Text の日付2となっている部分は日付とは別のテキストボックスを参照にしているのでしょうか?
hatena19

2020/03/01 14:31

そこは、間違っていました。 s = Me.日付.Text に修正してください。 回答も修正しておきます。
yama0131

2020/03/01 14:52

私もテキストボックス自体は変更されていたのですが、Requeryがうまくできていないようでした。 人が作ったものを知識がないまま触っているので正直なところどう聞けばいいか分からないです。。。 日付に関連している年月日も同じようにChangeとTextに変えるべきなのでしょうか?
hatena19

2020/03/01 14:58

年、月、日のテキストボックスのイベントはたぶん関係ないと思います。 質問にサブフォームの設定に関する情報がないので、提供されている情報からは原因を特定するのは難しいです。 少なくとも下記の情報が必要です。 サブフォームコントロールの「リンク親フィールド」「リンク子フィールド」の設定、 サブフォームのコントロールソースの設定、
yama0131

2020/03/01 23:58

サブフォームのリンク親フィールドとリンク子フィールドは設定していません。 コントロールソースは設定をする場所が見つかりませんでした。
hatena19

2020/03/02 00:07

コントロールソースではなくレコードソースでした。 サブフォームのレコードソースを提示してください。 サブフォームコントロールとサブフォームは異なりますので、違いが分からない場合は下記を参照してください。 https://hatenachips.blog.fc2.com/blog-entry-347.html
hatena19

2020/03/02 00:09

あと、メインフォームにコマンドボタンを配置して、そのクリック時のイベントプロシージャに下記のコードを記述して、 Me![日報サブ].Requery カレンダーで日付を変更した後、このコマンドボタンをクリックしたときに、サブフォームの内容は期待した結果になりますか。
yama0131

2020/03/02 00:27

日付にフォーカスをして、テキストボックスの年月日を値として反映させたらできました。 コマンドボタンをクリックした際にはサブフォームは更新されていました。 色々とありがとうございました。
guest

0

>イベントをchangeに変更したがうまく動作しない。

ソースコードのみを弄ってもダメです。
プロパティシートの「変更時」の欄を[イベント プロシージャ]にする必要があります。

投稿2020/02/26 12:17

iruyas

総合スコア1067

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yama0131

2020/02/29 13:08

ご回答ありがとうございます。 一応そちらも変更していたのですが、ただ変えるだけだとうまく動作してくれないみたいでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問