アプリ版:「スタンプのみでお礼する」機能のリリースについて

オラクルサーバーよりExcelにDataを抽出するマクロを作成しましたが、抽出条件の部分で日付指定を行う部分で変数を使うと「Refresh BackgroundQuery:=False」の部分で以下のエラーが発生します。
『実行時エラー'1004':一般ODBCエラー』
変数を使用しない場合には問題なくDataの抽出が可能なのですが、変数の書き方に問題があるのでしょうか?
お手数をお掛け致しますが、どなたかご教授頂けませんでしょうか?
ちなみに以下が内容です。
※サーバー名やIDやPasswordは任意の文字に変更して載せてます。

Dim i As String
i = Range("A1").Value
With Selection.QueryTable
.Connection = "ODBC;DSN=RRRR;UID=TTTT;PWD=tttt;SERVER=cccc,vvvv;"
.CommandText = Array( _
"SELECT T_ARRIVAL3.ARR_DTXX, T_ARRIVAL3.LOT_NOXX, T_ARRIVAL3.SEQ_NOXX, T_ARRIVAL3.CUST_CDX, T_ARRIVAL3.PROS_NMX, T_ARRIVAL3.NUM_QTYX, T_ARRIVAL3.BI_DTXXX, T_ARRIVAL3.OEM_NOXX, T_ARRIVAL3.REKI_CDX, T_AR" _
, _
"RIVAL3.EMP_CDXX, T_ARRIVAL3.UP_DTXXX, T_ARRIVAL3.UP_TMXXX, T_ARRIVAL3.UP_MACID, T_ARRIVAL3.MARK_LOT, T_ARRIVAL3.DIVI_FLG, T_ARRIVAL3.RETN_FLG" & Chr(13) & "" & Chr(10) & "FROM TAKAKI.T_ARRIVAL3 T_ARRIVAL3" & Chr(13) & "" & Chr(10) & "WHERE (T_ARRIVAL3.UP_D" _
, "TXXX>=i)" & Chr(13) & "" & Chr(10) & "ORDER BY T_ARRIVAL3.UP_DTXXX, T_ARRIVAL3.UP_TMXXX")
.Refresh BackgroundQuery:=False
End With
End Sub

A 回答 (1件)

.CommandText = "SELECT T_ARRIVAL3.ARR_DTXX, T_ARRIVAL3.LOT_NOXX, T_ARRIVAL3.SEQ_NOXX, T_ARRIVAL3.CUST_CDX," & _


           " T_ARRIVAL3.PROS_NMX, T_ARRIVAL3.NUM_QTYX, T_ARRIVAL3.BI_DTXXX, T_ARRIVAL3.OEM_NOXX," & _
           " T_ARRIVAL3.REKI_CDX, T_ARRIVAL3.EMP_CDXX, T_ARRIVAL3.UP_DTXXX, T_ARRIVAL3.UP_TMXXX," & _
           " T_ARRIVAL3.UP_MACID, T_ARRIVAL3.MARK_LOT, T_ARRIVAL3.DIVI_FLG, T_ARRIVAL3.RETN_FLG" & _
        " FROM TAKAKI.T_ARRIVAL3 T_ARRIVAL3" & _
        " WHERE (T_ARRIVAL3.UP_DTXXX>=" & i & ")" & _
        " ORDER BY T_ARRIVAL3.UP_DTXXX, T_ARRIVAL3.UP_TMXXX"

このようにしてみてください。
(上記Command文をそのままコピーペーストして試したほうが良)

Array(...となっているのはマクロ記録のなごりです。長文の場合Arrayで分割して記録されます。
通常は、そのまま文字列で繋いでも差し支えありません。

問題の変数部分ですが、
" WHERE (T_ARRIVAL3.UP_DTXXX>=i)"
という書き方だと『i』という文字列そのものを記述している事になります。
" WHERE (T_ARRIVAL3.UP_DTXXX>=" & i & ")"
というように、"文字列" & 変数 & "文字列" と記述しなければなりません。

Sub try()
  Dim i As String

  i = Range("A1").Value
  MsgBox " WHERE (T_ARRIVAL3.UP_DTXXX>=i)"
  MsgBox " WHERE (T_ARRIVAL3.UP_DTXXX>=" & i & ")"
End Sub
    • good
    • 0
この回答へのお礼

御回答、有難うございます!
早速試してみたところ万事上手く行きました。
投稿してから数日経過しており、半分諦めていたので本当に嬉しいです。
御親切且つ御丁寧に御説明頂き、本当に有難うございました。
どうしてもこの部分が上手く行かずに1ヶ月以上躓いた状態でした。
変数の書き方が拙かったのですね。
非常に勉強になりました。

お礼日時:2009/12/28 18:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!