2017-07-07 2 views
0

Versuchen, einige alten Code von einem früheren Mitarbeiter zu bearbeiten und über zu einem aktualisierten System, sondern einfach durch Kopieren der Code, der ursprünglich geschrieben wurde I Erhalte den Laufzeitfehler '1004' - SQL Syntax Error. Eine Kopie des Codes ist unten, wenn jemand mich in die richtige Richtung weisen möchte?Führen Sie eine Abfrage von Zugriff über Excel VBA - Runtime Fehler 1004 - SQL Syntax Error

in fett Der Teil scheint zu sein, wo es Fehler ...

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

Es ist nicht der Code, die SQL-Abfrage ist schlecht formatiert und wird nur in dieser Zeile ausgeführt. –

+0

Haben Sie den DSN auf Ihrem Computer eingerichtet? – braX

+0

Dies ist der FROM-Teil Ihrer Aussage. Es sollte eine Tabelle, mehrere durch Kommata getrennte Tabellen oder etwas komplexere Dinge enthalten, und es sollte keine Leerzeichen enthalten: 'FROM W: \ MI Berichte \ Impressum Berichte.mdb.XGSNOR_MI Katie L XGSNOR_MI Katie L '. Das ist nicht gültig und ich weiß nicht genau, was Sie dort machen wollen. Sie sollten nur dann eine Datenbankadresse eingeben, wenn Sie eine externe Datenbank abfragen, aber Sie geben dieselbe Adresse an, auf die Ihr DSN verweist. Und sind diese Namen Tabellennamen oder Feldnamen? –

Antwort

0

ich mit ODBC-Sequenzen nicht so vertraut sind, die in dieser Abfrage verwendet werden, so dass keine Garantien dies funktionieren wird:

Ersetzen Sie die MySql = Linie mit

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"

auch: die folgenden Zeilen korrigiert werden sollte:

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

Nah um LR1, gleiche Fehler scheinen auf drop out ".Refresh Background: = false" Wenn ich nehme das: heraus, dass diese Zeichenfolge ti Vergangenheit, die bekommt und fällt auf Dim e As Integer Für e = 2 bis lr1 –

+0

'ActiveSheet.QueryTables.Add (Verbindung: = Array (Array (" ODBC; DSN = MS Access Datenbank; DBQ = W: \ MI Berichte \ Imprint Reports.mdb; DefaultDir = W: \ MI Berichte; DriverId = 25; FIL = MS Access; MaxBufferSize = 2048; PageTimeout = 5; ")), Destination: = Bereich (" A1 "))' hilft das in einer Zeile, anstatt über mehrere Zeilen verteilt zu sein? –

+0

Scheint, es repariert zu haben, vielen Dank, Keine Ahnung, warum es verwendet wurde, um Geist zu arbeiten. –

Verwandte Themen