2016-09-15 317 views
0

理論上,每當工作表上的任何公式發生變化時,都應觸發以下VBA代碼,但我希望僅當A1中的值(A1包含RTD公式監視市場數據每秒更新一次)與A3不同,所以它只能在值不同的情況下顯示A1的值,但它會非常頻繁地顯示值(即使A1和A3中的值相同) 。問題是什麼? 謝謝。VBA Worsheet_Calculate事件始終觸發

private sub worksheet_calculate() 
    If Range("A3").Value <> Range("A1").Value Then 
     Range("A3").Value=Range("A1").Value 
     Debug.Print Range("A1").Value 
    End If 
End Sub 
+0

不應該聲明「下面的VBA代碼應該觸發每次在工作表上的任何公式更改」回答「但它顯示值非常頻繁」的問題? – Comintern

+0

不是因爲If語句... – alex337d

回答

0

也許這些值在某些小數點上是真的不同,但您沒有看到。您可以考慮舍入值,將小數點後的數字強制爲最大有效值。

你也可以考慮使用「_change」事件而不是「_calculate」,因爲它可以讓你控制被改變的目標。您需要測試RTD forumla是否觸發了「_change」事件。

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim RoundDigits As Integer 
    RoundDigits = 6 'Change to how many digits you require rounding 
    If Target.Address = Range("a1").Address Then 
     If Round(Range("A3").Value, RoundDigits) <> Round(Range("A1").Value, RoundDigits) Then 
      Range("A3").Value = Range("A1").Value 
      Debug.Print Range("A1").Value 
     End If 

    End If 
End Sub 
+0

不適用於公式。這就是爲什麼我插入代碼以將值從A1複製到A3,所以我可以使用Worksheet_Change語句和A3。 – alex337d

0

打開ou,由於某些原因,A3和A1的值儘管複製值不同, StrComp函數解決了這個問題。