在EXCEL vba中杀死连接

Fil*_*ndo 7 excel vba excel-vba

我试图从我的工作簿中删除连接,但我仍然发现运行时错误5.我不知道该怎么做,因为在我的其他项目中它的工作原理.

谢谢你的建议.来自捷克共和国的问候.

    Sub refresh_all()

    Dim i As Integer
    '~~> refresh workbook query
    Application.DisplayAlerts = False

    Workbooks("UAC_report_p.xlsb").Activate

    '~~> wait for refresh then execute Call save_as
    Do Until Application.CalculationState = xlDone
    DoEvents
    Loop

    ActiveWorkbook.RefreshAll

    Workbooks("UAC_report_p.xlsb").Activate

    '~~>kill all connections
        For i = 1 To ActiveWorkbook.Connections.Count
            If ActiveWorkbook.Connections.Count = 0 Then Exit For
            ActiveWorkbook.Connections.Item(i).Delete
            i = i - 1
        Next i

        Application.DisplayAlerts = True
    End Sub
Run Code Online (Sandbox Code Playgroud)

PS收到错误

ActiveWorkbook.Connections.Item(i).Delete
Run Code Online (Sandbox Code Playgroud)

jac*_*ouh 8

您可以在for循环中尝试删除,使用VBA中的最小索引1(One = 2/2)代替i变量:

ActiveWorkbook.Connections.Item(1).Delete
Run Code Online (Sandbox Code Playgroud)

代替

ActiveWorkbook.Connections.Item(i).Delete
Run Code Online (Sandbox Code Playgroud)

删除时,ActiveWorkbook.Connections.Count()将减少,某些.item(i)不再存在.

或这个:

 '~~>kill all connections
    For i = ActiveWorkbook.Connections.Count To 1 Step -1
        ActiveWorkbook.Connections.Item(i).Delete
    Next
Run Code Online (Sandbox Code Playgroud)


小智 6

为什么不使用连接集合的内置枚举器?

Public Sub DeleteAllConnectionsInWorkbook()
    Dim aConn as Object
    For Each aConn in ActiveWorkbook.Connections
        aConn.Delete
    Next aConn
End Sub
Run Code Online (Sandbox Code Playgroud)