我有一个连接到odbc,将数据带到excel和其余的数据,我在宏中手动计算我创建了一个宏,但我需要宏运行,每当我点击刷新按钮我把1宏放在workbook_open(),以便每当文件打开第一次我的宏被执行但当我点击刷新按钮只有odbc连接的数据得到更新我试图通过把它放在worksheet_changed()事件中调用我的宏,但它没有在这里工作是我试图在workheet_change事件中执行
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Address = "$A$2" Or Target.Address = "$H$2" Then
Call MyMacro
End If
End Sub
在这里id MyMacro Sub MyMacro()Dim i As Integer Dim j As Integer j = 1 i = 2 Dim Counter As Integer Counter = 1
Do While Not IsEmpty(cells(i, 1).Value)
If cells(i, 5).Value >= 70 Then
cells(i, 6).Value = Counter
SLC = (Counter / 96) * 100
cells(i, 7).Value = SLC
Counter = Counter + 1
Else
cells(i, 6).Value = 0
End If
i = i + 1
Loop
End Sub
MyMacro被调用并到达我更新此单元格的行
cells(i, 6).Value = Counter
but it calls the following event its like a cycle
Private Sub Worksheet_Change(ByVal Target As Range)
再次没有值得到更新
这是excel表格的样子
TimeStamp CA CAAT SL Counter SLC
11/24/2014 2:15 24 0 100.00 1 10.42
11/24/2014 2:30 27 0 100.00 2 11.46
11/24/2014 2:45 22 0 100.00 0 12.50
11/24/2014 3:00 21 0 100.00 3 13.54
11/24/2014 3:15 15 0 100.00 0 14.58
11/24/2014 3:30 18 1 94.44 4 15.63
A:E的范围从我的odbc connnection得到它的值我在SL计数器做什么在SL大于或等于70时我的计数器增加1谢谢你的帮助
1 回答
将您的私人子更改为此
您的
MyMacro
sub正在更改单元格值,因此会再次触发Worksheet_Change事件 . 要解决此问题,您需要在调用宏之前关闭事件,然后再将其打开 .如果出于某种原因需要在关闭事件时触发事件,请使用
Application.DoEvents
方法 .