首页 > 解决方案 > VBA FOR循环中可能的循环

问题描述

我有一个带有一些数据透视表的 Excel 文件,其中有一个宏可以打开 Excel 源文件,更新不同的数据透视表,最后它应该关闭源文件。如果我评论 FOR 循环,它会正确打开和关闭 SOURCE 文件,所以我怀疑循环中存在问题。

谢谢你的任何建议

Option Explicit
Private Sub Workbook_Open()
    Call aggiorna
End Sub

Sub aggiorna()
    On Error GoTo ErrHandler
    Application.ScreenUpdating = False
    
    Dim wrb As Workbook
    Dim pt As PivotTable
    
    ' Apre in sola lettura
    Set wrb = Workbooks.Open("C:\Users\Saila\Desktop\Ore Operatori_2018.xlsx", True, True)
    
    For Each pt In ActiveSheet.PivotTables
        pt.RefreshTable
    Next pt
        
    ' Chiude Sorgente
    wrb.Close
    Set wrb = Nothing
    
ErrHandler:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

标签: excelvbaexcel-2016

解决方案


很可能代码在数据透视表循环期间引发了一些错误,然后它跳转到ErrHandler:标签,从而跳过wrb.CloseSet wrb = Nothing

将这些后面的语句移到ErrHandler:标签之后

Sub aggiorna()
    On Error GoTo ErrHandler
    Application.ScreenUpdating = False

    Dim wrb As Workbook
    Dim pt As PivotTable

    ' Apre in sola lettura
    Set wrb = Workbooks.Open("C:\Users\Saila\Desktop\Ore Operatori_2018.xlsx", True, True)

    For Each pt In ActiveSheet.PivotTables
        pt.RefreshTable
    Next pt


ErrHandler:
    ' Chiude Sorgente
    wrb.Close
    Set wrb = Nothing

    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

顺便说一句,您可能想要评论On Error GoTo ErrHandler并查看代码失败的位置和原因,然后增强您的代码以适当地管理错误


推荐阅读