• 締切済み

Access DoCmd.OpenFormの引数

現在Access VBAを勉強中の者です。 DoCmd.OpenForm については、同じQ&Aがありますが回答内容の意味が理解できず応用が利きません。 具体的には、 DoCmd.OpenForm "フォーム名", , , "商品番号 = '" & Me!商品番号 & "'" における、Where句の「"」と「'」の使い方です。 私の情報収集では、   (1)文字列は「"」で囲む。   (2)Where句は「"」で囲む。   (3)「"」の囲みが重複したら内側を「'」に変更する。 なのですが、(2)と(3)は上記の例からでは理解に苦しみます。 DoCmd.OpenForm のWhere句の「"」と「'」の使い方についてその仕様を教えて下さい。

  • BMac
  • お礼率66% (2/3)

みんなの回答

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

>(1)変数(Me!商品番号など)を「'」で囲む場合とはどのような場合と理解すればよいですか。 プログラムでは変数も値も全て文字で書きますが プログラム内で値を直接書くときに書かれたものがどういう値なのかを表すために使用する特定の書式が決められています 処理系によってその仕様は異なりますが Accessでは 文字列:"xxx"または'xxx' 日付時刻:#xxx# 数値:そのまま 文字列を何も囲まないで書けば変数になります ""の中に「"」を書きたいときには2つ重ねるか、[']を使用します >(2)Where句は「"」で囲む。は私の誤解と理解すればよいですか。 Where句は文字列で与えるというのが仕様ですから 「"」または「'」で囲みます Me!商品番号 = "123" という条件を文字列にするために全体を["]で囲みます そのとき123の前後の「"」を[']に書き換えているのです (2つ続きに書き換えてもOKです) "Me!商品番号 = ""123"""

BMac
質問者

お礼

CHRONOS_0さん、丁寧な回答ありがとうございます。 本件、理解致しました。

  • ghsw
  • ベストアンサー率0% (0/0)
回答No.2

>DoCmd.OpenForm "フォーム名", , , "商品番号 = '" & Me!商品番号 & "'" まず、文字列というものを理解してください。 ここで, Me!商品番号 = 123 と数字ならば where句は "商品番号=123" となり、' はいりません。 Me!商品番号 = "123" と文字列ならば where句は 商品番号="123" となりますが全体を文字列にするために "商品番号='123'" とします。 それで"123"を変数のMe!商品番号と置き換えるために、連結記号の&を使って、 "商品番号 = '" & Me!商品番号 & "'" となるのです。 あくまでも、一つの文字列の中に、変数を埋め込んでいると考えると 理解できると思います。

BMac
質問者

お礼

ghswさん、丁寧な回答ありがとうございます。 本件、理解致しました。

  • tossy005
  • ベストアンサー率38% (7/18)
回答No.1

>DoCmd.OpenForm のWhere句の「"」と「'」の使い方についてその仕様を教えて下さい。 DoCmd.OpenForm "フォーム名", , , "商品番号 = '" & Me!商品番号 & "'" の第4引数である"商品番号 = '" & Me!商品番号 & "'"は、条件句が入りますので、関数に渡したいのは「商品番号 = 'Me!商品番号'」といった形式のものになります。 ところが上記のように書くと、VBAには変数なのか文字列なのか区別がつかないのです。 その区別をつけるために、VBAには (1)文字列は""で囲む (2)文字列同士をくっつけたい場合は&を使用する というルールがあります。 それを踏まえてDoCmd.OpenFormの第4引数である "商品番号 = '" & Me!商品番号 & "'" を見てみると、下記のように3つの文字列に別れていることが分かります。 "商品番号 = '"   Me!商品番号  "'" の3つですね。 なぜ3つに分かれているのかというと、2つ目のMe!商品番号がただの文字列ではなく、変数であるからなのです。 VBAでは値の変わらない文字列("商品番号 = '"など)と 変数(Me!商品番号など)をくっつけたい場合、上記のように&でくっつけて表記する必要があるのです。 ですので、DoCmd.OpenForm のWhere句の「"」と「'」の仕様というよりは、VBAの仕様の問題になります。

