SQL初心者です。VBAに以下のように記載したのですが、赤い文字になり困っています。
StrSQL = "SELECT TOP 1 基4, 変位4, №" & _
"FROM T_01_地耐力"
"WHERE T_01地耐力.№ Between 1 And 9" &
"ORDER BY T_01_地耐力.変位4 DESC , T_01_地耐力.№ DESC;"
お願いいたします
SQL初心者です。VBAに以下のように記載したのですが、赤い文字になり困っています。
StrSQL = "SELECT TOP 1 基4, 変位4, №" & _
"FROM T_01_地耐力"
"WHERE T_01地耐力.№ Between 1 And 9" &
"ORDER BY T_01_地耐力.変位4 DESC , T_01_地耐力.№ DESC;"
お願いいたします
行連結文字
VBAは基本的に1行1命令です
行を続けて1命令とする場合には
_
([スペース]+[アンダースコア])を最後の行を除いた各行の行末に記述しますStrSQL = "SELECT TOP 1 基4, 変位4, №" & _
"FROM T_01_地耐力"
"WHERE T_01地耐力.№ Between 1 And 9" &
"ORDER BY T_01_地耐力.変位4 DESC , T_01_地耐力.№ DESC;"
質問のコードでは1行目に続けて2行目までは1命令として処理されますが、3行目・4行目はそれぞれ独立した1命令と処理されるため不正なコードとしてコンパイルエラーになります
ついでにですが、そのまま質問のコードのような連結を行うとクエリとして実行できないSQL文になります
そのままVBAで連結された場合
SELECT TOP 1 基4, 変位4, №FROM T_01_地耐力WHERE T_01地耐力.№ Between 1 And 9ORDER BY T_01_地耐力.変位4 DESC , T_01_地耐力.№ DESC;
となります。VBAでは文字列に改行をそのまま入力することはできません
のように、改行を含んだ文字列とするためには改行を入れる部分に代替のコードを記述する必要があります。たとえば
vbNewLine
を使いますhirotonがSQL文をVBAで作る場合は簡単なものであれば次のような記述にしたりします
・1行目は代入する文字を記述せず、
_
で即座に終えます・2行目のSQLの開始行にも先頭に空白スペースを入れます
・改行コードは使いません
これで、目的のSQL文をそっくりそのまま使いつつ、VBA記述のルールから逸脱せず、ミスしにくい記述ができます
VBAは基本的に1行1命令、そこから分かっていませんでした。「& _」の意味も...
とっても分かりやすくて助かりました。本で見ても検索しても理解できなくて。クエリのSQLを張り付けて削除したり付け加えたり、深みにハマっておりました。ありがとうございました。