2016-06-24 18 views
0

vbaからクエリを作成しようとしました。私はどのようにVBAの構文内で変数を渡すかを理解しようとしています。どこに私の馬鹿を見せてくれるの?VBA変数をアクセスクエリに渡す(Excel VBA)

私はこれを試しましたが、ポップアップする自動化エラーがあります。私はあなたが文法が間違っているときにオートメーションエラーが出てくることを気付いたので、うまくいけばそれは小さいものですか?

すべてのヘルプは非常に注文番号が数字で、引用符を使用していないと仮定すると、

Sub GetDataFromAccess() 
    Dim cmd As New ADODB.Command, rs As ADODB.Recordset 
    Dim recordNum As Integer 

    recordNum = 7 

    cmd.ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Ashleysaurus\Desktop" & "\" & "xyzmanu3.accdb" 
    cmd.CommandType = adCmdText 

    cmd.CommandText = "SELECT * FROM Invoice WHERE OrderNumber <" & "'" & recordNum & "'" & "ORDER BY OrderNumber ASC" 

    Set rs = cmd.Execute 
    Sheet1.Range("A2").CopyFromRecordset rs 

    rs.Close 
    cmd.ActiveConnection.Close 

    Debug.Print "Done!" 
End Sub 
+1

数字の前後に一重引用符を使用しますか? '... er <"&recordNum& "ORD ...'は引用符の中にスペースを入れるか、文字列が混乱しているかを確認してください。 –

+0

スペースはそれをしました、そう、私はそれが何か単純だと分かっていました。私は彼らが必要ではなかった単引用符を削除しました。回答として投稿し、おいしいフィードバックを受け取る:) –

+1

ああ、ポールXにそれを与える、私は今日怠惰な感じです。 –

答えて

2

を高く評価しています。 、VBAクエリを構築するパラメータ化クエリを考慮し、引用符のいずれかの必要性を回避するために、学習しながら

cmd.CommandText = "SELECT * FROM Invoice WHERE OrderNumber <" & recordNum & " ORDER BY OrderNumber ASC" 
+0

あなたは見積もりを忘れてしまいましたが、返信として確認できるようになったときにフィードバックが届きました –

3

: はまた、あなたは、ORDER BYの前にスペースがあることを確認してください!これは、動的SQLクエリで値を渡す際に、すべての言語で業界のベストプラクティスです。

Sub GetDataFromAccess() 
    Dim cmd As New ADODB.Command, rs As ADODB.Recordset 
    Dim recordNum As Integer 

    recordNum = 7 

    With cmd 
     .ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _ 
       & "Data Source=C:\Users\Ashleysaurus\Desktop" & "\" & "xyzmanu3.accdb" 
     .CommandType = adCmdText 
     .CommandText = "SELECT * FROM Invoice" _ 
         & " WHERE OrderNumber < ? ORDER BY OrderNumber ASC"  
    End With 

    cmd.Parameters.Append cmd.CreateParameter("recordNumParam", adInteger, adParamInput, 10) 
    cmd.Parameters(0).Value = recordNum 

    Set rs = cmd.Execute 
    Sheet1.Range("A2").CopyFromRecordset rs 

    rs.Close 
    cmd.ActiveConnection.Close 

    Debug.Print "Done!" 

End Sub 
+0

私はこのフィードバックが大好きです。私はこのリンクを保存し、調整することを学ぶが、現在私はまだそれを "動作させる"方法を知っている? –

+0

あなたが私に役立ついくつかのドキュメンテーションをリンクしたい場合は、それは膨らむでしょう –

+1

私はあなたを聞いています。あなたが行くようにそれを学ぶ。 Googleは、多くの、多くの、多くのチュートリアル、ブログ、投稿、その使用と重要性に関するその他の答えがあるため、パラメータ化されたクエリ*のあなたの友人です – Parfait

関連する問題