BMac
質問者

補足

tossy005 さん、丁寧な回答ありがとうございます。 下記2点の不明項目がありますので追加で教えて下さい。  (1)変数(Me!商品番号など)を「'」で囲む場合とはどのような場合と理解すればよいですか。  (2)Where句は「"」で囲む。は私の誤解と理解すればよいですか。 以上、宜しくお願い致します。

関連するQ&A

  • アクセスOpenForm 引数FilterName

    テーブルをレコードソースとしているフォームがあるのですが そのテーブルのtestフィールドに値がいくつかはいっていて、「い」と言う値を抽出した状態で フォームを開きたいのですが Sub test() DoCmd.OpenForm "フォーム1", acNormal, "test ='い'" End Sub これは、意味がないのですか? このコードを実行してフォームを開いても、 testにフィルタは適用されない状態で開きます。 また、ヘルプのFilterNameの項目を見ると ------------------------------------------- 有効なSQLWHERE句を文字列式で指定します。 ただし、WHEREという語を指定する必要はありません。 ------------------------------------------- と書いてありますが、"test ='い'"と言う記載の仕方は間違っていますか? Private Sub Form_Load() Me.Form.Filter = "test ='い'" Me.Form.FilterOn = True End Sub だと、フィルタが適用されます。 OpenForm メソッドを使ってフィルタを適用する方法を教えてください。

  • 「DoCmd.OpenForm」が実行できない(vbaでフォームを開きたい)

    「フォーム1を開く」vbaで行ないたいのですが エラーになってしまいます。 Sub test1() DoCmd.OpenForm , acNormal, フォーム1 End Sub は「変数が定義されていません」と表示され (「変数の宣言を強制する」にチェックを入れています) Sub test2() DoCmd.OpenForm , acNormal, "フォーム1" End Sub は「引数は省略できません」となります。 Sub test1() DoCmd.OpenForm , フォーム1, acNormal End Sub Sub test2() DoCmd.OpenForm , "フォーム1", acNormal End Sub これにしても同じでした。 「OpenForm」をヘルプで調べてみたところ 「expression 」と「FormName」が「 必ず指定します。」でした。 「expression 」がないからだめなのでしょうか? すいません、助けてください。 よろしくお願いします。

  • ACCESS VBAのOpenForm書き方

    ACCESS VBAについて教えてください。 DoCmd.OpenFormのWhereConditionの部分の記述がわからないのです。 1つの条件の場合は問題なく表示できたのですが、複数条件にすると「抽出条件でデータ型が一致しません。」とエラーになってしまいます。 なぜでしょうか? このように記述しています。 DoCmd.OpenForm "会員データ", , , "種別 = '" & Me![種別] & "' AND 会員番号 = '" & Me![会員番号] & "'" 種別、会員番号ともに数値データです。

  • DoCmd.OpenForm メソッド (Acce

    DoCmd.OpenForm メソッド (Access)について文法が分かりません。 何卒、お知恵を借りたく存じます。 よろしくお願いします。 やりたい事は従業員番号と期間を指定してフォームを開きたいのです。 おそらく文法が間違えているのではと思っております。 DoCmd.OpenForm "TargetSelection", acNormal, , "[従業員番号]='" & TList & "' AND [日付]= Between #' & Sday & #' And '# & Eday & #'"

  • ACCESS VBA コマンドDoCmd.OpenFormの引数

    2つの項目で主キーを構成するテーブルを定義しました。 この場合、VBA コマンドを使って登録画面を開く為の コマンドの引数の指定方法がわかりません。 テーブル名: T運転手割当 1)W業務依頼日 <=主キー 2)W使用車両  <=主キー 3)W運転手番号 DoCmd.OpenFormの書式 ■第4引数 WhereCondition/レコード抽出条件(省略可能) テーブルやクエリと連結しているときのレコード抽出条件を指定します。 1)仮に主キーが1つの時、以下の表記で正常に表示されます。 'フォームを開く DoCmd.OpenForm "F運転手割当登録", acNormal, , "W業務依頼日 = " & Me![lstWariate] 2)主キーが2つの時、以下の表記ではF運転手割当画面は表示されるのですが、 肝心のデータがセットされずに空白で表示されます。 'フォームを開く DoCmd.OpenForm "F運転手割当登録", acNormal, , ("W業務依頼日 = " & Me![lstWariate]) & " And " & ("W使用車両 = " & Me![lstWariate]) [lstWariate]とは、データの検索画面で検索結果を表示するリストボックスの名称です。 検索結果から該当データを選択して、個別データの修正画面に移行したいのですが・・・。 Me![lstWariate]の表記が良くないのだと思うのですが、具体的な表記方法が分かりません。 よろしくお願いします。

  • DoCmd.ApplyFilter引数を文字にする

    いつもお世話になっています。 以下のフィルタを作成して使っています。 Private Sub to12_Click() DoCmd.ApplyFilter , "([部署コード] = 1 And [社員番号]=2)" DoCmd.OpenForm "F_登録" Set Forms!F_登録.Recordset = Me.Recordset End Sub DoCmd.ApplyFilter , "([部署コード] = 1 And [社員番号]=2)" の [社員番号]にテキストを使用することになりました。 元テーブルも数値型からテキスト型に変更したのですが、 こうした検索の式に反映するにはどうしたらいいのでしょうか。 お力添えをお願いいたします。

  • ACCESS acDialogで検索画面を開く

    ACCESSで商品コードの検索フォームをacDialogで開いて、商品を選んだあと検索フォームを閉じてpublicの引数をメインフォームで受取っていますが、検索フォームを開いたままにしたい。 今は DoCmd.OpenForm "FM_商品検索", , , , , acDialog Me.商品コード = glbRecstrNo ”FM_商品検索”を開いたままで、メインフォームに商品コードを受け取る方法はありますか? 宜しくお願いします

  • Access すべてのフォームを開く

    おしえてくださいm__m AccessにてWindowを最小化した後に現在開いているフォームを開くVBAを 作成しようとしていますがうまくいきません。 現在はWindowを最小化した後一つのフォームを開くVBAは下記の通り作成しました DoCmd.RunCommand acCmdAppMinimize DoCmd.OpenForm "メインフォーム", acNormal しかしながら現在開いているすべてのフォームをAccess Windowを最小化した後に 開くVBAはどのように記載すればいいでしょうか 皆さまのお知恵をかしてくださいm__m

  • access vba 引数

    ACCESS VBA 引数取得について テキストボックスが横に3つ並んでいてその3つは同じデータのレコードで、 例えば | No | Name  |    Tel    |   ボタン  | |~~1~~|~~~山~~~~|~~99-9999-9999~~| |__更新__| | |~~2~~|~~~川~~~~|~~88-8888-8888~~| |__更新__| | |~~3~~|~~~空~~~~|~~77-7777-7777~~| |__更新__| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ となっていて、ボタンを押して別のフォームを開いてデータの更新をしたいのですが、その押したレコードのNoを引数にして別のフォームを開きたいのです。どのようにコードを書いていいのか分かりません。 今のところ引数はほかにもあるのでそれは取れていて 変数名 = (引数にしたい項目1) 変数名 = 変数名 & (引数にしたい項目2) 変数名 = 変数名 & (引数にしたい項目3) DoCmd.OpenForm "フォーム名", , , , , acDialog, 変数名  (↑openArgs) までは書けています。 押したレコードのNoを引数に加えるというところがどのようにすればいいか分かりません。 教えてください。 よろしくお願いします。m(_ _)m

  • アクセスVBA フィルタの最大件数

    Forms("テーブル1").Filter = "FLD1 = '検索値1' And FLD1 = '検索値2'" ・・・ とandで繋げられる最大数を教えてください。 ヘルプのアクセスの仕様を見ましたが見つけられませんでした。 ただ、クエリでは 「WHERE 句または HAVING 句内の AND の個数 99 」 となっていたので、VBAのフォームでも99なのでしょうか?

専門家に質問してみよう