数据刷新时macros不运行?

我写了下面的代码来检测单元格的值的变化,然后运行一个macros,但是当数据由于数据连接而刷新时,代码不起作用。

Private Sub worksheet_change(ByVal target As Range) If target.Address = "$A$2" Then If target.Value = 1 Then taskID = Shell("c:\imawesome.bat", vbNormalFocus) End If If target.Value = 0 Then taskID = Shell("c:\Sender.bat", vbNormalFocus) End If End If End Sub 

该代码只适用于手动input单元格中的数据。 请build议在刷新数据时运行的代码。

以下这篇微软文章KB213187,并假设你的数据连接是一个查询表

你可以试试这个

创build一个新的模块,并把它放在这个代码

 Public WithEvents qt As QueryTable Private Sub qt_BeforeRefresh(Cancel As Boolean) 'do your stuff here End Sub 

然后在另一个模块上创build一个类

 Dim X As New Class1 Sub Initialize_It() Set X.qt = Thisworkbook.Sheets(1).QueryTables(1) End Sub 

并确保每次打开文档时都运行Initialize_It。

请注意,此代码仅适用于每个文档的一个qquerytable,如果您有更多,则需要进行修改。

希望能帮助到你。

如果worksheet_change不会触发,请尝试使用worksheet_calculate事件。 它在任何单元格计算时执行,所以你可以为你想要的单元格和(之前)值进行testing。