Excel Data Connection errors on Refresh

后端 未结 4 2037
傲寒
傲寒 2021-02-14 09:08

Solved! See below for solution!

I\'m in Excel 2010 connecting to multiple, seperate Access 2010 db\'s from Excel through PivotTable dat

相关标签:
4条回答
  • 2021-02-14 09:43

    So I had a similar error when I was trying to create a VBA script to refresh an excel workbook automatically at a given time, and there were a few things that I did in my VBA script to get this to work. One of them being disabling background refresh. That could be your issue and you can easily do disable it by going to your connection properties and disabling background refreshing.

    Here is what I did in VBA when I was getting this error, although I will say I was not using it with an MS access db. I had one excel workbook that I used as a 'runner' and it opened up the other books one by one and refreshed their connections. Basically I had a variable for the path and extension and put the names of each workbook into an array and looped through the array.

    I combined the path and extension to give me the full filename of the file, you will see that in the loop.

    This is what my loop looked like :

    For i = LBound(testArray) To UBound(testArray)
        Dim wb As Workbook
        Set wb = Workbooks.Open(path & testArray(i) & ext, 0, False)
    
        'Next I checked to see if the workbook was in protected view and allowed for editing.
        If Application.ProtectedViewWindows.Count > 0 Then
            Application.ActiveProtectedViewWindow.Edit
        End If
    
        'Now comes the part that I believe should help for your case
        wb.Connections(testArray(i) & "This is your connection name").OLEDBConnection.BackgroundQuery = False
        wb.RefreshAll
        wb.Connections(testArray(i) & "This is your connection name").OLEDBConnection.BackgroundQuery = True
    
        wb.SaveAs fileName:= "Thisbook.xlsx"
        wb.Close
    Next i
    

    To get the connection name there are a few ways, including just looking to see what it is manually. For me because I wanted to make it so that I didn't need to manually put in every connection name I used the inherent pattern that I saw with the connections names.

    In my case that was the baseNameOfWorkbook & " POS Report"

    I do believe that you may be getting the errors due to background refreshing. So if you don't need to do this in VBA I would just suggest going to connection properties and disabling it.

    Let me know if this works.

    0 讨论(0)
  • 2021-02-14 09:46

    To clear system memory, you can always run something like this:

    Sub ClearUndo()
    Range("A1").Copy Range("A1")
    End Sub
    

    This will clear the undo stack which houses all the updates to your pivot tables, allowing you to undo them, if you do this in-between refershes it may help you keep memory usage in control.

    Please dis-regard my previous suggestion as I was thinking of a solution that helped me in Access.

    0 讨论(0)
  • 2021-02-14 09:52

    You can use VBA to call your refreshes individually via the activeworkbook.connections object. See this Stack Overflow post for some clues on this method. The more atomistic appoach may allow better insight and control. For example, once you have all the steps in place, you can try inserting DoEvents to solve the issue.

    0 讨论(0)
  • 2021-02-14 09:57

    This is not a full answer, but an attempt to help debug, so that hopefully we can arrive at a solution.

    I believe you can solve this issue by debugging the Connections. Try replacing your Refresh code above (and the replacement with DoEvents) with the following Sub. First, it is possible that displaying the dialog between Refreshes will fix the problem (if the problem is concurrent refreshes, etc). Second, each time it runs, check carefully that nothing has changed. Please report back with any discoveries or info. If you still get the errors, step through the code and report back the line that raises the error.

    Sub ShowDebugDialog()
    
       Dim x As Integer
       Dim i As Integer, j As Integer
       Dim awc As WorkbookConnection
       Dim c As OLEDBConnection
    
       For i = 1 To ActiveWorkbook.Connections.Count
       'For i = ActiveWorkbook.Connections.Count To 1 Step -1
    
          For j = 1 To ActiveWorkbook.Connections.Count
             Set awc = ActiveWorkbook.Connections.Item(j)
             Set c = awc.OLEDBConnection
             x = MsgBox("ConnectionName: " & awc.Name & vbCrLf & _
                  "IsConnected: " & c.IsConnected & vbCrLf & _
                  "BackgroundQuery: " & c.BackgroundQuery & vbCrLf & _
                  "MaintainConnection: " & c.MaintainConnection & vbCrLf & _
                  "RobustConnect: " & c.RobustConnect & vbCrLf & _
                  "RefreshPeriod: " & c.RefreshPeriod & vbCrLf & _
                  "Refreshing: " & c.Refreshing & vbCrLf & _
                  "EnableRefresh: " & c.EnableRefresh & vbCrLf & _
                  "Application: " & c.Application & vbCrLf & _
                  "UseLocalConnection: " & c.UseLocalConnection _
                  , vbOKOnly, "Debugging")
          Next j
    
          Set awc = ActiveWorkbook.Connections.Item(i)
          Set c = awc.OLEDBConnection
          c.EnableRefresh = True
          c.BackgroundQuery = False
          c.Reconnect
          c.Refresh
          awc.Refresh
          c.MaintainConnection = False
       Next i
    
    End Sub
    

    Additional questions you can answer if you're still getting errors:

    • Was BackgroundQuery always false?
    • Was there a perceptable delay between each set of dialogs (indicating Excel is waiting for a refresh to complete) or did they all come up immediately after the last one?
    • Which line of code raises the initial error? If you refresh the Connections in backwards order (by uncommenting the "Step -1" line) do you get the error at the same connection?
    • When you say you can update the connections manually, is this through a different macro or through Data >> Connections >> Refresh?
    • Any errors if you manually select "RefreshAll"?

    Sorry for all the questions but you have to think of everything when debugging nasty connection errors like this.

    0 讨论(0)
提交回复
热议问题