我一直对这个问题感到沮丧……我只是想在用户单击“全部刷新”并且刷新完成时触发一些代码。该解决方案似乎很简单,连接 QueryTable_AfterRefresh 事件,但是,此方法或其他任何常规方法都无法解决我的问题。
在这一点上,我有一个不太理想的解决方法。我正在对表/ ListObject范围使用“ Worksheet_Change ”事件以及“ 相交”检查,以查看表是否已更新。 这行得通,但我还有用户可以修改的其他列(在右侧添加),这当然还会触发事件,导致我的AfterRefresh代码在不应该运行时运行。我希望有人可能知道解决方案,但以防万一,以下是遇到类似问题的任何人的代码变通方法。 注意:该代码位于“ Sheet”对象代码中,但可以轻松修改以在“ ThisWorkbook”对象代码中使用。
Work Around:
Private Sub Worksheet_Change(ByVal Target As Range)
Debug.Print "[Worksheet_Change] - Name: " & ActiveSheet.Name
Dim shtSheet As Worksheet
Dim lsoTable As ListObject
Set shtSheet = ThisWorkbook.Sheets("Sheet1")
Set lsoTable = shtSheet.ListObjects("Data")
If Intersect(Target, lsoTable.Range) Is Nothing Then
Debug.Print "[Worksheet_Change] - Range [" & Target.Address & "] does NOT intersect with lso [" & lsoTable.Range.Address & "]"
Else
Debug.Print "[Worksheet_Change] - Range [" & Target.Address & "] DOES intersect with lso [" & lsoTable.Range.Address & "]"
End If
End Sub