需要在excel中刷新数据时运行VBA宏

需要在excel中刷新数据时运行VBA宏,vba,excel,Vba,Excel,我试图提示宏在数据刷新时运行。我有需要运行生成的宏,但是我遇到了一个问题,即没有使用新值,因为嵌入在工作表中的宏是使用ActiveX ComboBox调用的 我发现有几个例子,人们提到AfterRefresh和BeforRefresh,但我认为我误解了这将如何生效,并将其称为宏 我目前正在运行ComboBoxs,因此有多个 Private Sub ComboBox22_Change() 'do stuff End Sub. 但我需要在数据刷新时执行“do stuff”,包括在工作表打开时自动执

我试图提示宏在数据刷新时运行。我有需要运行生成的宏,但是我遇到了一个问题,即没有使用新值,因为嵌入在工作表中的宏是使用ActiveX ComboBox调用的

我发现有几个例子,人们提到AfterRefresh和BeforRefresh,但我认为我误解了这将如何生效,并将其称为宏

我目前正在运行ComboBoxs,因此有多个

Private Sub ComboBox22_Change()
'do stuff
End Sub.
但我需要在数据刷新时执行“do stuff”,包括在工作表打开时自动执行的刷新

我不想将刷新绑定到特定的框,因为刷新的项不依赖于任何一个数据更改实例

非常感谢您的帮助


多谢各位

在这种情况下,工作表更改事件可能会有所帮助

右键单击工作表选项卡,选择“查看代码”,选择“工作表”,然后选择“更改”

当特定范围的单元格被更改时,代码将自动生效


您还可以使用“数据透视表更新事件”来运行宏。您的设置方式与上面的DaveExcel答案类似

所讨论的连接可能不是透视表,但您可以使用一个小而快速的透视表作为触发器

将数据透视表设置为与连接同时更新(例如,设置为每5分钟自我刷新一次或在工作簿打开时自动刷新)。

您的回答中有以下注释:“我发现
工作表\u change
对此很有用,但不是理想的答案,因为自动刷新不会触发更改事件?但会提示一个计算。如果你有办法解决这个问题,那就有用了!"
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub    ' this stops code error if more than one cell is changed at once

    If Not Application.Intersect(Target, Me.Range("A1:C10")) Is Nothing Then    ' indicates the Target range
        MsgBox "You have changed " & Target.Address & " to " & Target
    End If

End Sub