Microsoft Access 掲示板

バーコードを使って在庫品を検索したい

19 コメント
views
4 フォロー

お世話になります。
アクセス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 アクションの引数が正しく指定されていません。とエラーメッセージが出てしまいます。
どのように書き換えればよろしいのでしょうか?

igaguri
作成: 2019/04/18 (木) 22:06:26
通報 ...
1

フォーム [F_4_1 JANコード検索画面] のレコードソースのテーブルはなんでしょうか。

2
igaguri 2019/04/19 (金) 12:47:08 32a1e@d14a6

バーコードリーダーを使って B_1 在庫品マスター を印刷したものを読み込むつもりなので、何にも関連付けていません。

3

DoCmd.FindRecord は名前の通り該当するレコードを検索するものです。
フォームのレコードソースに何も設定されていない、つまり、レコードがないということ、ないものを検索することはできません。

フォーム [F_4_1 JANコード検索画面] で、どこから何を検索するつもりなんですか。

4
igaguri 2019/04/19 (金) 17:23:02 32a1e@d14a6

テーブル B_1 在庫品マスター をレコードソースにしているJANコード フォーム F_1 在庫品マスター 入庫の登録画面 の JANコード を検索したいのですが・・・。

5

整理すると、下記のようなことでしょうか。

フォーム[F_1 在庫品マスター 入庫の登録画面]
  レコードソース [B_1 在庫品マスター]

このフォーム上のコマンドボタン [検索画面を開く]
これをクリックすると、[F_4_1 JANコード検索画面]
が開く。

フォーム[F_4_1 JANコード検索画面]
  テキストボックス [JANコード検索]
  コマンドボタン [JANコードで検索する]

[JANコード検索] にJANコードを入力する。
あるいは、バーコードリーダから読み込んで入力される。

[JANコードで検索する]をクリックすると、

[F_1 在庫品マスター 入庫の登録画面]で、
入力したJANコードと一致するレコードが検索されて表示される。

6

上記であっているなら、下記のコードを試してみてください。

Private Sub JANコードで検索する_Click()
    Forms![F_1 在庫品マスター 入庫の登録画面].SetFocus
    Forms![F_1 在庫品マスター 入庫の登録画面]!JANコード.SetFocus
    DoCmd.FindRecord Me.JANコード検索, acEntire
    Docmd.Close acForm, Me.Name
End Sub

FindRecord はアクティブなフォームのフォーカスのあるコントロールが対象ですので、
フォームにSetFocusしてから、コントロールにSetFocusする必要があります。

7
igaguri 2019/04/19 (金) 18:33:02 32a1e@d14a6

検索できました。ありがとうございます!!

8
igaguri 2019/05/08 (水) 06:23:59 32a1e@d14a6

テーブル B_1 在庫品マスター JANコード に登録されていないコード(削除されてしまった)や 未登録の時 に 
未登録のコードを入力しました。もう一度入力コードを確認してください。
と、エラーメッセージを出したいのですが・・・。どのように付け加えたら良いのでしょうか?

9

検索(FindRecord )した結果、JANコード と JANコード検索 が一致していなかったら、該当の JANコード が見つからなかったということなりますので、それを利用すればいいでしょう。

Private Sub JANコードで検索する_Click()
    Forms![F_1 在庫品マスター 入庫の登録画面].SetFocus
    Forms![F_1 在庫品マスター 入庫の登録画面]!JANコード.SetFocus
    DoCmd.FindRecord Me.JANコード検索, acEntire
    If Me.JANコード検索 = Forms![F_1 在庫品マスター 入庫の登録画面]!JANコード Then
        Docmd.Close acForm, Me.Name
    Else
        MsgBox "未登録のコードを入力しました。もう一度入力コードを確認してください。"
        Me.SetFocus
        Me.JANコード検索.SetFocus
    End If
End Sub
10
igaguri 2019/05/23 (木) 07:34:01 32a1e@d14a6

御世話になります。
上記に加えて、
テキストボックス JANコード検索  が 空 のままで間違って JANコードで検索するボタン を押してしまった場合 
JANコード検索 に値が入力されていません。JANコードを入力してください。と表示させたい時はどうのようにしたらよいのでしょうか?

11

クリック時のプロシージャの冒頭に下記のコードを挿入してください。

Private Sub JANコードで検索する_Click()
    If IsNull(Me.JANコード検索) Then
        MsgBox "JANコード検索 に値が入力されていません。JANコードを入力してください。"
        Exit Sub
    End If

    '以下、略

End Sub
12
名前なし 2019/05/23 (木) 13:48:36 cb785@f966d >> 11

テキストボックスってIsNullでいいんでしたっけ?

If Nz(Me.JANコード検索, "") = "" Then

いつもこんな感じでやってますが

15

非連結テキストボックスの場合、通常は IsNull でいいと思います。
通常のユーザーによる入力では "" になることはないので。
ただし、VBAで "" を代入したりすると、""(空文字列)なることもあるので、Nzの方がより安全かとは思います。

連結なら、フィールドの方で、「空文字列の許可」を「いいえ」にすれば、"" になることはないので、IsNullで問題ないです。
逆に、「空文字列の許可」を「はい」、「値要求」を「はい」にすると、Nullになることはなく、
Me.JANコード検索 = "" でOKということになります。

18
名前なし 2019/05/24 (金) 09:08:40 0aba4@f966d >> 12

なるほど、勉強になります。
ありがとうございます。

13
igachan 2019/05/23 (木) 16:58:20 fdd2e@d14a6

テーブル B1_在庫品マスター の フィールド JANコード のデータ型がテキスト型だからではないでしょうか?

14
igachan 2019/05/23 (木) 17:01:02 fdd2e@d14a6

本来、バーコードのデータ型は数値型とデータ型のどちらを使うべきなのでしょうか?
何もわからないので 住所入力支援のカスタマバーコードがテキスト型なのでテキスト型にしていますが・・・?

16

テキスト型でいいと思います。数値型だと桁数オーバーになったり、先頭の0が消えたりしますので。
フィールドの「IME入力モード」は「オフ」にしておくといいでしょう。

17
igaguri 2019/05/24 (金) 07:29:24 32a1e@d14a6

ありがとうございます。
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

19

コードを見る限りは問題なさそうです。
実物をみないと原因の特定は難しそうです。

DoCmd.FindRecord はフォーカス移動させる必要があったり扱いが面倒なので、
別案を提案しておきます。

Private Sub Btn 自社コードで検索する_Click()

    If Nz(Me.自社コード検索, "") = "" Then
        MsgBox "自社コード入力欄 に値が入力されていません。自社コードを入力してください。"
        Me.SetFocus
        Me.自社コード検索.SetFocus
        Exit Sub
    End If

    With Forms![C15_入出庫履歴_メイン].Recordset
        .FindFirst "自社コード=" & Me.自社コード検索
        If .NoMatch Then
            DoCmd.Close acForm, Me.Name
        Else
            MsgBox "未登録のコードを入力しました。もう一度自社コードを確認してください。"
            Me.自社コード検索.SetFocus
        End If
    End With
End Sub

自社コード フィールドのデータ型が数値型の場合です。
テキスト型の場合は、下記のように ' で囲んでください。

        .FindFirst "自社コード='" & Me.自社コード検索 & "'"