2

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

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

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

4

2 回答 2

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,如果您有更多,则需要进行修改。

希望能帮助到你。

于 2012-06-05T13:42:20.650 回答
0

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

于 2012-06-04T20:00:04.637 回答