2017-09-06 59 views
0

所以這是一個普遍問題,我確定之前已經詢問過這個問題,但我無法找到很多幫助。如何限制Worksheet_Calculate()僅在計算指定範圍時執行

在具有一個工作表範圍的Excel說B6:F12是我有在Worksheet_Calculate()子程序有問題的計算結果全部

我的問題是,隨着對worksheet_calculate這種非常通用代碼子程序

Private Sub Worksheet_Calculate() 
    Dim aCell as Range 
    Dim aRange as Range 
    Set aRange = Range(B6:B12) 
    For Each aCell in aRange 
      SomeFunction(aCell) 
    Next 
End Sub 

這種情況發生在範圍C6任何計算:F12通過人氣指數發生和不必要的調用SomeFunction(aCell)導致迭代。

如何才能使此場景只發生在範圍B6:B12上執行計算?

+0

你可能有更具體一點。也許從您的數據中顯示樣本。何時進行計算?在你的代碼中你有'B6:B12',但在你的問題中你有'C6:F12'和'B6:F12'。 – ShanayL

+0

您是否只在範圍'B6:B12'中有值時才運行該函數?如果它是你正在嘗試的,使用'如果aCell <>「」然後'或[在單元格或範圍更改](https://stackoverflow.com/questions/409434/automatically-execute-an-excel-macro-on單元格更改) – danieltakeshi

+0

單獨的計算在所有單元格B6:F12中執行,因此是35個不同的計算。當B6:B12中的計算髮生時,我需要調用SomeFunction()。由於它隨時都會調用工作表上任何位置的計算,因此SomeFunction()會通過迭代調用。 – Chris

回答

0

您啓動FOR循環之前補充一點:

If Not Application.Intersect(ActiveCell, aRange) Is Nothing Then 

這隻會觸發FOR循環,如果你是在給定範圍內

編輯
我的代碼設置如下圖所示它似乎爲我工作:

Private Sub Worksheet_Calculate() 
    Dim oWS As Worksheet: Set oWS = ThisWorkbook.Worksheets("Sheet8") 
    Dim aRange As Range: Set aRange = oWS.Range("F6:F10") 
    If ActiveSheet.Name = oWS.Name Then 
     If Not Application.Intersect(ActiveCell, aRange) Is Nothing Then 
      MsgBox "In range" 
     End If 
    End If 
End Sub 
+0

ActiveCell是屬於worksheet_calculate的一部分的受保護變量嗎?還是我必須申報? – Chris

+0

對不起,這最終以對象錯誤1006,因爲我在另一個工作表上的單元格中創建一個值,以及有時如果不存在,創建工作表,並假設當它創建工作表和/或創建工作表中的值單元格移動活動單元格並導致此問題。 – Chris