2014-11-25 221 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