2015-09-10 14 views
2

我想要一個消息框來顯示單元格D7中的值何時大於0.消息框應詢問該檢查是否爲低風險項目。如果No,在單元格D9中輸入0並轉到D11。如果Yes,文本框應該顯示輸入一個數字,該數字將被複制到單元格D9。在Excel表格中自動更新數據時,返回正確更新的消息

這聽起來很簡單,我無法弄清楚。

Private Sub Worksheet_Change(ByVal Target As Range) 
' Code goes in the Worksheet specific module 
Dim rng As Range 
Dim Response As Long 
Dim Risk As Long 
    ' Set Target Range, i.e. Range("A1, B2, C3"), or Range("A1:B3") 
    Set rng = Target.Parent.Range("D7") 
     ' Only look at single cell changes 
     If Target.Count > 1 Then Exit Sub 
     ' Only look at that range 
     If Intersect(Target, rng) Is Nothing Then Exit Sub 
     ' Action if Condition(s) are met (do your thing here...) 
     If Target.Value > 0 Then 
      Response = MsgBox("Is the check a low risk item?", vbQuestion + vbYesNo, "Item Risk Assessment") 
      Select Case Response 
       Case 6 ' Yes 
        Risk = Application.InputBox("Enter a new value", "Value required", Type:=1) 
        Range("D9").Value = Risk 
       Case 7 ' No 
        Range("D9").Value = 0 
        Range("D11").Select 
      End Select 
     End If 
End Sub 

這隻有當細胞被手動修改,但我試圖設置此所以它給人當電池不手動而是自動更新,因爲它具有計算數據的公式的消息。

+0

驅動同一工作表中的單元格的公式是什麼?如果是這樣,你可以重新配置你的代碼來檢查每次輸入後D7的值,並可能進行檢查,以確保它只檢查特定的單元格條目,以便如果有人隨機將數據輸入到單元格中並且D7 = 0,則它不會不會無意中觸發它? –

+0

嘿斯科特,是的公式是在同一張表。也許我不完全理解你,你可以重新迭代嗎? –

+0

薩姆 - 我指的是迪克在下面的回答的第一部分中提到的內容。如果您知道公式的先例,則可以限制「Worksheet_Change」事件以僅對這些單元格執行檢查。 –

回答

1

如果您知道D7的所有直接和間接先例,則可以在這些單元上使用更改事件。所以,如果D7包含=SUM(D5:D6)以及D5和D6是輸入單元格,然後你可以

If Not Intersect(Target, Me.Range("D5:D6")) Is Nothing Then 
    If Me.Range("D7").Value = 0 Then 

如果有很多先例的,這會有點笨拙。

或者您可以使用Worksheet_Calculate事件並不斷檢查D7的值。這通常是一個壞主意。首先,它會一直運行,可能會降低工作表的性能。其次,如果每次計算工作表時彈出一個消息框,我可能會放棄我的工作。如果你去計算事件的路線,該過程可能看起來像

Private Sub Worksheet_Calculate() 

    ' Code goes in the Worksheet specific module 

    Dim lResponse As Long 

    Application.EnableEvents = False 

    If Me.Range("D7").Value > 0 Then 
     lResponse = MsgBox("Is the check a low risk item?", vbQuestion + vbYesNo, "Item Risk Assessment") 
     If lResponse = vbYes Then 
      Me.Range("D9").Value = Application.InputBox("Enter a new value", "Value required", Type:=1) 
     Else 
      Me.Range("D9").Value = 0 
      Me.Range("D11").Select 
     End If 
    End If 

    Application.EnableEvents = True 

End Sub 

最後,你可能會考慮只把提示直接在電子表格中。將此文字放在C9中:

Enter a new value for low risk, enter 0 for high risk: 

並使文本顏色和內部顏色相同以便隱藏。然後添加條件格式以使其在D7 = 0時可見。您需要一次最終檢查,如Before_Save,以確保用戶輸入了一個數字。或者,當D7 = 0且D9爲空時,條件格式D9可以呈鮮紅色。

沒有看到實際的工作表,很難得到比這更具體的。

+0

嘿迪克,感謝一百萬,我想我需要去計算路線,但我不知道我的當前腳本中的語法是什麼。是的,每次發生更新時都會彈出一條消息,但聽起來很煩人,但是更新不是每週都發生一次。 –

+0

請參閱編輯計算事件示例。請注意,整個工作表的計算不存在「目標」。 –

+0

是的迪克!這是它,深深感激!謝謝大家。得到它了。 –