我编写了以下代码来检测单元格值的变化,然后运行宏,但是当数据因数据连接而刷新时代码不起作用。
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
只有在手动输入单元格中的数据时,代码才有效。 请建议刷新数据时运行的代码。
答案 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事件。它在任何单元格计算时执行,因此您可以为所需的单元格和(之前的)值进行测试。