Чтобы дать краткий обзор цели этого макроса, я пытаюсь получить сумму наличных денег между определенными датами на основе набора параметров. Я продолжаю получать ошибку в VBA, когда пытаюсь запустить SQL-запрос с датой. Я не уверен, в чем проблема, но я думаю, что это связано с тем, как я форматировал дату. Я попытался запустить его несколькими способами, но продолжаю получать синтаксическую ошибку, связан ли она с «a», «#» или «table».Вопросы VBA при попытке запустить SQL-запрос между двумя датами
Вот запрос, который я использую. Любая помощь будет принята с благодарностью.
Sub GetCashBalance()
Dim cn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String
Dim StartDate As String
Dim EndDate As String
StartDate = InputBox("Enter Start Date in mm/dd/yy format.")
EndDate = InputBox("Enter End Date in mm/dd/yy format.")
SQL = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=master;Data Source=SERVER\ODS"
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.Open SQL
Set rs = cn.Execute("SELECT SUM(a.CASH)" & _
"FROM CUSTOMER_DATA.dbo.TRANSACTION_HISTORY a" & _
"LEFT JOIN CUSTOMER_DATA.dbo.DAILY_TRANSACTION b" & _
"ON a.T01_KEY = b.T01_KEY" & _
"WHERE PROC_DATE BETWEEN #StartDate# AND #EndDate#" & _
"AND a.CODE NOT IN ('22','23','M','2-L','36-R')" & _
"AND isnull(a.DESCRIPTION, '') NOT IN ('01','02','03','0DO1','0NF2');")
If Not rs.EOF Then
Sheets(7).Range("A40").CopyFromRecordset rs
rs.Close
Else
MsgBox "Error", vbCritical
End If
cn.Close
End Sub
Привет, спасибо за ответ. Я все еще получаю неправильную синтаксическую ошибку, но на этот раз она находится рядом с «а». Это потому, что VBA не нравится «a» и «b» после предложения FROM в SQL-запросе? – nam24
Я знаю, почему я получил неправильную синтаксическую ошибку вокруг 'a'. Когда я удалил конец продолжения строки («& _») и имел запрос в одной строке в VBA, все было отлично. С учетом сказанного, есть ли способ, которым я могу использовать несколько строк, потому что у меня больше кода, который не может быть помещен в одну строку? Это то, что вы имели в виду, используя ADODB.Command и Parameters вместо конкатенации? Извините, если вы уже ответили на это, но я довольно новичок в VBA. – nam24
Я понял. Я забыл поставить пробел перед цитатами. Спасибо за вашу помощь. – nam24