お世話になります。
アクセス2010で在庫管理をしようと思い、
テーブル B_1 在庫品マスター
フィールド 品名ID 品名 細別 ・・・・ JANコード を作成しました。
この テーブル B_1 在庫品マスター を元に フォーム F_1 在庫品マスター 入庫の登録画面 を作成し、
フォーム F_4_1 JANコード検索画面 が開くように コマンドボタン 検索画面を開く を配置しました。
そして フォーム F_4_1 JANコード検索画面 に テキストボックス JANコード検索 と コマンドボタン JANコードで検索する を配置し、
Private Sub JANコードで検索する_Click()
Forms![F_1 在庫品マスター 入庫の登録画面]!JANコード.SetFocus
DoCmd.FindRecord "*" & Forms![F_4_1 JANコード検索画面]!JANコード検索
End Sub
と記述したのですが
実行時エラー 2162
FindRecord アクションの引数が正しく指定されていません。とエラーメッセージが出てしまいます。
どのように書き換えればよろしいのでしょうか?
フォーム
[F_4_1 JANコード検索画面]
のレコードソースのテーブルはなんでしょうか。バーコードリーダーを使って B_1 在庫品マスター を印刷したものを読み込むつもりなので、何にも関連付けていません。
DoCmd.FindRecord は名前の通り該当するレコードを検索するものです。
フォームのレコードソースに何も設定されていない、つまり、レコードがないということ、ないものを検索することはできません。
フォーム
[F_4_1 JANコード検索画面]
で、どこから何を検索するつもりなんですか。テーブル B_1 在庫品マスター をレコードソースにしているJANコード フォーム F_1 在庫品マスター 入庫の登録画面 の JANコード を検索したいのですが・・・。
整理すると、下記のようなことでしょうか。
フォーム[F_1 在庫品マスター 入庫の登録画面]
レコードソース [B_1 在庫品マスター]
このフォーム上のコマンドボタン [検索画面を開く]
これをクリックすると、[F_4_1 JANコード検索画面]
が開く。
フォーム[F_4_1 JANコード検索画面]
テキストボックス [JANコード検索]
コマンドボタン [JANコードで検索する]
[JANコード検索] にJANコードを入力する。
あるいは、バーコードリーダから読み込んで入力される。
[JANコードで検索する]をクリックすると、
[F_1 在庫品マスター 入庫の登録画面]で、
入力したJANコードと一致するレコードが検索されて表示される。
上記であっているなら、下記のコードを試してみてください。
FindRecord はアクティブなフォームのフォーカスのあるコントロールが対象ですので、
フォームにSetFocusしてから、コントロールにSetFocusする必要があります。
検索できました。ありがとうございます!!
テーブル B_1 在庫品マスター JANコード に登録されていないコード(削除されてしまった)や 未登録の時 に
未登録のコードを入力しました。もう一度入力コードを確認してください。
と、エラーメッセージを出したいのですが・・・。どのように付け加えたら良いのでしょうか?
検索(FindRecord )した結果、JANコード と JANコード検索 が一致していなかったら、該当の JANコード が見つからなかったということなりますので、それを利用すればいいでしょう。
御世話になります。
上記に加えて、
テキストボックス JANコード検索 が 空 のままで間違って JANコードで検索するボタン を押してしまった場合
JANコード検索 に値が入力されていません。JANコードを入力してください。と表示させたい時はどうのようにしたらよいのでしょうか?
クリック時のプロシージャの冒頭に下記のコードを挿入してください。
テキストボックスってIsNullでいいんでしたっけ?
いつもこんな感じでやってますが
非連結テキストボックスの場合、通常は IsNull でいいと思います。
通常のユーザーによる入力では "" になることはないので。
ただし、VBAで "" を代入したりすると、""(空文字列)なることもあるので、Nzの方がより安全かとは思います。
連結なら、フィールドの方で、「空文字列の許可」を「いいえ」にすれば、"" になることはないので、IsNullで問題ないです。
逆に、「空文字列の許可」を「はい」、「値要求」を「はい」にすると、Nullになることはなく、
Me.JANコード検索 = "" でOKということになります。
なるほど、勉強になります。
ありがとうございます。
テーブル B1_在庫品マスター の フィールド JANコード のデータ型がテキスト型だからではないでしょうか?
本来、バーコードのデータ型は数値型とデータ型のどちらを使うべきなのでしょうか?
何もわからないので 住所入力支援のカスタマバーコードがテキスト型なのでテキスト型にしていますが・・・?
テキスト型でいいと思います。数値型だと桁数オーバーになったり、先頭の0が消えたりしますので。
フィールドの「IME入力モード」は「オフ」にしておくといいでしょう。
ありがとうございます。
JANコード 以外にも 自社コード での商品検索がありますので参考にして下記のように記述したところ
メインフォームでのレコードの移動はできているのですが
MsgBox "未登録のコードを入力しました。もう一度自社コードを確認してください。" が表示されてしまいます。
どこが間違っているのでしょうか?
Private Sub Btn 自社コードで検索する_Click()
If Nz(Me.自社コード検索, "") = "" Then
MsgBox "自社コード入力欄 に値が入力されていません。自社コードを入力してください。"
Me.SetFocus
Me.自社コード検索.SetFocus
Exit Sub
End If
Forms![C15_入出庫履歴_メイン].SetFocus
Forms![C15_入出庫履歴_メイン]!自社コード.SetFocus
DoCmd.FindRecord Me.自社コード検索, acEntire
If Me.自社コード検索 = Forms![C15_入出庫履歴_メイン]!自社コード Then
DoCmd.Close acForm, Me.Name
Else
MsgBox "未登録のコードを入力しました。もう一度自社コードを確認してください。"
Me.SetFocus
Me.自社コード検索.SetFocus
End If
End Sub
コードを見る限りは問題なさそうです。
実物をみないと原因の特定は難しそうです。
DoCmd.FindRecord はフォーカス移動させる必要があったり扱いが面倒なので、
別案を提案しておきます。
自社コード フィールドのデータ型が数値型の場合です。
テキスト型の場合は、下記のように ' で囲んでください。