Microsoft Access 掲示板

1つにまとめられますか?

22 コメント
views
4 フォロー

御世話になります。
テーブル B1_在庫品マスター に フィールド 品名ID メーカー名 品名 品番 自社コード JANコード があります。品名IDはオートナンバー型で主キーに設定されています。
自社コードは数値型で連番で製品全てにふられています。 JANコードはテキスト型でコードがわかる物だけ入力されています。
このような状態で添付図のようなフォームを作成し
JANコード が入力されたら 品名ID メーカー名 品名 ・・・
自社コード が入力されたら 品名ID メーカー名 品名 ・・・  と表示できるようにつくってみましたが
場所を取ってしまうので 品名ID メーカー名 品名 ・・・の部分を1つにすることはできないものでしょうか?
 フォームは入出庫台帳を元につくったクエリです。
また、オレンジの部分はコードを入力するテキストボックスは非連結です。

igaguri
作成: 2019/05/09 (木) 20:10:42
通報 ...
1

添付図が表示されてないので、よく分かりません。

投稿欄の下のツールバーの画像アップロードボタンをクリックして、ファイルを選択ボタン(クリップマーク)をクリックしてファイルを選択してから、アップロードボタンをクリックしてください。

画像1

2
igaguri 2019/05/09 (木) 23:46:43 32a1e@d14a6

すみません。添付したつもりだったのですが・・・。画像1

3
kitty 2019/05/10 (金) 09:55:48 48996@ee322

品名ID、メーカー名、品名 がコンボボックスになっているということは、こちらかも選択できるようにということでしょうか。
また、コードとコンボボックスが上下2行になってますが、2行にする必要がありますか。
結局、選択する商品は一つなので1行で十分ではないですか。

私なら、下記で紹介している方法で、
JANコードでも、自社コードでも、品名でも、選択できるようにします。

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

あと、メーカー名を選択したら、他のコンボボックスのリストをそのメーカーの商品だけに制限するという設計にします。
下記が参考になるでしょう。

Accessのマクロで2つのコンボボックスを連動させる方法 | できるネット

4
igaguri 2019/05/10 (金) 12:32:21 32a1e@d14a6

ありがとうございます。
紹介の コードでも名称でも入力できるコンボボックス - hatena chips
を使ってコンボボックスをつくって品名IDが出てくるようにしてあります。ただコントロールソースの値を
上の段は =JANコード
下の段は =自社コード
にしてあるのでもう一度見てやってみようと思います。
JANコードは未登録のれこーどがあっても大丈夫なモノなのでしょうか?
そこがとっても心配で・・・。

5
名前なし 2019/05/10 (金) 15:05:24 8524d@f9cf6

品名ID メーカー名 品名 のコンボボックスのコントロールソースに、
=JANコード
と設定してあるのですね。
ということは、そこで更新はできないということですね。
コンボボックスなのに更新や選択ができないというのは、ユーザーが混乱すると思います。

下記のような設計にするといいでしょう。

JANコード と 自社コード のテキストボックスをコンボボックスに変換します。
右クリックして「コントロールの種類の変更」で簡単にできます。

JANコードのコンボボックス
名前 cbJANコード
値集合ソース SELECT * FROM B1_在庫品マスター WHERE Not JANコード Is Null  ORDER BY JANコード;
列数 6
連結列 1
列幅 0cm;0cm;0cm;0cm;0cm;3cm

自社コードのコンボボックス
名前 cb自社コード
値集合ソース SELECT * FROM B1_在庫品マスター ORDER BY 自社コード;
列数 6
連結列 1
列幅 0cm;0cm;0cm;0cm;3cm;0cm

cbJANコードの更新後処理のイベントプロシージャに下記のコードを記述します。

Private Sub cbJANコード_AfterUpdate()

    Me.cb自社コード.Value = Me.cbJANコード.Value

End Sub

cb自社コードの更新後処理のイベントプロシージャに下記のコードを記述します。

Private Sub cb自社コード_AfterUpdate()

    Me.cbJANコード.Value = Me.cb自社コード.Value

End Sub

現状の 品名ID メーカー名 品名 のコンボボックスはすべて削除します。
テキストボックスを配置して、コントロールソースを下記のように設定します。

=[cb自社コード] & " " & [cb自社コード].Column(1)  & " " & [cb自社コード].Column(2)

これで cbJANコード または cb自社コード に入力したコードに対応する
品名ID メーター名 品名 がテキストボックスに表示されます。

できるなら、メーカー名選択コンボボックスを追加して、それでメーカーを選択すると、
cbJANコード 、 cb自社コード のリストが対応するものに絞り込まれるようにすると
使いやすいものになると思います。

6
igaguri 2019/05/10 (金) 19:05:48 32a1e@d14a6

ありがとうございます。コンボボックス メーカー名の設置は確かにその通りだと思います。今夜、早速やってみます。わからないことがありましたらご連絡させていただきます。

7
igaguri 2019/05/11 (土) 00:11:54 32a1e@d14a6

自社コードで品名IDを試してみましたが選択した自社コードが テキストボックスcb品名IDに返されてしまいました。

8
igaguri 2019/05/11 (土) 09:57:15 32a1e@d14a6

コードでも名称でも入力できるコンボボックス - hatena chips を見ながら作成してますが
フォームのコントロールソースを B1_在庫品マスター にして
コンボボックス名を cb自社コード として、
コントロールソースを 自社コード
値集合ソースを SELECT [B1_在庫品マスター].自社コード,[B1_在庫品マスター].JANコード, FROM [B1_在庫品マスター] ORDER BY [B1_在庫品マスター].自社コード
としたのですがコードすらでてきません。構文が間違っていますか?

9

最初の質問では、フォームヘッダーの 自社コード と JANコードは非連結とのことでしたが、
フォームヘッダーのコントロール群は、何のためのものでしょうか。

フォームのレコードソースのテーブル(入出庫台帳)への入力用ですか。

入出庫台帳 のフィールド構成はどうなってますか。フィールド名を提示してもらえますか。

10
igaguri 2019/05/11 (土) 14:02:31 32a1e@d14a6

まずは見本の通りにやってみようと思って連結してみました。
フォームヘッダーのコントール群は
JANコードと自社コードはバーコードで製品を区別する為に配置して、入出庫しようとしているモノがあっているか確認する為に 品名やメーカー名、品番等は確認する為に表示しようと考えています。
一度、B1_在庫品マスターを元にした入出庫台帳をリンクさせたフォームをつくったのですが、ダメ出しをもらって一度に10品目まで入力できるようにしてくれ。ということなのでいろいろと変更しようと思っているところです。前回までのフィールドは入力が大変なので略したモノを入力しましたが今回は略さずに構成を入力します。

テーブル B1_在庫品マスター
フィールド 品名ID 大別 中別 細別 A B 品名 メーカー名 品番・規格寸法等 保管場所 自社コード JANコード 単位 発注点 発注数 商品備考
A とB に関しては将来的には削除するかもしれません。 品名IDに主キーを割り当てています。
テーブル C1_入出庫台帳
フィールド 入出庫ID 入出庫日 品名ID 入庫数量 出庫数量 入出庫備考 従業員コード になります。
画像1

画像1

11

フォームヘッダーのコントロール群と、
詳細セクションのコントロールの関係が不明瞭だと思います。

ですので、フォームを見て、どのように入力すればいいのか、直感的に分かりにくいと感じます。

最初、JANコードと自社コードは非連結ということだったので、それを条件としてフォームにフィルターをかけるかなと
思いましたが、そうではないのですね。

従業員コード、氏名、入庫日のグループと、JANコードと自社コードの2行のグループが分かれていますが、
これは意味かあるのでしょうか。

ヘッダーの従業員コード、氏名、入庫日は連結でしょうか。非連結でしょうかか。
詳細のデータをみると、従業員コードと入出庫日は同じなので、それでフィルターを
かけているように見えます。

入力作業として、同じ入出庫日、従業員のデータをまとめて入力するという場合なら、
ヘッダーの非連結テキストボックスで、入出庫日、従業員を入力(選択)して、
それでフィルターをかけて、かつ、既定値を設定するというようにするといいでしょう。

商品と入出庫数、備考などは、フォームヘッダーで入力するのか、
詳細セクションの方で入力するのか、
どちらでしょうか。

在庫品マスターの主キーが品名IDだが、自社コードまたはJANコードで入力したいとなると、
詳細セクションの方では難しいので、
ヘッダーで、データ入力して、詳細セクションの方はその結果を一覧表示するだけという
ようにすると、分かり安く、使いやすいユーザーインターフェイスになると思います。

自社コードまたはJANコードはヘッダーに入力、入出庫数は詳細セクションで入力というように、
いったりきたりするのは面倒だし、入力間違いの原因になりかねません。


同じ入出庫日、従業員のデータをまとめて入力するという要件の場合、
私ならこうのように設計するという簡単なサンプルを作成しましたので、
参考にしてください。

サンプルファイル

12
igaguri 2019/05/14 (火) 18:18:09 32a1e@d14a6

サンプルファイルまで作っていただいてありがとうございます。説明不足ではありますが私の考えていたモノと同じです。唯一異なるのは 次のレコード というコマンドボタンを 追加 で考えていたぐらいです。早速、データベースに書き込んでみたいと思います。本当にありがとうございます。

13
igaguri 2019/05/15 (水) 00:35:56 32a1e@d14a6

フォームを起動すると

Private Sub Form_Load()
    Me.従業員コード.DefaultValue = Me.cb従業員コード.Value
    Me.入出庫日.DefaultValue = "#" & Me.txt入出庫日.Value & "#"

    Me.Filter = "従業員コード=" & Me.cb従業員コード.Value & _
                " AND 入出庫日=#" & Me.txt入出庫日 & "#"
    Me.FilterOn = True

    Me.cb従業員コード.SetFocus
    DoCmd.GoToRecord , , acNewRec
End Sub

の Me.FilterOn = True の部分が 黄色くなってしまい フォームが表示されません。
各名称はあっているのですが・・・

14
igaguri 2019/05/15 (水) 00:51:16 32a1e@d14a6

txt入出庫日に日付が入るようにしたらフォームが開きました。
cb従業員コード と テキストボックス従業員コード が連動しません。

15
igaguri 2019/05/15 (水) 01:02:09 32a1e@d14a6

cb従業員コード が1001 に対して 1 と表示されています。

16

現状のファイルを、ファイル送信フォームから送信してもらえますか。
送信フォームのリンクは右のカラムの下のほうにあります。

17

送信ファイルを拝見しましたが、値集合ソースの Z1_社員マスター テーブルがないので、検証できません。

Z1_社員マスター ですが、1列目が 従業員コード、2列目が 氏名になってますか。

18
igachan 2019/05/15 (水) 12:42:21 fdd2e@d14a6

再送しました。

19

修正したファイルをアップしました。

サンプルファイル

修正点

cmdNextRec_Click() プロシージャが重複して入力されてますので、
片方を削除しました。

cb従業員コード の各プロパティの設定を下記のようにしてください。

値集合ソース SELECT 従業員ID, 従業員コード FROM Z1_社員マスター;
連結列 1
列数  2
列幅  0cm;2cm

cb氏名 の各プロパティの設定を下記のようにしてください。

値集合ソース SELECT 従業員ID, 氏名 FROM Z1_社員マスター;
連結列 1
列数  2
列幅  0cm;4cm

cbJANCode の各プロパティの設定を下記のようにしてください。

コントロールソース 品名ID
値集合ソース SELECT JANコード, 品名ID, [メーカー名], 品名, 品番・規格・寸法等, 単位, 保管場所 FROM B1_在庫品マスター WHERE JANコード<>"";
連結列 2
列数  7
列幅  3.3cm;0cm;2.505cm;3.2cm;0cm;0cm;0cm
リスト幅 12cm

cb自社コード の各プロパティの設定を下記のようにしてください。

コントロールソース 品名ID
値集合ソース SELECT 自社コード, 品名ID, [メーカー名], 品名, 品番・規格・寸法等, 単位, 保管場所 FROM B1_在庫品マスター;
連結列 2
列数  7
列幅  3.3cm;0cm;2.505cm;3.2cm;0cm;0cm;0cm
リスト幅 12cm

コンボボックスの、値集合ソース、連列列、列数、列幅 などの意味が理解できて自由に使いこなせると、設計の自由度が広がります。
なかなか難しいので、自分の設定と比べてみたり、いろいろ変更してみて、理解を深めてください。

他にもいろいろ修正してますが、説明しだすときりがないのでこの辺にしておきます。
修正前と変更点を比べて、なぜそのようにしたのか不明な点がありましたら、質問してください。

20
igachan 2019/05/18 (土) 12:44:35 fdd2e@d14a6

入力済みリストにある従業員コードが一桁なんですけど、従業員IDが入力されているんですか?

21

テーブル設計自体が間違ってますね。見落としてました。
マスターテーフルとリンクするフィールドは、マスターテーブルの主キーでないとダメです。

B1_在庫品マスター に、社員コード がありますが、これは削除して、社員ID に変更してください。

修正したファイルをアップしておきます。

サンプルファイル

22
igachan 2019/05/22 (水) 17:46:33 fdd2e@d14a6

ありがとうございます。入院していましたのでお返事できませんでした。よく見て勉強させていただきます。