刷新数据时宏不运行?

时间:2012-06-04 19:37:43

标签: excel vba excel-vba

我编写了以下代码来检测单元格值的变化,然后运行宏,但是当数据因数据连接而刷新时代码不起作用。

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

只有在手动输入单元格中的数据时,代码才有效。 请建议刷新数据时运行的代码。

2 个答案:

答案 0 :(得分:1)

关注此微软文章KB213187并假设您的数据连接是可查询的

你可以试试这个

创建一个新模块并将此代码放入其中

Public WithEvents qt As QueryTable

Private Sub qt_BeforeRefresh(Cancel As Boolean)

  'do your stuff here

End Sub

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

Dim X As New Class1

Sub Initialize_It()
  Set X.qt = Thisworkbook.Sheets(1).QueryTables(1)
End Sub

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

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

希望它有所帮助。

答案 1 :(得分:0)

如果workheet_change不会触发,请尝试使用worksheet_calculate事件。它在任何单元格计算时执行,因此您可以为所需的单元格和(之前的)值进行测试。