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

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

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

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

Q&A

解決済

1回答

1628閲覧

Access テーブルのルックアップの設定をVBA上で行いたい

hfnkmr

総合スコア5

Access

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

0グッド

0クリップ

投稿2020/02/05 01:12

AccessのVBA上でCreateTableし、
そのテーブルに対してルックアッププロパティにあるの値集合ソースを設定することはできますでしょうか?

よろしくお願いします。

Access 2019
Windows 10 Pro

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

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

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

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

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

guest

回答1

0

ベストアンサー

テーブルのフィールドのルックアッププロパティは便利な機能ですが、データベース設計とは別なものなので、VBAでCreateTableするような処理とは馴染まないと思います。ユーザーにテーブルに直接入力させることはないですよね。

入力フォームを作成してそちらでコンボボックスを配置して値集合ソースを設定するのが順当な設計だと思います。(ユーザーにテーブルを直接操作させるのは危険です。)

もし、テーブルに設定する合理的な理由があるなら、DAOで設定することはできます。

投稿2020/02/05 01:42

hatena19

総合スコア34075

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

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

hfnkmr

2020/02/05 02:01 編集

>もし、テーブルに設定する合理的な理由があるなら、DAOで設定することはできます。 現在別々に動いていたシステム(ここではAとBとします)を1つにする作業を行っています。 1つにする中でBではテーブルを直接操作してメンテナンスを行っていたようで、入力フォームも作成しますが、もともと行えていた操作は変わらずできるようにして欲しいということでした。 テーブルを新たに作成することも考えましたが、Bではオートナンバーでレコードを管理していたため、下手にテーブルを作成しなおしてオートナンバーの値を変えたくないという思いがありVBAで行いたいと考えています。 質問の回答外でも、このようにしたらよいのではないか等有りましたらご指導いただけますと幸いです。 よろしくお願いします。
hatena19

2020/02/05 02:14

> 現在別々に動いていたシステム(ここではAとBとします)を1つにする作業を行っています。 > 下手にテーブルを作成しなおしてオートナンバーの値を変えたくないという思いがありVBAで行いたいと考えています。 質問ではCreateTableしたテーブルにという話でしたが、話が変わってませんか。 システムの設計変更の話ですか。それをVBAでするの? 話が見えません。
hfnkmr

2020/02/05 02:37

2つの話が混在してしまい申し訳ありません。 まず、CreateTableの話について 1つにするにあたってBの中のテーブルを全てAに移動するのですが、いくつかのテーブルのテーブル構造がかわるため、以下の流れでデータを移行しようと考えています。 ①Aに新しいテーブルをCreateTableする。 ②Bのデータから必要なデータを作成したテーブルにInsertする。 このままではデータは移行できますが、移行元のBのテーブルで設定されていたルックアッププロパティが引き継がれないため、CreateTable後にVBAから追加できないかと考えました。 次に、オートナンバー云々の話について オートナンバーを持つテーブルについてはSELECT INTOを利用してデータを移行しようと考えているのですが、ここもルックアッププロパティが引き継がれないため後から設定する必要があり、VBA上からできないかと考えています。 以上を踏まえると今回の質問としては「現在存在するテーブルのルックアッププロパティをVBAから変更したい」というのが正しかったです。 わかりにくくなってしまい申し訳ありませんでした。
hatena19

2020/02/05 02:47

> ①Aに新しいテーブルをCreateTableする。 はいいとして、1回だけのことですよね。設定内容はテーブルごとに異なるはずなので、共通化できるわけでもないので、VBAでやる必然性が見えません。 私自身はやったことがないですが、下記のリンク先にサンプルコードがあります。 テーブルのフィールドプロパティにある、ルックアップの設定方法 http://accessclub.jp/bbs5/0018/vba5365.html
hfnkmr

2020/02/05 02:53

>> ①Aに新しいテーブルをCreateTableする。 >はいいとして、1回だけのことですよね。設定内容はテーブルごとに異なるはずなので、共通化できるわけでもないので、VBAでやる必然性が見えません。 実際のデータを私自身が持っておらず、現地でボタン一つでデータ移行を行えるようにする必要がありました。 紹介していただいた方法を試してみようと思います。 ありがとうございます。
hatena19

2020/02/05 02:56

> 実際のデータを私自身が持っておらず、現地でボタン一つでデータ移行を行えるようにする必要がありました。 私がするならテーブルは作成しておいて、現地ではデータ移行のみにするかな。
hfnkmr

2020/02/05 02:59

>私がするならテーブルは作成しておいて、現地ではデータ移行のみにするかな。 オートナンバーさえ何とかなれば私もそうしたいのですが…。 あらかじめテーブルを作成しておくとして、オートナンバーを変えずに移行する方法などをご存じでしたら教えていただければ幸いです。
sazi

2020/02/05 03:26 編集

>下手にテーブルを作成しなおしてオートナンバーの値を変えたくない オートナンバーであっても値を指定できないわけではないですよ。 移行元からそのままオートナンバー部分も移送すればいいだけです。 オートナンバーはその値が指定されなかった場合に、管理している最終番号+1を自動で設定してくれる機能ですから。 注意点としては、テストなどで何度も追加して番号がずれるような場合は、最後にリセットを行う必要があります。
hatena19

2020/02/05 03:14 編集

空のテーブルに追加クエリで、データ追加すればオードナンバーもそのまま追加できますが。 システムの改修作業は、私は下記のような感じでおこないます。 まず、テスト環境で、システムのテーブルの設計変更や追加を行う。 サンプルデータで動作確認する。 サンプルデータは削除して、テーブルは空にしておく。 現地で、新システムに、旧システムからデータを追加クエリ等で取り込む。
hfnkmr

2020/02/05 04:06

ずっとオートナンバーは必ず振りなおされてしまうものと思い込んでいましたが違ったのですね。 あらかじめテーブルを作成し、現地でクエリを流す形で作成したいと思います。 お二方とも教えてくださりありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問