Excel-VBA Worksheet_Change

Ich habe code, der überprüft, ob der text in einem Bereich von Zellen, und öffnet eine MsgBox

Der code funktioniert gut, bis ich gelöscht eine Reihe von Daten sowohl aus mit einem makro für ClearContents und die Auswahl eines Bereichs von Zellen und mit Hilfe der Lösch-Taste. Kein Fehler, wenn ich Zelle löschen Inhalt einer Zelle zu einem Zeitpunkt.

Den original-code auslösen würde, die den MsgBox für jeden ändern, ich möchte nur ausgelöst wird, basierend auf den Eintrag von „Nicht Erfüllt“ aus einer Auswahlliste.

Den Fehler den ich bekomme, ist diese:

Run-time error ’13‘: Type mismatch

Folgenden ist der geänderte code:

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("E3:E41")

    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then


        ' Display a message when one of the designated cells has been
        ' changed.
        ' Place your code here.

        If Target.Value = ("Not Met") Then
        MsgBox "Make sure you enter Gaps, Actions and a Priority Rating"

    End If
    End If

End Sub
  • Das ist, weil Sie mehr als auf die Zelle ausgewählt wird, wenn dieses ausgeführt wird. Sie müssen in einer Prüfung nur ausführen, wenn nur eine Zelle geändert wird
InformationsquelleAutor Kevin J | 2017-01-20



2 Replies
  1. 0

    Es gibt keine wirkliche Notwendigkeit zu haben, eine variabel zu halten, das der Range(„E3:E41“), können Sie es direkt tun mit If Not Intersect(Range("E3:E41"), Target) Is Nothing Then.

    Hinweis: Da Target ist eine Reihe, gibt es keine Notwendigkeit, um es mit Range(Target.Address) , Target allein wird es tun.

    Code (kurze version)

    Private Sub Worksheet_Change(ByVal Target As range)
    
        If Not Intersect(Range("E3:E41"), Target) Is Nothing Then
            ' Display a message when one of the designated cells has been changed
            If Target.Value = ("Not Met") Then MsgBox "Make sure you enter Gaps, Actions and a Priority Rating"
        End If
    
    End Sub
    • Danke Shai Rado für die zusätzlichen Informationen.
  2. 0

    Dies sollte Ihnen geben, was Sie nach sind:

    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("E3:E41")
    
        If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
    
    
            ' Display a message when one of the designated cells has been
            ' changed.
            ' Place your code here.
    
            If Target.Count = 1 Then
                If Target.Value = ("Not Met") Then
                    MsgBox "Make sure you enter Gaps, Actions and a Priority Rating"
                End If
            End If
        End If
    
    End Sub
    • In diesem Werk behandeln vielen Dank, Craig T

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.