2014-11-25 112 views
1

我必须ODBC连接带来数据到Excel 和我手动计算宏观 数据我创建了一个宏 休息,但我需要宏运行每当我上的刷新按钮 点击我在workbook_open()中放置了1个宏,这样,只要第一次打开文件我的宏就会执行 ,但是当我点击刷新按钮时,只有odbc连接的数据得到更新 我试图通过将它放入worksheet_changed )事件,但它没有工作 这里是我试图做的工作sheet_change事件VBA Excel宏

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 子MyMacro() 昏暗我作为整数 昏暗J所示整数 J = I = 2 昏暗计数器作为整数 计数器= 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被调用,并达到其中i更新此细胞线

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 什么我试图在这里做 FO SL计数器 每当SL是更大的得到其值或等于70我的柜台得到增加1 预先感谢您的帮助

回答

0

您的私人子改成这样

Private Sub Worksheet_Change(ByVal Target As Range) 
If Not Target.Address = "$A$2" Or Target.Address = "$H$2" Then 
Application.EnableEvents = False 
Call MyMacro 
Application.EnableEvents = True 
End If 
End Sub 

您的MyMacro sub正在更改单元格值,因此会再次触发Worksheet_Change事件。为了克服这个问题,你需要在调用宏之前关闭事件,然后再打开它们。

如果无论出于何种原因需要在关闭时触发事件,请使用Application.DoEvents方法。

+0

谢谢你......这解决了我的问题:) – jwj 2014-11-25 12:45:03