2017-07-07 185 views
0

試圖編輯以前的員工留下的一些舊代碼,並移到更新的系統,但通過簡單地複製最初寫入的代碼得到運行時錯誤'1004' - SQL語法錯誤。如果有人想指出我正確的方向,代碼的副本如下?通過excel運行查詢VBA - 運行時錯誤1004 - SQL語法錯誤

以粗體顯示的部分似乎是它錯誤...

Sub MIMacro() 
' 
' 
    Sheets("MI_Report").Select 
    Cells.Select 
    Selection.ClearContents 

    Dim StartDate As String 

    Sheets("Date").Select 

    StartDate = Range("D2").Value & "-" & Range("C2").Value & "-" & Range("B2").Value & " 00:00:00" 

    Dim EndDate As String 

    EndDate = Range("D3").Value & "-" & Range("C3").Value & "-" & Range("B3").Value & " 00:00:00" 

    Sheets("MI_Report").Select 

    Dim MySql As String 
    MySql = "SELECT * FROM `W:\MI Reports\Imprint Reports.mdb`.XGSNOR_MI Katie L XGSNOR_MI Katie L WHERE (XGSNOR_MI Katie L.DelDate>={ts '" & StartDate & "'} And XGSNOR_MI Katie L.DelDate<={ts '" & EndDate & "'}) ORDER BY XGSNOR_MI Katie L.JobNo" 

    With ActiveSheet.QueryTables.Add(Connection:=Array(Array(_ 
     "ODBC;DSN=MS Access Database;DBQ=W:\MI Reports\Imprint Reports.mdb;DefaultDir=W:\MI Reports;DriverId=25;FIL=MS Access;MaxBufferS" _ 
     ), Array("ize=2048;PageTimeout=5;")), Destination:=Range("A1")) 
     .CommandText = Array(MySql) 
     .Name = "Query from MS Access Database" 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = True 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .BackgroundQuery = True 
     .RefreshStyle = xlOverwriteCells 
     .SavePassword = True 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .PreserveColumnInfo = True 
     **.Refresh BackgroundQuery:=False** 
    End With 

    Columns("E:E").Select 
    Selection.NumberFormat = "General" 
    Columns("C:C").Select 
    Selection.NumberFormat = "m/d/yyyy" 

    Range("A1").Select 
    Selection.End(xlDown).Select 
    lr1 = Selection.Row 

    Range("G1").Select 
    ActiveCell.FormulaR1C1 = "Cost" 
    Range("H1").Select 
    ActiveCell.FormulaR1C1 = "Total Pick Cost" 
    Range("G2").Select 

    Dim cost As Double 
    Dim extra As Double 
    Dim total As Double 

    cost = 7# 
    extra = 0.9 
    total = 0# 
    temp = "neworder" 

    Dim e As Integer 
    For e = 2 To lr1 

     If temp = "neworder" Then 
      temp = Range("A" & e).Value 
      Range("G" & e).Select 
      ActiveCell.FormulaR1C1 = cost 
      total = total + cost 
     Else 
      temp = Range("A" & e).Value 
      Range("G" & e).Select 
      ActiveCell.FormulaR1C1 = extra 
      total = total + extra 
     End If 

     temp2 = Range("A" & e + 1).Value 

     If temp <> temp2 Then 
      temp = "neworder" 
      Range("H" & e).Select 
      ActiveCell.FormulaR1C1 = total 
      total = 0 
     End If 

    Next e 

    Columns("G:H").Select 
    Selection.NumberFormat = "$#,##0.00" 

    Range("A1").Select 

End Sub 
+0

這不是代碼,SQL查詢格式不正確,只是在該行上執行。 –

+0

你有沒有在你的機器上設置DSN? – braX

+0

這是您聲明的FROM部分。它應該包含一個表,用逗號分隔的多個表,或者一些更復雜的東西,並且不應該有任何空格:'FROM W:\ MI Reports \ Imprint Reports.mdb.XGSNOR_MI Katie L XGSNOR_MI Katie L '。這是無效的,我不知道你在那裏試圖做什麼。如果您正在查詢外部數據庫,則應該只在其中放入數據庫地址,但是您將與DSN指向的地址相同。那些名稱是表名還是字段名? –

回答

0

我沒那麼熟悉是在查詢中使用ODBC序列,所以不能保證這會工作:

MySql = "SELECT * FROM [XGSNOR_MI Katie L] WHERE ([XGSNOR_MI Katie L].DelDate>={ts '" & StartDate & "'} And [XGSNOR_MI Katie L].DelDate<={ts '" & EndDate & "'}) ORDER BY [XGSNOR_MI Katie L].JobNo"

同時更換MySql =線:以下行應該被校正:

With ActiveSheet.QueryTables.Add(Connection:= _ 
     "ODBC;DSN=MS Access Database;DBQ=W:\MI Reports\Imprint Reports.mdb;DefaultDir=W:\MI Reports;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;", _ 
     Destination:=Range("A1")) 
+0

不,同樣的錯誤似乎輟學的「.REFRESH BackgroundQuery:=假」 如果我參加了:出該字符串TI獲取過去那種和滴出來 昏暗Ë作爲整數 對於e = 2到lr1 –

+0

'ActiveSheet.QueryTables.Add(Connection:= Array(Array(「ODBC; DSN = MS Access Database; DBQ = W:\ MI Reports \ Imprint Reports.mdb; DefaultDir = W:\ MI Reports; DriverId = 25; FIL = MS Access; MaxBufferSize = 2048; PageTimeout = 5;「)),Destination:= Range(」A1「))'這樣在一行上,而不是分散在多行上,這有幫助嗎? –

+0

似乎已經修復它,非常感謝,不知道爲什麼它用它來工作頭腦。 –