bigmike55
Goto Top

Excel 2013 - farbig formatierte Zeilen werden nicht als leere Zeilen deklariert

Hallo, ich habe mir das folgende Makro geschrieben, das funktiert auch wunderbar - bis auf einen "Schönheitsfehler".

Per Clickbutton lösche ich alle (in Spalte D) mit dem Wort "Archiv" ausgefüllten Zellen und verschiebe diese in den Nachbarsheet "Archiv1". Soweit so gut.

Ich nutze eine der vorgefertigten Layoutvorlagen, um die Tabellenzeilen optisch besser zu trennen. Diese Formatvorlage färbt die einzelnen Zeilen farblich ein (hellblau/dunkelblau, hellblau/dunkelblau...usw.) Nun stelle ich fest, dass mein Makro deshalb nicht korrekt ausgeführt wird, weil Excel die farbliche Ausgestaltung einer Zelle/Zeile nicht als leere, sondern als belegte Zelle/Zeile definiert (Screenshot 2). Erst dort, wo die farbige Formatvorlage endet, und die übliche weiße, erste leere Zeile einsetzt, fügt das Makro die zu archivierende Datenzeile ein (Screenshot 3).

Man müsste das Makro also dahingehend anpassen, dass das Makro eine farbig formatierte Zeile/Zelle trotzdem als leere Zeile/Zelle definiert. Ist das möglich? Freue mich über jeden Tipp. Danke vorab...


Sub Bereinigen()

Dim zelle As Range, zeile As Long
For Each zelle In Range("D2:D50")

If zelle = "Archiv" Then
zeile = zelle.Row
Rows(zeile).Copy Destination:=Sheets("Archiv1").Cells(Rows.Count, 1).End(xlUp). _
_
Offset(1, 0)
Rows(zeile).Delete

End If
Next zelle
End Sub

Hat jemand eine Idee wie ich den Makro Code sp anpassen kann, dass beim Übergeben der Zeile in das Sheet "Archiv1" wurscht ist, ob die erste leere Zeile farbig ist oder nicht?
Thanx im Voraus
p1
p3
p2

Content-Key: 316029

Url: https://administrator.de/contentid/316029

Printed on: April 25, 2024 at 01:04 o'clock

Member: Kraemer
Kraemer Sep 23, 2016 at 07:07:16 (UTC)
Goto Top
Moin,

mit den Farben hat dein Problem überhaupt nichts zu tun.
Was versprichst du dir von dem
Offset(1, 0)
?

Gruß Krämer
Member: colinardo
colinardo Sep 23, 2016 updated at 08:35:05 (UTC)
Goto Top
Hallo BigMike55, willkommen auf Administrator.de!

Also, da muss ich wohl mal etwas ausholen.

Excel kennt hier zwei Arten von Bereichen: Einmal die klassischen Ranges und "echte" Tabellen (ListObjects) die intern als separate Objekte (ListObjects) behandelt werden. Das ist der Grund warum Excel hier an der Tabellenbegrenzung (Strich) mit der Ermittlung des Bereichs endet.

ListObjects bieten in VBA diverse Methoden um sie wesentlich einfacher zu handhaben als klassische "Bereiche", deswegen solltest du wenn du damit hantierst auch die entsprechenden Methoden dafür benutzen.

Hier ein Beispiel wie du in einer Tabelle (ListObject) die nächste freie Zeile (Ich gehe von Spalte 1 der Tabelle aus) ermittelst, auch wenn das ListObject am Ende mehrere Freie "ListRows" besitzt:

Wichtiger Hinweis: Das ListObject kannst du entweder über einen Index (Anzahl der Tabellen im Sheet beachten!) oder seinen Namen (Kann man im Tab festlegen) ansprechen, also statt Set table = ActiveSheet.ListObjects(1) dann Set table = ActiveSheet.ListObjects("Name des ListObjects")
Sub GetNextFreeRowInListObject()
    Dim table As ListObject, rngNextFree As Range
    Set table = ActiveSheet.ListObjects(1)
    Set rngNextFree = table.ListRows(table.ListRows.Count).Range(1, 1)
    If rngNextFree.Value <> "" Then  
        With table.ListRows.Add
            Set rngNextFree = .Range(1, 1)
        End With
    Else
        Set rngNextFree = rngNextFree.End(xlUp).Offset(1, 0)
    End If
    MsgBox "Nächste freie Zelle: " & rngNextFree.Address  
End Sub
Zeilen lassen sich hier auch einfach über die ListRow-Auflistung löschen und hinzufügen.

Zitat von @Kraemer:
Was versprichst du dir von dem
Offset(1, 0)
@Kraemer : Wohl noch nicht viel mit VBA in Excel gemacht face-smile?! Wenn man die nächste freie Zelle ermittelt mit End(xlUp) ermittelt muss man immer eine Zelle weiter nach unten springen da die letzte Zelle mit Inhalt markiert wird, das ist der Grund face-wink

Grüße Uwe
Member: Kraemer
Kraemer Sep 23, 2016 at 10:31:21 (UTC)
Goto Top
Zitat von @colinardo:
@Kraemer : Wohl noch nicht viel mit VBA in Excel gemacht face-smile?! Wenn man die nächste freie Zelle ermittelt mit End(xlUp) ermittelt muss man immer eine Zelle weiter nach unten springen da die letzte Zelle mit Inhalt markiert wird, das ist der Grund face-wink

Hi Uwe,

vielen Dank - wieder was dazu gelernt. Ich habe zwar schon diverses mit VBA gemacht - das "End(xlUp)" habe ich bisher aber noch nie benutzt (kannte ich noch nicht einmal). Jetzt weiß ich aber auch warum: Viel zu "ungenau" face-wink

Gruß Krämer