2017-03-02 4 views
0

Mein Code funktioniert größtenteils, aber wenn ich den Datenbereich für einen neuen Eintrag lösche, erhalte ich den Laufzeitfehler 13 und muss die aktuellen Makros beenden bevor ich meine Dateneinträge neu starten kann. Darüber hinaus bleiben die zuvor markierten Zellen markiert. Irgendeine Idee, wie man das verhindert? enter image description herevba Bedingte Formatierung - Laufzeitfehler 13 beim Löschen von Daten

Mein Code ist:

Private Sub Worksheet_Change(ByVal Target As Range) 

Set lowspec = Range("i6") 
Set highspec = Range("m6") 
Set i = Intersect(Target, Range("f16:l34")) 
If Not i Is Nothing Then 
Select Case Target 
    Case 1 To lowspec: newcolor = 3 
    Case highspec + 1 To 1000: newcolor = 3 
End Select 
Target.Interior.ColorIndex = newcolor 
End If 



End Sub 

Antwort

1

Wenn Sie mehrere Zellen in einem Arbeitsgang zu ändern, Target die gesamte Bandbreite repräsentiert, so Select Case Target wird ein Problem sein.

Hier ist, wie Sie dies codieren müssen:

  • immer davon ausgehen, Target mehr sein könnte als eine Zelle
  • die intersect zwischen Ziel und Ihrem Bereich von Interesse holen und arbeiten auf der Reichweite schneidet : Wenn Sie nur nachsehen, ob es eine Überschneidung gibt und weiterhin auf Target operiert, kann das Zellen außerhalb Ihres Interessenbereichs enthalten.
  • Führen Sie alle Ihre Operationen an dieser Schnittstelle aus, z. B. bei Bedarf Zelle für Zelle.

Etwas wie:

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim lowSpec As Double, highSpec As Double, newcolor 
    Dim i As Range, c As Range, v 

    lowSpec = Me.Range("i6") 
    highSpec = Me.Range("m6") 

    Set i = Intersect(Target, Me.Range("f16:l34")) 
    If Not i Is Nothing Then 

     For Each c In i.Cells 
      v = c.Value 
      If Len(v) > 0 Then 
       Select Case v 
        Case 1 To lowSpec: newcolor = 3 
        Case highSpec + 1 To 1000: newcolor = 3 
       End Select 
      Else 
       newcolor = xlNone 
      End If 
      c.Interior.ColorIndex = newcolor 
     Next c 

    End If 
End Sub 
+0

danke für den Eingang, aber ich bin mir nicht sicher, ob ich völlig die zweite und dritte Bulletin verstehen. Ist "c" die Fälle? –

+0

C wird jede einzelne Zelle den aktualisierten Bereich bilden. Sehen Sie meinen aktualisierten Code –

+0

, der perfekt funktionierte! Vielen Dank! –

Verwandte Themen