Microsoft Excel - Refresh query with run time error 1004 general ODBC error

Asked By Cherifa Hima on 13-Feb-12 05:09 PM

Hi,

I am trying to refresh a query and it gives me this error: run time error 1004 general ODBC error. I am using the below VBA code. The same code worked fine last month. When I get to this code "  Worksheets("Raw Data").QueryTables(1).Refresh BackgroundQuery:=False" I get the error message. By the way, the query is imorting data from excel file. Thanks.


Sub GenerateProjectReports()
    Dim rngProjects As Range, rngProject As Range
    Dim sProject As String, sSubject As String, sDevelEmail As String
    Set rngProjects = Names("vbProjects").RefersToRange
    For Each rngProject In rngProjects.Cells
    sProject = rngProject.Value
    Range("vbProjectCode").Value = sProject
     
   Worksheets("Raw Data").QueryTables(1).Refresh BackgroundQuery:=False
   
    Worksheets("Raw Data").Select
   
    Sheets("Raw Data").Columns("P:P").Select
     Selection.NumberFormat = "m/d/yyyy"
    Worksheets("PO - Data").QueryTables(1).Refresh BackgroundQuery:=False
    While Worksheets("Raw Data").QueryTables(1).Refreshing
    Wend
    While Worksheets("PO - Data").QueryTables(1).Refreshing
    Wend
   Worksheets("Spending by External Vendors").Columns("A:H").EntireColumn.AutoFit
   Worksheets("Spending By Internal Vendors").Columns("A:H").EntireColumn.AutoFit
   Worksheets("Open Purchase Order").Columns("A:H").EntireColumn.AutoFit
  
    If Range("vbRecordCount").Value > 0 Then
      sFilename = Range("vbFileName")
      sDevelEmail = Range("vbDevEmail")
      sSubject = Range("vbSubject")
    Sheets("GL VIEW").PivotTables(1).RefreshTable
    Sheets("Spending By Internal Vendors").PivotTables(1).RefreshTable
   Sheets("Open Purchase Order").PivotTables(1).RefreshTable
   Sheets("Spending by External Vendors").PivotTables(1).RefreshTable
    Worksheets("Spending by External Vendors").Columns("A:H").EntireColumn.AutoFit
   Worksheets("Spending By Internal Vendors").Columns("A:H").EntireColumn.AutoFit
   Worksheets("Open Purchase Order").Columns("A:H").EntireColumn.AutoFit
     
    If Range("vbRecordCount").Value > 1 Then
   Sheets("GL VIEW").Select
   Rows("5:5").Select
   Selection.NumberFormat = "m/d/yyyy"
  
   Sheets("GL VIEW").PivotTables(1).RefreshTable
   Sheets("GL VIEW").Range("C5").Group Start:=True, End:=True, periods:=Array(False, False, False, False, True, False, False)
   Sheets("Spending by External Vendors").Select
   Rows("9:9").Select
   Selection.NumberFormat = "m/d/yyyy"
   Sheets("Spending by External Vendors").PivotTables(1).RefreshTable
   Sheets("Spending by External Vendors").Range("D8").Group Start:=True, End:=True, periods:=Array(False, False, False, _
    False, True, False, False)
     Sheets("Spending By Internal Vendors").Select
   Rows("9:9").Select
   Selection.NumberFormat = "m/d/yyyy"
    Sheets("Spending By Internal Vendors").PivotTables(1).RefreshTable
    Sheets("Spending By Internal Vendors").Range("D8").Group Start:=True, End:=True, periods:=Array(False, False, False, _
    False, True, False, False)
    End If
    Sheets("Open Purchase Order").PivotTables(1).RefreshTable
    'Sheets("2008 PIVOT").PivotTables(1).RefreshTable
    'Sheets("2009 PIVOT").PivotTables(1).RefreshTable
      
    Sheets(Array("Operational Cost", "Raw Data", "GL VIEW", "Open Purchase Order", "Spending By Internal Vendors", "Spending by External Vendors", "PO - Data", "Month Budget", "YTD Budget", "Year Budget", "Month Forecast", "YTD Forecast", "Year Forecast")).Copy
   
   Sheets("Raw Data").Visible = False
    Sheets("GL VIEW").Visible = False
    Sheets("PO - Data").Visible = False
    Sheets("Month Budget").Visible = False
    Sheets("YTD Budget").Visible = False
   Sheets("Year Budget").Visible = False
    Sheets("Month Forecast").Visible = False
    Sheets("YTD Forecast").Visible = False
   Sheets("Year Forecast").Visible = False
    ActiveWorkbook.UpdateLinks = xlUpdateLinksNever
     
     ' to give the file the xlsm for compatibility mode I changed the name of the file in the cost report from xls to xlms and I added file format
    ActiveWorkbook.SaveAs sFilename, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
     
     
    ActiveWorkbook.Close
   
    End If
    If rngProject = 0 Then Exit Sub
    Next rngProject
  
  
End Sub
Anoop S replied to Cherifa Hima on 14-Feb-12 12:19 AM
Add this to the code below your connection parameters. It will print out the exact ODBC error codes encountered


With Worksheets(1).QueryTables(1)
    '.Refresh
    Set errs = Application.ODBCErrors
    If errs.Count > 0 Then
      Set r = .Destination.Cells(1)
      r.Value = "The following errors occurred:"
      c = 0
      For Each er In errs
        c = c + 1
        r.Offset(c, 0).Value = er.ErrorString
        r.Offset(c, 1).Value = er.SqlState
      Next
    Else
      MsgBox "Query complete: all records returned."
    End If
End With
Asked By Cherifa Hima on 14-Feb-12 09:37 AM
Thanks. However, when I try to record a macro to refresh the data I receive this message : {Microsoft} {ODBC Excel driver} Too few parameters. Expected 2.
Cherifa Hima replied to Anoop S on 14-Feb-12 10:01 AM
Thanks. But just when I excecute the first line of your code I got the same message of ODBC error.
I don't understand why this code worked fine last year and last month and is not working this month.