2012-10-05 44 views
0

我想完成我的項目,我現在有一個表單控件,當按下時添加到一個數字的值和另一個按鈕將減去該值。Excel Worksheet_Change不工作時,宏更改單元格

另一個值對於同一事物有兩個不同的按鈕,但值也取決於第一個值和其他事物,而不僅僅是按鈕修改該值。我試圖執行這段代碼進行驗證

Private Sub Worksheet_Change(ByVal Target As Range) 
If Not Intersect(Target, Target.Worksheet.Range("F19")) Is Nothing Then 
If Range("E19") = 2 And Range("F19") < 12 Then 
    Range("E20") = 1 
End If 
End If 
End Sub 

但顯然Excel中無法識別時,改變由按鍵引起的細胞F19已經改變,只有當它是由用戶輸入造成的。所以,這就是說,如果F19更新,19是2,F19小於12(E12爲2的先決條件是F19是12或更大),那麼設置E20爲1(E20是E19的修飾符,它也具有進入它的其他修飾符)。此方法適用於其他不受按鈕控制的值,但如何在Excel表單控件按鈕更改值(或至少在按下表單控件時進行監視)時獲得Excel的實現。

編輯:宏如果單元格按公式改變,實際上也不起作用。我不認爲我可以使用Worksheet_Calculate來監視特定單元格中的更改。

回答

1

爲什麼你用代碼來做這件事?你可以讓Cell E20有一個公式,例如:=IF(AND(E19=2,F19<12),1,""),除非滿足條件,否則會使單元變爲空白。

如果您確實想要使用代碼執行此操作,請考慮以下事項:Worksheet_Change event「在用戶或外部鏈接更改工作表上的單元格時發生」。

我會建議,而不必

If Range("E19") = 2 And Range("F19") < 12 Then 
    Range("E20") = 1 
End If 

在您添加它作爲一個獨立的子你Worksheet_Change事件,你從Worksheet_Change調用。在執行了按鈕所做的任何操作之後,您還可以從您的按鈕的代碼中調用該子項。這樣,你可以保證檢查運行,不要試圖依賴事件。

0

Daniel很偏右,Worksheet_Change「當用戶或外部鏈接更改工作表上的單元格時發生。」但是這個包括由VBA引起的變化,而不包括變化的一個公式。

你的問題可以通過您的範圍的僅部分資格引起(或至少加劇):

Range("E19")將指「E19」 在有源片,其可以或可以不是表Target已打開。你有Target.Worksheet.Range("F19")

嘗試(注意.的)

With Target.Worksheet 
    If Not Intersect(Target, .Range("F19")) Is Nothing Then 
     If .Range("E19") = 2 And .Range("F19") < 12 Then 
      .Range("E20") = 1 
     End If 
    End If 
End With 

BTW是正確的。我與丹尼爾在你的整個解決方案似乎有點關閉,但我們可能沒有得到全部圖片...

+1

我不認爲這是正確的。我的理解是,標準模塊中的非限定範圍引用將引用活動頁。但是表單類模塊中的非限定範圍引用將引用該表單。我同意OP應完全限定範圍參考以避免混淆。OP可能也會考慮Me關鍵字。 –

+0

我不確定爲什麼你沒有告訴我我在回答評論時錯了。好吧。我只是相信MSDN而不打擾測試它。我刪除了我的犯規句子。 :) 謝謝 –

相關問題