2016-08-27 6 views
1

Brauchen Sie Ihre Hilfe bei der Änderung des Codes oder Codes, die mir helfen, meine Aufgabe zu vervollständigen. Es ist ein geschütztes Arbeitsbuch mit VBA. Ich habe eine Dropdown-Liste auf Blatt 1 in B18, D20, K11 und M46 und eine Liste von Werten in jedem Dropdown-Menü.VBA-Code zu prompt

Wenn Benutzer die Werte in Dropdown-B18 und D20 ändern, möchte ich eine Aufforderung werfen mit „ok“ und „Abbrechen“. Der Benutzer wählt "OK", es sollte ein Modul 1 laufen (welches das Blatt umbenennt).

Zwei Dinge, die ich zu erreichen bin scheitern. 1. Ich will nicht prompt zu werfen, wenn der Benutzer andere Drop-Down-Werte abgesehen von zwei Zellen verändert oben erwähnt ,. 2. Wenn "OK" geklickt haben sollte Modul 1.

Bitte vorschlagen laufen, wenn Sie

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

Klicks siehe Antwort unter –

Antwort

0

den Code unten Versuchen Sie besser Code.

(verstehe nicht, warum Sie überprüfen möchten, ob der Benutzer gedrückt „OK“, da Sie eine MsgBox mit vbOKOnly verwenden und er hat keine andere Wahl)

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

Code I zur Verfügung gestellt wurde von früheren Benutzer geschrieben. Ich bin neu in VBA. Ich bin mir nicht sicher, ob er den Code vervollständigt hat oder ob er zur Hälfte fertig ist. Ich habe versucht, den Code zu verwenden, habe ich einen Fehler in der Leitung Tormodul 1. Fehlerzustände „erhalten Erwartete Variable oder Prozedur, Modul nicht. Fyi, Modul 1 Sub Calculatesheet() hat. Bitte vorschlagen – Manu

+0

@Manu Hast du den Kommentar neben der Zeile gelesen? Du musst den Namen von 'Call Module1' zu deinem Funktionsnamen ändern." "Was ist der Name deines Moduls oder deiner Funktion, die du anrufen willst? –

+0

Mein Fehler, ich ersetzte durch die Funktion und Es hat funktioniert. Danke. – Manu

0

ich das nicht sage, ist die Wright-Methode, aber Sie können ein UserForm verwenden, um benutzerdefinierte Eingabeaufforderungen zu erstellen. Und das ist die Art, wie ich es tue, weil es für mich eine bessere Kontrolle darüber gibt, was ich tun muss.

Angenommen, wenn Sie ein Benutzerformular mit ok erstellen und Taste abbrechen, dann Sie die Userform auf der Dropdown-Wertänderung auslösen,

Sub DropDown1_Change() 
    UserForm1.Show 
End Sub 

dann die Codes für ok schreiben und Abbruchtaste

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

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