• 締切済み

Access DoCmd.OpenFormの引数

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

みんなの回答

  • 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