Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1912to1916
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Löschen nach Farben - Range falsch?

Löschen nach Farben - Range falsch?
27.12.2022 11:52:22
Jürgen
Hallo Zusammen,
leider habe ich ein komisches Verhalten in meiner Tabelle und ich komme nicht weiter. Mein Makro soll alle Zellen mit den Farben, die in den Konstanten jbGelb, jbChange und jbInfo vorgegeben sind, löschen. Das funktioniert in fast allen Formularen prima. Hier aber mal ein Formular, wo ein Fehler auftritt, den ich mir nicht erklären kann.
Ihr müsst nur das Makro ausführen. Ich habe das so gestaltet, dass nach dem Fehler der Bereich selectiert bleibt, damit ihr sehen könnt, was ich meine. Der Zellbereich U22:AI23 wird auch erfasst, obwohl er nicht die Hintergrundfarbe hat zum löschen. Aber warum?
lg Jürgen
https://www.herber.de/bbs/user/156955.xlsm

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Löschen nach Farben - Range falsch?
27.12.2022 12:21:03
Mullit
Hallo,

Aber warum?
steht doch in der Fehlermeldung der Msgbox, Du hast da Verbundzellen am Start:

---------------------------
Microsoft Excel
Fehler: 1004
Dies ist bei verbundenen Zellen leider nicht möglich.
$AA$5:$AI$6;$AA$9:$AI$12;$H$15:$T$16;$AA$15:$AI$16;$H$22:$T$25;$U$24:$AI$25;$AA$27:$AI$27;$D$29:$G$32;$AH$29:$AI$32;$D$36:$G$39;$J$36:$AI$39;$A$42:$AI$51;$M$53:$N$54;$W$53:$X$54;$H$56:$X$57;$H$59:$X$60
OK
Gruß, Mullit
AW: Löschen nach Farben - Range falsch?
27.12.2022 12:42:14
Jürgen
Die Fehlermeldung kann ich auch sehen, leider habe ich wohl die Frage nicht eindeutig formuliert:
Wie kommt es, das mein Makro in der select case schleife die zelle berücksichtigt, obwohl sie weiß ist? Das Makro soll ja nur die Zellen in "Bereich" sammeln, die die HIntergrundfarbe jbGelb usw. hat. Hier wird aber plötzlich von Excel so getan, als ob U22:AI23 auch gelb wären bzw. zum Verbund hinzugehören.

AA5:AI6,AA9:AI12,H15:T16,AA15:AI16,H22:AI25,H24:AI25,AA27:AI27,D29:G32,AH29:AI32,D36:G39,J36:AI39,A42:AI51,M53:N54,W53:X54,H56:X57,H59:X60
H22:AI25 sind aber kein geschlossener, bzw. verbundener Bereich. Die Zellen U22:AI23 sind nicht verbunden und liegen mittendrin.
Anzeige
AW: Löschen nach Farben - Range falsch?
27.12.2022 12:54:38
Mullit
Hallo,
das siehst Du falsch: U22:AI23 taucht in der liste nicht auf wohl aber $U$24:$AI$25 und die sind gelb eingefärbt....;-)
Gruß, Mullit
AW: Löschen nach Farben - Range falsch?
27.12.2022 13:46:44
Mullit
Hallo,
ändere Deinen Schluss + Deklaration mal so ab, auf die Schnelle etwas Quick & Dirty mit On Error, löscht dann aber bei mir....

Dim objArea As Range
If Not Bereich Is Nothing Then
On Error Resume Next
For Each objArea In Bereich.Areas
Call objArea.ClearContents
Next
On Error GoTo 0
End If
Call MsgBox("Tabelle ist leer")
Gruß, Mullit
AW: Löschen nach Farben - Range falsch?
27.12.2022 15:26:42
Jürgen
Danke für den Ansatz. Leider wird jetzt der zuvor fehlerhaft-erkannte Bereich H22:AI25 komplett beim Löschen ausgelassen. "... Each objArea In Bereich.Areas" scheint also falsch zu sein, sobald die Schleife auf H22:AI25 trifft. Ich frage mich nur wie es zu Anfang zu der fehlerhaften Aufnahme des Bereiches H22:AI25 kommen kann. Oder sollte ich dort am Anfang etwas prüfen, bevor der "Bereich" addiert wird?
Anzeige
AW: Löschen nach Farben - Range falsch?
27.12.2022 16:10:05
Mullit
Hallo,
ja stimmt der macht noch Ärger, ergänz die Schleife mal so:

