御世話になります。
テーブル B1_在庫品マスター に フィールド 品名ID メーカー名 品名 品番 自社コード JANコード があります。品名IDはオートナンバー型で主キーに設定されています。
自社コードは数値型で連番で製品全てにふられています。 JANコードはテキスト型でコードがわかる物だけ入力されています。
このような状態で添付図のようなフォームを作成し
JANコード が入力されたら 品名ID メーカー名 品名 ・・・
自社コード が入力されたら 品名ID メーカー名 品名 ・・・ と表示できるようにつくってみましたが
場所を取ってしまうので 品名ID メーカー名 品名 ・・・の部分を1つにすることはできないものでしょうか?
フォームは入出庫台帳を元につくったクエリです。
また、オレンジの部分はコードを入力するテキストボックスは非連結です。
通報 ...
添付図が表示されてないので、よく分かりません。
投稿欄の下のツールバーの画像アップロードボタンをクリックして、ファイルを選択ボタン(クリップマーク)をクリックしてファイルを選択してから、アップロードボタンをクリックしてください。
すみません。添付したつもりだったのですが・・・。
品名ID、メーカー名、品名 がコンボボックスになっているということは、こちらかも選択できるようにということでしょうか。
また、コードとコンボボックスが上下2行になってますが、2行にする必要がありますか。
結局、選択する商品は一つなので1行で十分ではないですか。
私なら、下記で紹介している方法で、
JANコードでも、自社コードでも、品名でも、選択できるようにします。
コードでも名称でも入力できるコンボボックス - hatena chips
あと、メーカー名を選択したら、他のコンボボックスのリストをそのメーカーの商品だけに制限するという設計にします。
下記が参考になるでしょう。
Accessのマクロで2つのコンボボックスを連動させる方法 | できるネット
ありがとうございます。
紹介の コードでも名称でも入力できるコンボボックス - hatena chips
を使ってコンボボックスをつくって品名IDが出てくるようにしてあります。ただコントロールソースの値を
上の段は =JANコード
下の段は =自社コード
にしてあるのでもう一度見てやってみようと思います。
JANコードは未登録のれこーどがあっても大丈夫なモノなのでしょうか?
そこがとっても心配で・・・。
品名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コードの更新後処理のイベントプロシージャに下記のコードを記述します。
cb自社コードの更新後処理のイベントプロシージャに下記のコードを記述します。
現状の 品名ID メーカー名 品名 のコンボボックスはすべて削除します。
テキストボックスを配置して、コントロールソースを下記のように設定します。
=[cb自社コード] & " " & [cb自社コード].Column(1) & " " & [cb自社コード].Column(2)
これで cbJANコード または cb自社コード に入力したコードに対応する
品名ID メーター名 品名 がテキストボックスに表示されます。
できるなら、メーカー名選択コンボボックスを追加して、それでメーカーを選択すると、
cbJANコード 、 cb自社コード のリストが対応するものに絞り込まれるようにすると
使いやすいものになると思います。
ありがとうございます。コンボボックス メーカー名の設置は確かにその通りだと思います。今夜、早速やってみます。わからないことがありましたらご連絡させていただきます。
自社コードで品名IDを試してみましたが選択した自社コードが テキストボックスcb品名IDに返されてしまいました。
コードでも名称でも入力できるコンボボックス - hatena chips を見ながら作成してますが
フォームのコントロールソースを B1_在庫品マスター にして
コンボボックス名を cb自社コード として、
コントロールソースを 自社コード
値集合ソースを SELECT [B1_在庫品マスター].自社コード,[B1_在庫品マスター].JANコード, FROM [B1_在庫品マスター] ORDER BY [B1_在庫品マスター].自社コード
としたのですがコードすらでてきません。構文が間違っていますか?
最初の質問では、フォームヘッダーの 自社コード と JANコードは非連結とのことでしたが、
フォームヘッダーのコントロール群は、何のためのものでしょうか。
フォームのレコードソースのテーブル(入出庫台帳)への入力用ですか。
入出庫台帳 のフィールド構成はどうなってますか。フィールド名を提示してもらえますか。
まずは見本の通りにやってみようと思って連結してみました。
フォームヘッダーのコントール群は
JANコードと自社コードはバーコードで製品を区別する為に配置して、入出庫しようとしているモノがあっているか確認する為に 品名やメーカー名、品番等は確認する為に表示しようと考えています。
一度、B1_在庫品マスターを元にした入出庫台帳をリンクさせたフォームをつくったのですが、ダメ出しをもらって一度に10品目まで入力できるようにしてくれ。ということなのでいろいろと変更しようと思っているところです。前回までのフィールドは入力が大変なので略したモノを入力しましたが今回は略さずに構成を入力します。
テーブル B1_在庫品マスター
フィールド 品名ID 大別 中別 細別 A B 品名 メーカー名 品番・規格寸法等 保管場所 自社コード JANコード 単位 発注点 発注数 商品備考
A とB に関しては将来的には削除するかもしれません。 品名IDに主キーを割り当てています。
テーブル C1_入出庫台帳
フィールド 入出庫ID 入出庫日 品名ID 入庫数量 出庫数量 入出庫備考 従業員コード になります。
、画像1
フォームヘッダーのコントロール群と、
詳細セクションのコントロールの関係が不明瞭だと思います。
ですので、フォームを見て、どのように入力すればいいのか、直感的に分かりにくいと感じます。
最初、JANコードと自社コードは非連結ということだったので、それを条件としてフォームにフィルターをかけるかなと
思いましたが、そうではないのですね。
従業員コード、氏名、入庫日のグループと、JANコードと自社コードの2行のグループが分かれていますが、
これは意味かあるのでしょうか。
ヘッダーの従業員コード、氏名、入庫日は連結でしょうか。非連結でしょうかか。
詳細のデータをみると、従業員コードと入出庫日は同じなので、それでフィルターを
かけているように見えます。
入力作業として、同じ入出庫日、従業員のデータをまとめて入力するという場合なら、
ヘッダーの非連結テキストボックスで、入出庫日、従業員を入力(選択)して、
それでフィルターをかけて、かつ、既定値を設定するというようにするといいでしょう。
商品と入出庫数、備考などは、フォームヘッダーで入力するのか、
詳細セクションの方で入力するのか、
どちらでしょうか。
在庫品マスターの主キーが品名IDだが、自社コードまたはJANコードで入力したいとなると、
詳細セクションの方では難しいので、
ヘッダーで、データ入力して、詳細セクションの方はその結果を一覧表示するだけという
ようにすると、分かり安く、使いやすいユーザーインターフェイスになると思います。
自社コードまたはJANコードはヘッダーに入力、入出庫数は詳細セクションで入力というように、
いったりきたりするのは面倒だし、入力間違いの原因になりかねません。
同じ入出庫日、従業員のデータをまとめて入力するという要件の場合、
私ならこうのように設計するという簡単なサンプルを作成しましたので、
参考にしてください。
サンプルファイル
サンプルファイルまで作っていただいてありがとうございます。説明不足ではありますが私の考えていたモノと同じです。唯一異なるのは 次のレコード というコマンドボタンを 追加 で考えていたぐらいです。早速、データベースに書き込んでみたいと思います。本当にありがとうございます。
フォームを起動すると
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 の部分が 黄色くなってしまい フォームが表示されません。
各名称はあっているのですが・・・
txt入出庫日に日付が入るようにしたらフォームが開きました。
cb従業員コード と テキストボックス従業員コード が連動しません。
cb従業員コード が1001 に対して 1 と表示されています。
現状のファイルを、ファイル送信フォームから送信してもらえますか。
送信フォームのリンクは右のカラムの下のほうにあります。
送信ファイルを拝見しましたが、値集合ソースの Z1_社員マスター テーブルがないので、検証できません。
Z1_社員マスター ですが、1列目が 従業員コード、2列目が 氏名になってますか。
再送しました。
修正したファイルをアップしました。
サンプルファイル
修正点
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
コンボボックスの、値集合ソース、連列列、列数、列幅 などの意味が理解できて自由に使いこなせると、設計の自由度が広がります。
なかなか難しいので、自分の設定と比べてみたり、いろいろ変更してみて、理解を深めてください。
他にもいろいろ修正してますが、説明しだすときりがないのでこの辺にしておきます。
修正前と変更点を比べて、なぜそのようにしたのか不明な点がありましたら、質問してください。
入力済みリストにある従業員コードが一桁なんですけど、従業員IDが入力されているんですか?
テーブル設計自体が間違ってますね。見落としてました。
マスターテーフルとリンクするフィールドは、マスターテーブルの主キーでないとダメです。
B1_在庫品マスター に、社員コード がありますが、これは削除して、社員ID に変更してください。
修正したファイルをアップしておきます。
サンプルファイル
ありがとうございます。入院していましたのでお返事できませんでした。よく見て勉強させていただきます。