2017-07-30 1 views
1
Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim KeyCells As Range 

    ' The variable KeyCells contains the cells that will 
    ' cause an alert when they are changed. 
    Set KeyCells = Range("z12:z15") 

    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then 
     If Range("Z12:Z45).value = "yes" then 
      MsgBox "Cell " & Target.Address & " has changed." 
     End If 
    End If 
End Sub 

Ich habe Probleme, dies herauszufinden. jede Hilfe würde geschätzt werden. txVBA übertreffen, führen Sie Makro im Zellenbereich, dass = zu "ja"

luigi

+0

Sie müssen überprüfen, ob eine Zelle im Bereich "Ziel" (geändert) hat "Ja"? –

+0

Das ist richtig. Dieser Code gibt mir jetzt einen Fehler. –

+0

_Target_ ist ein Bereich ... benutze '... Application.Intersect (KeyCells, Target) ...' – jsotola

Antwort

4

In VBA, können Sie nicht ein Array (Range("Z12:Z45").value) auf einen konstanten ("Ja") oder irgendetwas anderes für diese Angelegenheit vergleichen. Sie müssen entweder die Zellen des Bereichs (oder die Einträge des Arrays) durchlaufen oder möglicherweise die Funktionen Match oder CountIf verwenden.

Darüber hinaus müssen Sie, um nach Änderungen zu suchen, den Target Bereich untersuchen, nicht den Range("z12:z15"). Hier ist, wie es mit einer Schleife zu tun:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim KeyCells As Range, cel As Range 

    ' The variable KeyCells contains the cells that will cause an alert when they are changed. 
    Set KeyCells = Range("z12:z15") 

    If Not Intersect(KeyCells, Target) Is Nothing Then 
     For Each cel In Intersect(KeyCells, Target) 
     If StrComp(cel.text, "yes", vbTextCompare) = 0 Then 
      MsgBox "Cell " & cel.Address & " has changed." 
     End If 
     Next 
    End If 
End Sub 
+1

funktioniert wie ein Charme ! Vielen Dank für Ihr Wissen. –