返回列表 上一主題 發帖

[發問] Calculate,能否回傳發生變動的儲存格的欄位

回復 2# c_c_lai

If target.Address = "C1" Then
須小修改為
If target.Address = "$C$1" Then
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 2# c_c_lai

執行的步驟跟我想像的邏輯有點不同,當A1值被改變時,C1公式才會連動(觸動)改變。
我覺得順序應該 A1改變,Worksheet_Change應該先被觸動,再來C1公式改變,而後 Worksheet_Change被觸動。
不知道有有何看法?



目前執行順序如下

VBA

STEP 1
[A1] = 10

STEP2 公式
C1 = IF(A1>B1, "YES", "NO")

STEP 3
Private Sub Worksheet_Calculate()

STEP 4
Private Sub Worksheet_Change(ByVal Target As Range)
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 6# c_c_lai

謝謝你詳細的解說,終於懂了。
其實 Private Sub Worksheet_Calculate()並未傳入參數,我將  If Target.Value = "YES" 中的 Target 誤認為是傳入參數值,才以為是 C3公式觸動Worksheet_Calculate。
後來仔細觀察 Private Sub Worksheet_Change(ByVal Target As Range) 中的 If Target.Value = "YES" Then 根本不會執行到,因 Target 僅有A1、B1,C3是公式沒有觸發是我自己觀察不夠,你真是 用心良苦。


Private Sub Worksheet_Calculate()
    Dim Target As Range
    Set Target = Range("C1")

    '  If Not Intersect(target, Range("C1")) Is Nothing Then
    If Target.Value = "YES" Then
        '  Run my VBA code
        MsgBox "Worksheet_Calculate is Activvated!"
    End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    '  If Not Intersect(target, Range("C1")) Is Nothing Then
    If Target.Address = "$C$1" Then
        '  MyMacro()
        MsgBox "Worksheet_Change = " & Target.Address
    End If
End Sub
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

        靜思自在 : 時時好心就是時時好日。
返回列表 上一主題