2016-08-27 83 views
1

需要你幫助修改代碼或代碼,這將幫助我完成我的任務。 其受VBA保護的工作簿。我在B18,D20,K11和M46的sheet1上有一個下拉菜單,每個下拉菜單中都有一個值列表。VBA代碼拋出提示

當用戶更改下拉列表B18和D20中的值時,我想用「ok」和「cancel」提示提示。用戶選擇「確定」它應該運行模塊1(重命名工作表)。

我無法實現的兩件事。 1.如果用戶更改除上述2個單元格外的其他任何下拉值,則I 不希望拋出提示。 2.當點擊「確定」它應該運行模塊1

請建議,如果你有更好的代碼

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim rNg As Range 

Set rNg = Range("B18", "D20") 
MsgBox "Please click Calculate Button", vbOKOnly, "Calculate button" 
End Sub 
+0

請參閱下面的答案 –

回答

0

嘗試下面的代碼。

(不明白你爲什麼要檢查,如果用戶按下「OK」因爲你使用的是有一個vbOKOnlyMsgBox他沒有其他選擇)

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim rNg       As Range 
Dim IntersectRange    As Range 
Dim message      As Integer 

' modify here to the Range you need monitored 
Set rNg = Range("B18", "D20") 
Set IntersectRange = Intersect(Target, rNg) 

If Not IntersectRange Is Nothing Then 
    message = MsgBox("Please click Calculate Button", vbOKOnly, "Calculate button") 
    If message = vbOK Then 
     Call Module1 ' or your Module/Function name 
    End If 
Else 
    'Do Nothing if outside range 

End If 

End Sub 
+0

我提供的代碼是由以前的用戶編寫的。我是VBA新手。我不確定,如果他已經完成了代碼,或者他已經完成了一半。 我試圖用你的代碼,我得到一個錯誤在該行呼叫模塊1.錯誤狀態「預期的變量或過程,而不模塊。 據透露,模塊1分Calculatesheet()。 請建議 – Manu

+0

@Manu你是否讀過該行旁邊的註釋?你需要將'Call Module1'的名稱修改爲你的函數名。你想調用的模塊或函數的名稱是什麼? –

+0

我的不好,我用函數替換它工作,謝謝。 – Manu

0

我不是說這個是wright方法,但可以使用UserForm創建自定義提示。這就是我做這件事的方式,因爲對我而言,它可以更好地控制我需要做的事情。

,如果你創建了OK的用戶窗體和取消按鈕假設,那麼你觸發的下拉值變化的用戶窗體,

Sub DropDown1_Change() 
    UserForm1.Show 
End Sub 

然後寫出好的代碼和取消按鈕點擊

Private Sub Ok_Click() 
    UserForm1.Hide 
    MsgBox "clicked ok" 
End Sub 

Private Sub cancel_Click() 
    UserForm1.Hide 
    MsgBox "clicked cancel" 
End Sub