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

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

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

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

Access

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

Q&A

解決済

1回答

1292閲覧

ACCESS VBA フォーム入力時に、データベースの情報を、テキストボックスに引用する方法

YISS

総合スコア14

VBA

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

Access

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

0グッド

0クリップ

投稿2020/11/21 08:05

編集2020/12/01 06:13

Accessにて、下記の様な在庫数を管理するフォームを作成しています。

イメージ説明
(当初は非連結でテキストボックスを配置していましたが、その後写真の通りに連結型に変更しました)

データベースは2種類作成しました。
①商品マスタのデータベース(商品マスタID(オートナンバー、主キー)/名称1/名称2/図番1/図番2/メーカー等・・・)
②在庫数の変動を記録するデータベース(在庫数ID(オートナンバー、主キー)/商品マスタID/日付/入庫or出庫/数量/担当者/備考)

【やりたいこと】
IDのテキストボックス横に、マスタ検索ボタンを配置し、それを押すと
ウィンドウorサブフォームにて、商品マスタのデータベースが検索でき、
その検索結果から一つのレコードを選択すると、
上記画像のフォームに戻り、選択したID、品名、品番が自動で入力されている

【追記】
商品マスタの帳票フォームを作成し、コマンドボタンをクリックすると、
該当のカレントレコードの商品IDが上記フォームのIDに代入されるようにしたいのですが、
クリック時のコードはどのように書いたらよろしいでしょうか?
⇒解決しました。ありがとうございます。

ご教授よろしくお願いします。

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

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

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

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

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

sazi

2020/11/22 01:56

いきなり作り始めて質問するのではなく、Accessでどんなことができるかを試してから、作り始めると良いと思います。 試すために参考になるサイトは幾らでもあります。 試す過程での質問だと効率のいい遣り取りになります。 ここは質問サイトであって、教育サイトではありません。
YISS

2020/11/24 09:00

返答遅くなりすみません。 仰る通りだと思います。今後気を付けます。
guest

回答1

0

ベストアンサー

まずはテーブルを正規化しましょう。
データベース設計においては必須です。

「商品マスタ」テーブル
フィールド
商品ID 主キー
品番
品名
メーカー
・・・

「入出庫履歴」テーブル
フィールド
入出庫履歴ID オートナンバー型 主キー
商品ID
日付
入庫or出庫
数量
担当者
・・・

「入出庫履歴」テーブルには品番、品名は不要です。


初心者ということならまずは連結フォームの使い方を習得してから、
それで不満や不足があるときに非連結フォームを検討するという順番がいいでしょう。

テーブルの正規化がすんだら、2つのテーブルを連結したクエリを作成します。
クエリを新規作成してテーブル「商品マスター」「入出庫履歴」を追加して「商品ID」フィールド同士で結合します。
各テーブルから必要なフィールドを表示させますが「商品ID」は「入出庫履歴」のものを表示させます。

上記のクエリを現状のフォームのレコードソースにします。
各テキストボックスのコントロールソースには対応したフィールドを設定します。
品名、品番のテキストボックスの「編集ロック」は「はい」にして編集できないようにしておきます。
(マスターの値が不用意に更新されないようにするため)
これで、商品IDを入力すると商品マスターから、品名、品番を引っ張ってきて自動表示されます。

フォームを開いたときに新規データの入力にしたいときは「データ入力」プロパティを「はい」にしておきます。
そのほか、いろいろな設定がプロパティでできますので研究してみてください。

IDのテキストボックス横に、ボタンを配置し、それを押すと

ウィンドウorサブフォームにて、商品マスタのデータベースが検索でき、
その検索結果から一つのレコードを選択すると、
上記画像のフォームに戻り、選択したID、品名、品番が自動で入力されている

これに関しては別フォームを表示するという方法もありますが、コンボボックスを使うという方法も検討されてはどうでしょうか。

下記で、コードでも名称でも入力できるコンボボックスというのを紹介しています。これを使うと、
商品IDが分かっているときは、商品ID、分からないときは商品名で入力という使い方ができます。

コードでも名称でも入力できるコンボボックス - hatena chips

別フォームでという場合は、商品マスターから帳票フォームを再生してそこにコマンドボタンを配置してそのクリック時でカレントレコードの商品IDを入力フォームの商品IDに代入すればいいでしょう。

追記

商品マスタの帳票フォームを作成し、コマンドボタンをクリックすると、

該当のカレントレコードの商品IDが上記フォームのIDに代入されるようにしたいのですが、
クリック時のコードはどのように書いたらよろしいでしょうか?

下記になります。フォーム名やコントロール名は実際のもの合わせてください。

vba

1Private Sub コマンド1_Click() 2 Forms!入力フォーム!ID.Value = Me.ID.Value 3 Docmd.Close 4End Sub 5

投稿2020/11/21 08:56

編集2020/11/30 04:25
hatena19

総合スコア33715

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

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

YISS

2020/11/21 09:11

②テーブルの品番、品名は削除し、質問文修正しました、 仰る通り、かなりの初心者です。時々、見当違いなこと言ってしまうかと思います。すみません。。
YISS

2020/11/30 00:55

返信が遅くなり申し訳ありません。 > 下記で、コードでも名称でも入力できるコンボボックスというのを紹介しています。これを使うと、 > 商品IDが分かっているときは、商品ID、分からないときは商品名で入力という使い方ができます。 これを試してみたいのですが、どちらを参照したらよろしいでしょうか?
hatena19

2020/11/30 01:19

リンクをはるのを忘れてました。回答にリンクを追加しておきました。ご参照ください。
YISS

2020/11/30 03:11

リンクありがとうございます。 色々検討してみたのですが、商品マスタが何千件とあるので、 >別フォームでという場合は、商品マスターから帳票フォームを再生してそこにコマンドボタンを配置してそ>のクリック時でカレントレコードの商品IDを入力フォームの商品IDに代入すればいいでしょう。 こちらの方法で進めてみたいと思います。 帳票フォームは作成したのですが、カレントコードの値を、別のフォームに入力するコードで躓いてしまったので、再度質問事項を修正させて頂きました。
hatena19

2020/11/30 04:18

最初の質問は消さずに、追加の質問事項を追記するようにしてください。 消した内容は履歴に残ってますので、それをもう一度戻してから、追加分を追記してください。 後から、見た人が意味が分からなくなりますので。 追加の質問の回答は、追記しておきます。
YISS

2020/11/30 07:07

すみません。修正しつつ、追加の質問事項を記入しました。
hatena19

2020/11/30 07:17

そこまでくると最初の質問とはまったく別の質問になってますので、今回追加した質問は別に新規質問として投稿してください。 で、この質問は解決済みにしてください。
YISS

2020/12/01 05:15

そうですね。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問