• 締切済み

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

  • フォームで指定したフィールドのレコード抽出したい

    Access2010使用です。 売上伝票を作るのに、出荷分類7種類(工場渡し・配達・遠距離配達…)、業種別5種類(同業者、職人、現金…)と分類分けされていて、 ひとつの商品の単価で6×5=35種類の価格設定があります。 テーブルの構成はひとつのレコードに対して、 ●商品コード ●商品名 ●分類別単価コード ●分類別単価 ●工場渡し・職人(11) ●工場渡し・現金(12) ●工場渡し・建材店(13) ●工場渡し・同業者(14) ●工場渡し・工務店(15) ●配達・職人(21) ●配達・現金(22) ●配達・建材店(23) ●配達・同業者(24) ●配達・工務店(25) ●遠配達・職人(31) ●遠配達・現金(32) ...etc とあって全部で、39種類のフィールドがあります。 売上伝票というフォームがあって 得意先マスタの方で業種は指定しているので得意先を選ぶと業種([Forms]![F売上メイン]![業種])は自動で指定されますが、 出荷分類([Forms]![F売上メイン]![分類コード])が都度、工場渡しだったり配達だったり異なるのでその都度選択します。 例えば… 出荷パターンが工場渡し・同業者(14) この場合、「工場単価4」のフィールドから指定商品のレコードにある単価を抽出したい 出荷パターンが配達・建材店(23) この場合、「配達単価3」のフィールドから指定商品のレコードにある単価を抽出したい 業種別IDと出荷分類IDを組み合わせて、()内の2桁の番号(出荷パターン)を作っています。 Dlookupでも試みたんですがうまく動作せず、 IIFを用いて出荷パターンが「14」の場合は工場単価4のフィールドから… などと考えたんですが、フィールドを指定して、特定のフィールドから値を抽出する方法がわかりません。 説明がわかりづらいかもしれませんが、どなたか教えてください。

  • アクセス コンボボックスで全項目表示

    アクセス2000で発注書をつくっています 発注書フォームのサブフォーム「発注書sub」内で 「大項目」「中項目」「小項目」「商品コード」の 4つのコンボボックスを設置し、 絞込み検索で商品明細を入力しています 新規レコードに移動するときに 「大項目」「中項目」「小項目」の値を空白にし、 4つめの「商品コード」コンボボックスで 全商品を表示させたいのですが どう記述していいのかわかりません 現在は Private Sub 商品コード_AfterUpdate() Me.品番 = Me.商品コード.Column(1) Me.商品名 = Me.商品コード.Column(2) Me.色 = Me.商品コード.Column(3) Me.サイズ = Me.商品コード.Column(4) Me.商品単価 = Me.商品コード.Column(5) End Sub Private Sub 小項目_Enter() Me!商品コード.Requery End Sub Private Sub 大項目_AfterUpdate() Me!中項目.Requery End Sub Private Sub 中項目_AfterUpdate() Me!小項目.Requery End Sub Private Sub 小項目_AfterUpdate() Me!商品コード.Requery End Sub 'フォーカスが移ると同時にドロップダウンさせる Private Sub 大項目_GotFocus() Me.大項目.Dropdown End Sub Private Sub 中項目_GotFocus() Me.中項目.Dropdown End Sub Private Sub 小項目_GotFocus() Me.小項目.Dropdown End Sub 'テスト Private Sub 摘要_LostFocus() Me!大項目 = Null Me!中項目 = Null Me!小項目 = Null Me!商品コード.Requery End Sub です。 発注書フォーム(単票フォーム) レコードソース「発注書」 サブフォーム名「発注書sub」(帳票形式) レコードソース「発注書明細」 リンク親フィールド子フィールドともに「発注書コード」 (他に表記が必要なのがあるかもしれませんが。。) テーブル ●発注書明細 「明細コード」「発注書コード」「商品コード」「品番」「商品名」「色」「サイズ」「商品単価」「数量」「摘要」です ●商品マスタ 「商品コード」「品番」「種類」「大項目」「中項目」「色」「商品名」「サイズ」「商品単価」 です。 どなたか ご指導のほどよろしくお願いいたします

  • ACCESS クエリからテーブルへのコピペ

    Pzrivate Sub cmb品番_AfterUpdate() Dim Rst As DAO.Recordset Dim z As String z = DLookup("コード", "Q_コンポーネント", "専用コード='" & Me.tx専用コード & "'") Set Rst = CurrentDb.OpenRecordset("W_部品一覧", dbOpenTable) With Rst .AddNew .Fields("区分") = DLookup("部門", "Q_マスタ", "専用コード='" & z & "'") .Fields("分類1") = DLookup("分類1", "Q_マスタ", "専用コード='" & z & "'") .Fields("分類2") = DLookup("分類2", "Q_マスタ", "専用コード='" & z & "'") .Fields("品番") = DLookup("材料", "Q_マスタ", "専用コード='" & z & "'") .Fields("品名") = DLookup("品名", "Q_マスタ", "専用コード='" & z & "'") .Fields("コード") = DLookup("コード", "Q_マスタ", "専用コード='" & z & "'") .Fields("品種") = DLookup("品種", "Q_マスタ", "専用コード='" & z & "'") .Fields("重量") = DLookup("重量", "Q_マスタ", "専用コード='" & z & "'") .Update End With Rst.Close Set Rst = Nothing End Sub ------------------------------------------------------------ 上記のコードで「Q_マスタ」クエリの内容を「W_部品一覧」テーブルにコピペしています。 ※「W_部品一覧」テーブルはサブフォームです。 「Q_マスタ」クエリの専用コードフィールドには「z」と一致する値が複数あるのですが、上記コードではそのクエリ内の一番上の1レコード分しかコピペできていません。 「z」の値が一致している全てのフィールドを「Q_マスタ」→「W_部品一覧」にコピペするようにしたいです。 For~NextやDo While~Loopを使って処理回数を増やしてみたのですが、同じレコードの内容が繰り返しコピペされてしまいました。 どうすれば複数のレコードをコピペできるかご教示頂けますようお願いします。

  • Accessの実行時エラーについて

    度々恐れ入ります。 実行時エラー’2424’: 指定した式にMicrsoft Accessが見つけることができないフィールド、コントロール、プロパティ名が含まれています。 のメッセージが出てしまいます。 記述したのは オブジェクト=商品コード、プロシージャボックス=Exitの状態で Private Sub 商品コード_Exit(Cancel As Integer) 商品名 = DLookup("商品名", "商品", "商品コード='" & 商品コード & "'") 販売単価 = DLookup("販売単価", "商品", "商品コード='" & 商品コード & "'") 仕入単価 = DLookup("仕入単価", "商品", "商品コード='" & 商品コード & "'") End Sub 以上です。 商品名と商品コードは、商品テーブルと見積明細テーブルの両方に存在するフィールドで、商品名は商品テーブルの主キーにしています。 また、データ型はすべてテキストです。 またもや、テキストどおりの設定をしたはずなのに、何が原因なのか見当つかない状態です。

  • Access2000フォーム/サブフォームにつおて

    Access2000でフォーム/サブフォーム(売上伝票)を作っています。 フォーム(売上伝票メイン)には伝票番号、売上先などを入力・・・ サブフォーム(売上伝票サブ)は商品、数量、金額などを入力します。 そこで質問ですが、サブフォームの商品は商品コード(コンボボックス)を入力すると該当する商品名、単価などを商品台帳から引いてくる、としたいと思い、商品コードの「更新処理後」に以下のコードを記述しました。   Me![商品名] = DLookup("[商品名]", "[商品台帳]","[商品コード]= Forms![売上伝票メイン]![売上伝票サブ]![商品コード]")     サブフォーム上の商品名に商品台帳の商品名を入力するとしたつもりなのですが、何も表示されません。  単価も単位も同様です。  この方法ではだめなのでしょうか?  

  • VBA フォームに入力された数値を検索条件としたい

    ど素人ですので、よろしくお願いいたします。 VBAでユーザーフォームのテキストボックスに入力された数値○○~○○という条件でエクセルのデータをフィルターをかけて検索する構文を書きたいのですが、フォームのコードと標準モジュールのコードをどう繋げたらよいのかわかりません。よろしくお願いいたします。 以下が途中まで書いた構文です。 モジュールコード Sub 抽出() Range("a4").AutoFilter field:=1, Criteria1:=">=■1", _ operator:=xlAnd, Criteria2:="<■2" End Sub フォームコード Private Sub 実行_Click() ■1(○○以上の数値が入るテキストボックスの構文) ■2(○○未満の数値が入るテキストボックスの構文) End Sub 全く違っているのかも知れませんが、フォームは無視してモジュールの■に数値を直接入れると正しく検索します。

  • エクセルVBAについて、ご教授お願いします。

    表を作成しました。      1 商品名 商品区分  単価     2 ミカン   1        \50  3 リンゴ  2         \80 4 モモ   8        \100  Msgboxに商品区分と単価上昇率を入力し、コマンドボタンの単価変更をクリックすると、 エクセル(商品区分、単価)のデータを読み下記の条件で実行します。 ------------------------------------------------------------------------------------ A.単位上昇率に関してエラーチェックを行います。 'B.エラーが見つかった場合にのみ、対象商品区分の単位上昇率を元にワークシート上の明細を更新する 'C.処理条件をメッセージボックスにて表示する。 ------------------------------------------------------------------------------------- どうしても思うような処理を作成できず悩んでいます。 良い方法をご存じの方がいらっしゃいましたら、どうかお教えください。 Option Explicit Sub ユーザーフォーム表示() 'P79 単価変更画面.Show End Sub '単価変更版 '------------------------------------------- 'A.単位上昇率に関してエラーチェックを行います。 'B.エラーが見つかった場合にのみ、対象商品区分の単位上昇率を元にワークシート上の明細を更新する 'C.処理条件をメッセージボックスにて表示する。 '---------------------- Private Sub 終了_click() End End Sub Private Sub 商品区分_change() End Sub Private Sub 単価上昇率_change() End Sub Private Sub 単価変更_Click() Dim i As Long Dim cut As Integer Dim 単価上昇率 As String Dim 商品区分 As String If IsNumeric(単価上昇率) = False Then MsgBox ("数値を入力して下さい。") 単価変更画面.単価上昇率.SetFocus i = Cells(i, 4) End If i = 3 cut = 0 Do While Cells(i, 4) <> "" If Cells(i, 4) = 単価変更画面.商品区分.Text Then   Cells(i, 6) = Cells(i, 6) * (1 + 単価変更画面.単価上昇率.Text / 100) cut = cut + 1 End If    i = i + 1    Loop If cut = 0 Then MsgBox ("該当する商品は存在 しませんでした。 ") 単価変更画面.商品区分.SetFocus Else MsgBox (cut & "件の明細を変更しました。") End If End Sub

  • VBAのコード

    参考書に従って次のようなコードを書きました。 Private Sub previewButton_Click() Dim db as DAO.Database Dim rs as DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("Q_ラベル印刷", dbOpenDynaset)* if me!......................以下略 *印のところで「パラメーターが少なすぎます。1を指定してください。」というメッセージが出ます。 どう直せばいいのでしょうか。 よろしくお願いします。

  • ACCESSのデータシート形式のフォームでのDLookupについて

    お世話になります。 以下の様なコードでフォーム上の「bikou」という項目に商品マスタテーブル内の該当する商品コードの「商品名称」を代入しようと思います。 Private Sub 商品コードNo_BeforeUpdate(Cancel As Integer) Me!bikou = DLookup("商品名称", "商品マスタ", "商品コード='" & Me!商品コードNo & "'") End Sub これは単票形式のフォームではうまくいくのですが、データーシート形式ですと商品コードを入力する度にフォーム上に表示されている「bikou」がすべて塗り換わってしまいます。結果として最後に入力して商品コードの商品名称が、表示中のすべてのレコードの「bikou」に代入されてしまいます。そこで、「現在編集中のレコードの項目「bikou」のみに値を代入する(商品名称を代入する)」という指定を 行うプログラムの書き方はあるのでしょうか。 よろしくお願い致します。

  • アクセスのフォームで数値型の複数検索のについて

    アクセスのフォームで検索ボタンを設置して複数検索をしています。 下記の状態でうまくいってたのですが、依頼でまた一つ検索項目が追加になりました。 追加になった項目は数値型で”を抜いたりしたのですがうまく検索できません。 どうすればうまくいくか教えて下さい。 今のコードは以下の通りです。 Private Sub 検索ボタン_Click() Dim L1 As String If Nz(Me.品名検索, "") <> "" Then L1 = L1 & " AND 品名 Like '*" & Me.品名検索 & "*'" End If If Nz(Me.採取日検索, "") <> "" Then L1 = L1 & " AND 採取日 = #" & Me.採取日検索 & "#" If Nz(Me.数値検索, "") <> "" Then L1 = L1 & " AND 数値 = " & Me.数値検索 End If End If If L1 <> "" Then L1 = Mid(L1, 6) Me.Filter = L1 Me.FilterOn = True Else Me.Filter = L1 Me.FilterOn = False End If End Sub 数値の部分が数値型の新たな検索です。 宜しくお願い致します。