Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルコンボボックスの変更前データ保持について
記事No172230
投稿日: 2018/04/15(Sun) 14:11
投稿者こう
解決済: ON
OS:Win10
Access Version:2013

お世話になります。
フォームに複数combobox1 combobox2 combobox3が設置されています。
いずれのコンボボックスもキー列を表示させずにテキスト列を表示させています。

すべてのコンボボックスに対し、gotfocusイベントでPre_Changeという変数にColumn(1)をセット(ここは事情によりキーを保持せずテキストを保持させています。)
コンボボックスのAfterApdateイベントで、変更後の値をPost_Changeという変数にセットしています。
また、変更せずにLostFocusした際は、変数をすべてクリアするという形を作っています。

この形ですと、3つのコンボボックスに対し、3個ずつのイベントをVBAで書いている状態なのですが、これをシンプルにまとめる術が私にはわからない状態です。

フォームのすべてのコントロールに対して同じ処理をしたい場合はForEach構文が使えると調べはしました。すべてのコントロールに対してではなく、特定の変更されたコンボボックスに対しての処理になりますので、ForEachでは的外れかな、との気もしています。

方法をご教示いただけませんでしょうか?よろしくお願いいたします。

タイトルRe: コンボボックスの変更前データ保持について
記事No172232
投稿日: 2018/04/15(Sun) 15:49
投稿者hatena
解決済: ON
> すべてのコンボボックスに対し、gotfocusイベントでPre_Changeという変数にColumn(1)をセット(ここは事情によりキーを保持せずテキストを保持させています。)
> コンボボックスのAfterApdateイベントで、変更後の値をPost_Changeという変数にセットしています。
> また、変更せずにLostFocusした際は、変数をすべてクリアするという形を作っています。

更新前のデータと更新後のデータを取得したいということ目的ですよね。

このフォームは連結フォームですか、非連結フォームですか。
連結フォームなら、
更新前のデータはOldValueプロパティで、更新後はValueプロパティ取得できますが、
それではだめですか。


それとも、非連結フォームですか。
その場合、
Pre_Change と Post_Change という変数に格納とのことですが、
各コンボ毎の値を保持しなくていいのですか。
それとも、コンボボックスの数だけ変数も用意するということでしょうか。

また、その変数の値を後でどのように利用するのですか。


> この形ですと、3つのコンボボックスに対し、3個ずつのイベントをVBAで書いている状態なのですが、これをシンプルにまとめる術が私にはわからない状態です。

イベントプロシージャでなく、Functionにして、
イベントのプロパティに
=Function名()
とする方法はあります。

ただ、その前に上記の私の質問に回答ください。
もっといい方法があるかも知れません。

タイトルRe^2: コンボボックスの変更前データ保持について
記事No172234
投稿日: 2018/04/15(Sun) 18:19
投稿者こう
解決済: ON
ありがとうございます。

> 更新前のデータと更新後のデータを取得したいということ目的ですよね。
その通りです。
> このフォームは連結フォームですか、非連結フォームですか。
> 連結フォームなら、
> 更新前のデータはOldValueプロパティで、更新後はValueプロパティ取得できますが、
> それではだめですか。
連結フォームです。
主キーのふってあるコンボボックスを変更することでColumn(0)が変更されるのですが、別テーブルにADO接続し。AddNewで前後値をテキストで流し込みたいのです。(ここのコードはできています)
OldValueで最初作ったところ、Pre_ChangeにColumn(0)が格納されてしまってどうにもうまくいかなかったのですが。Column(1)のテキストをOldValueにセットすることは可能なのでしょうか?

タイトルRe^3: コンボボックスの変更前データ保持について
記事No172235
投稿日: 2018/04/16(Mon) 12:27
投稿者hatena
解決済: ON
> 主キーのふってあるコンボボックスを変更することでColumn(0)が変更されるのですが、別テーブルにADO接続し。AddNewで前後値をテキストで流し込みたいのです。(ここのコードはできています)
> OldValueで最初作ったところ、Pre_ChangeにColumn(0)が格納されてしまってどうにもうまくいかなかったのですが。Column(1)のテキストをOldValueにセットすることは可能なのでしょうか?

OldValueにしろValueにしろ連結列のデータが入ります。
連結列を2にすれば2列目が、OldValue、Value になりますが、これはたぶんまずいですよね。

通常、コンボボックスは、価集合ソースをマスターテーブルにして、主キーフィールドを連結列にする設計になると思います。
その場合、私なら、DLookup関数で取得します。

Res = DLookup("取得したいフィールド名","マスターテーブル名","主キーフィールド=" & Me.combobox1.OldValue)

タイトルRe^4: コンボボックスの変更前データ保持について
記事No172238
投稿日: 2018/04/16(Mon) 22:07
投稿者こう
解決済: ON
> OldValueにしろValueにしろ連結列のデータが入ります。
> 連結列を2にすれば2列目が、OldValue、Value になりますが、これはたぶんまずいですよね。
>
> 通常、コンボボックスは、価集合ソースをマスターテーブルにして、主キーフィールドを連結列にする設計になると思います。
> その場合、私なら、DLookup関数で取得します。
>
> Res = DLookup("取得したいフィールド名","マスターテーブル名","主キーフィールド=" & Me.combobox1.OldValue)

DlookUPで連結列以外のColumnの値がゲットできるのですね。
当てはめて書いてみたら、希望通りの動作をしてくれました。ありがとうございます。
ありがとうございました。もっと勉強します。

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る