On Error Resume Next
For Each objArea In Bereich.Areas
With objArea
If .Address  .Cells(1, 1).MergeArea.Address And Not .Cells(1, 1).MergeArea.Cells(1, 1).HasFormula Then _
Call .Cells(1, 1).MergeArea.ClearContents
Call .ClearContents
End With
Next
On Error GoTo 0
Gruß, Mullit
AW: Löschen nach Farben - Range falsch?
27.12.2022 19:24:53
Jürgen
Leider hatte ich Deinen Post von 16:00 übersehen, danke nochmal! Ich habe das mit "Zellen mit Formeln ignorieren" noch übernommen. DANKE

For Each zelle In Range(WorkingRange)   'WorkingRange ist der Bereich, in dem Zellen gelöscht werden
If Not zelle.Cells(1, 1).MergeArea.Cells(1, 1).HasFormula Then  'nur Zellen, die keine Formeln enthalten...
Select Case zelle.Interior.Color    'Check die Hintergrundfarbe
Case jbGelb, jbChange, jbInfo   'wenn eine der drei Farben (KOnstanten) dann...
If Bereich Is Nothing Then  'Wenn der zu löschende Bereich noch leer ist
If zelle.CurrentRegion.Count > 1 Then    'wenn Zelle Teil eines verbundenen Bereichs, dann
Set Bereich = zelle.MergeArea       'übergebe den kompletten verbundenen Bereich
Else: Set Bereich = zelle           'ansonsten die einzelne Zelle
End If
Else                                      'wenn der Löschbereich bereits etwas enthält, dann
If zelle.CurrentRegion.Count > 1 Then    'sollte die Zelle zu einem verbundenen Bereich gehören, dann
Set Bereich = Union(Bereich, zelle.MergeArea)   'übergebe den kompletten verbundenen Bereich
Else: Set Bereich = Union(Bereich, zelle)       'ansonsten die einzelne Zelle
End If
End If
Case Else
End Select
End If
Next

Anzeige
AW: Löschen nach Farben - Range falsch?
27.12.2022 20:07:17
Mullit
Hallo Jürgen,
prima, alles klar, ebenso
Gruß, Mullit
AW: Löschen nach Farben - Range falsch?
27.12.2022 18:55:09
Jürgen
Für Nachnutzer: So funktioniert das Makro. Mann muss unterscheiden zwischen Zellen, die verbunden sind oder einzelne Zellen:

For Each zelle In Range(WorkingRange)   'WorkingRange ist der Bereich, in dem Zellen gelöscht werden
Select Case zelle.Interior.Color    'Check die Hintergrundfarbe
Case jbGelb, jbChange, jbInfo   'wenn eine der drei Farben (KOnstanten) dann...
If Bereich Is Nothing Then  'Wenn der zu löschende Bereich noch leer ist
If zelle.CurrentRegion.Count > 1 Then    'wenn Zelle Teil eines verbundenen Bereichs, dann
Set Bereich = zelle.MergeArea       'übergebe den kompletten verbundenen Bereich
Else: Set Bereich = zelle           'ansonsten die einzelne Zelle
End If
Else                                      'wenn der Löschbereich bereits etwas enthält, dann
If zelle.CurrentRegion.Count > 1 Then    'sollte die Zelle zu einem verbundenen Bereich gehören, dann
Set Bereich = Union(Bereich, zelle.MergeArea)   'übergebe den kompletten verbundenen Bereich
Else: Set Bereich = Union(Bereich, zelle)       'ansonsten die einzelne Zelle
End If
End If
Case Else
End Select
Next
Danke nochmal für die Unterstützung an Mullit und guten Rutsch ins neue Jahr !!!
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige