• 締切済み

VBA:フォームからフィールド名を指定して検索した

Private Sub 商品コード_LostFocus() Dim ShukkaPtn As String ShukkaPtn = Me.出荷パターン Me.売上単価 = DLookup("[ShukkaPtn]", "[Q_単価分類別_単価]", "[商品コード]='" & Me.商品コード & "'") End Sub 商品コードと出荷パターンというテキストボックスがあって、 [出荷パターン]に14という数値がはいってるとしたら レコードセット[Q_単価分類別_単価]から商品コードで検索して、[14]フィールドにある数値を出したいのですが上の式では間違っているのでしょうか? どこをどう修正していいのかが調べてもわかりませんでした。 宜しくお願いします。

みんなの回答

noname#208392
noname#208392
回答No.1

テーブルの構造が書いてないので、はっきりとは分かりませんが、式が間違っているというより、そもそもテーブルの構造がおかしいんじゃないでしょうか。 でもまずは式から検討してみましょうか。 私は、やりたいことと式がまったくあっていないと思います。 そのDLookup関数は、次のような動作をします。 テーブル"Q_単価分類別_単価"のレコードで、"商品コード"フィールドの値が Me.商品コード である(つまり当該フォームの"商品コード"テキストボックスの値)であるレコードをひとつ探し、そのレコードの"ShukkaPtn"フィールドの値を返す。 こういうことがしたいんですか?そのテーブルは"ShukkaPtn"という名前のフィールドを持っているのですか? なお、ドメインをあらわす引数には[]をつけません。 私が想像するに、"Q_単価分類別_単価"というテーブルは、以下のような構造を持っているんじゃないですか? 商品コード|01|02|03|04|・・・|13|14|15|・・・ そして01などのフィールドに単価がデータとして格納されているのではないでしょうか。 もしそうなら、テーブルの設計が間違っています。 あるいは、クロス集計の結果できたクエリなのかもしれませんが、そのフォームで単価を呼び出すのなら、元のテーブル(ないしクエリ)私はこういう風にするべきだと思います。 商品コード|出荷パターン|単価 そして、そのテーブルには商品コードと出荷パターンの全ての組み合わせとそれに対応する単価が書いてあるのです。 こういう風にして初めて、テーブルがデータベースとして使えるようになります。 例えば、DLookup関数で単価を呼び出すときはこうします。 Me.売上単価 = DLookup("[単価]", "Q_単価分類別_単価", "[商品コード]='" & Me.商品コード & "' AND [出荷パターン]='" & Me.出荷パターン & "'") なお、出荷パターンもテキストデータだと仮定しています。

関連するQ&A