2016-03-21 1 views
1

Der Versuch, das Wort Gewinner in Spalte A einfügt, wenn Benutzer das Wort Jackpot aus einer Dropdown-Liste auswähltSub, die das Wort Gewinner in Spalte O fügt

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    For x = 6 To 88 
     If Cells(x, 14).Value = "Jackpot" Then 
      Cells(x, 15).Value = "Winnner" 
     ElseIf Cells(x, 14).Value <> "High" Then 
      Cells(x, 15).Value = " " 
     End If 
    Next x 
End Sub 

Das Problem, das ich habe, ist, wenn Spalte O besiedelt Durch den Benutzer mit beliebigem Text sollte die Prozedur die Texteingabe nicht überschreiben.

Ich weiß nicht, wie man einen VBA-Code schreibt, der den Texteintrag gleich hält und nicht die Prozedur überschreiben.

+0

Worksheet_SelectionChange bedeutet, dass jedes Mal, wenn Sie überall im Blatt klicken, das Makro ausgeführt wird und alles ersetzt wird. Lassen Sie das Makro den vom Benutzer geänderten Wert nicht ändern, Sie müssen diesen Wert mit etwas identifizieren, zum Beispiel wenn es nicht diese Zelle leer ist und es nicht Etwas, dann bedeutet das, dass jemand es geändert hat – exSnake

Antwort

0

IF Sie ein ActiveX-Steuerelement combolist verwenden, dann können Sie ein Makro zuweisen, die auf „Update“ laufen

Kontrolle dieses

Private Sub ComboBox1_Change() 
    If ComboBox1.Value = "JackPot" Then 
     Range("o1").Offset(0, 1).Value = "Winner" 
    End If 
End Sub 


Private Sub ComboBox1_DropButtonClick() 
     With Me.ComboBox1 
      .AddItem "JackPot" 
      .AddItem "high" 
     End With 
End Sub 

der Offset ist falsch, aber ich ging woanders mit ihm zuerst .... sollte einfach genug sein, damit Sie dort Form herausfinden

+0

technisch Offset ist nicht erforderlich, ich war nur schicker sein als nötig. Du kannst einfach direkt den Zellenwert deklarieren –

1

Das Ereignismakro, das Sie suchen, ist Worksheet_Change, nicht das Worksheet_SelectionChange Ereignismakro. Der Worksheet_Change wird immer dann ausgelöst, wenn sich ein Wert im Arbeitsblatt ändert (aber nicht durch eine Formel). Wenn Sie den Sub-Befehl verwenden, um die Werte in Spalte O zu ändern, müssen Sie die Ereignisbehandlung vorübergehend unterbrechen, während Sie den Befehl ausführen Änderungen oder Sie riskieren, dass das Worksheet_Change versucht, auf sich selbst zu laufen.

Wenn eine Änderung auf dem Arbeitsblatt das Worksheet_Change auslöst, müssen Sie bestimmen, ob das Ziel (die Zelle oder die Zellen, die die Änderung erhielten) in dem Bereich der Zellen sind, die Sie betreffen. Dies geschieht mit der Intersect method. Im Folgenden müssen eine oder mehrere der Zellen in Target in Spalte N zwischen den Zeilen 6 und 88 sein. Wenn es eine oder mehrere Zellen gibt, wird eine For Each...Next Statement verwendet, um jede Zelle zu durchlaufen, die die Kriterien erfüllt.

Bei jeder übereinstimmenden Zelle wird der Wert nacheinander überprüft. Die Select Case statement kümmert sich problemlos um mehrere mögliche Ergebnisse.

Setzen Sie alle oben genannten Punkte zusammen und Sie sollten mit Code wie dem folgenden enden.

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim x As Long 
    If Not Intersect(Target, Columns(14), Range("6:88")) Is Nothing Then 
     On Error GoTo bm_Safe_Exit 
     Application.EnableEvents = False 
     Dim win As Range 
     For Each win In Intersect(Target, Columns(14), Range("6:88")) 
      Select Case LCase(win.Value2) 
       Case "jackpot" 
        win.Offset(0, 1) = "Winnner" '<~~ ?? spelling...?? 
       Case "high" 
        ' do nothing...? 
       Case Else 
        win.Offset(0, 1).ClearContents 
      End Select 
     Next win 
    End If 
bm_Safe_Exit: 
    Application.EnableEvents = True 
End Sub 

Ich habe die sheet¹ Option Explicit Anweisung am Anfang des Codes hinzugefügt. Dies erfordert, dass Sie Ihre Variablen deklarieren, bevor Sie sie verwenden.

Ich sehe N6: N88 mit Data-Validierung Dropdown-Listen aufgefüllt.


¹ Einstellung Variablendeklaration erforderlich innerhalb der Werkzeuge des VBE ► Optionen ► Editor Eigenschaftenseite der Option Explicit Anweisung an den Anfang jedes neu erstellten Code Blatt gelegt wird. Dieses wird alberne Codierungsfehler wie Rechtschreibfehler vermeiden sowie Sie beeinflussen, den richtigen Variablentyp in der Variablen Deklaration zu verwenden. Variablen, die ohne Deklaration direkt erstellt werden, sind alle vom Typ Variante/Objekt. Verwenden Option Explicit ist weithin als "Best Practice".

+0

Gut erklärte Antwort! –

Verwandte Themen