🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Borders in Excel — Zellrahmen im Code zeichnen (und warum der ganze Block eingerahmt wurde)

|

VBA Borders in Excel — Zellrahmen im Code zeichnen (und warum der ganze Block eingerahmt wurde)

Kurz gesagt — Ein Rahmen ist eine Eigenschaft einer Kante, nicht einer Zelle. Ein Bereich hat acht adressierbare Rahmen: die vier Außenkanten (xlEdgeLeft, xlEdgeRight, xlEdgeTop, xlEdgeBottom), die zwei inneren Gitternetz-Sätze (xlInsideVertical, xlInsideHorizontal) und zwei Diagonalen. Die bloße Range("A1:D10").Borders-Auflistung meint alle davon, sodass .Borders.LineStyle = xlContinuous jede Zelle im Block einrahmt, nicht nur die Kontur. Nehmen Sie Range("A1:D10").BorderAround LineStyle:=xlContinuous, Weight:=xlThin, wenn Sie nur den äußeren Rahmen wollen.

Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Report")
' Den Block umranden, dann eine duenne Linie unter der Kopfzeile - zwei verschiedene Aufgaben.
ws.Range("A1:D10").BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
ws.Range("A1:D1").Borders(xlEdgeBottom).LineStyle = xlContinuous

Rahmen hinzuzufügen ist eines der ersten Dinge, die Leute automatisieren, und es ist zugleich der Ort, an dem ein kleines Missverständnis das rätselhafteste Ergebnis im ganzen Formatierungs-Werkzeugkasten erzeugt: Sie baten um „einen Rahmen“, und Excel zeichnete ein Gitter um jede Zelle. Diese Anleitung ruht auf einer Idee, die den Rest vorhersagbar macht: Borders ist eine Auflistung von Kanten, und die Auflistung anzufassen fasst jede Kante an. Sobald Sie Rahmen als kanten-weise sehen, verschwindet die Verwirrung zwischen Kontur und Gitter.

Was Sie lernen

  • Das mentale Modell — ein Rahmen gehört zu einer Kante, und Borders ist die ganze Menge davon
  • Die wichtigste Regel — .Borders rahmt jede Zelle ein, .BorderAround zeichnet nur den Rahmen
  • Die drei Eigenschaften, die eine Linie sichtbar machen — LineStyle, Weight und Color
  • Eine Kante nach der anderen ansprechen mit xlEdgeBottom, xlInsideVertical und dem Rest
  • Rahmen sauber löschen mit xlLineStyleNone
  • Warum Rahmen Dekoration sind, keine Struktur — und wonach Sie stattdessen greifen

Das mentale Modell: ein Rahmen ist eine Eigenschaft einer Kante

Dies ist das Geschwister des Aussehen-Clusters — Font gestaltet den Text, Interior füllt dahinter, und Rahmen zeichnen die Linien darum. Aber Rahmen unterscheiden sich davon in einem wichtigen Punkt: Eine Zelle hat nicht „einen Rahmen“, sie hat bis zu acht davon, und VBA erreicht jeden über die Borders-Auflistung, indiziert durch eine XlBordersIndex-Konstante:

' Die acht adressierbaren Kanten eines beliebigen Bereichs:
'   xlEdgeLeft, xlEdgeRight, xlEdgeTop, xlEdgeBottom   - die vier Aussenseiten
'   xlInsideVertical, xlInsideHorizontal              - Gitternetzlinien ZWISCHEN Zellen
'   xlDiagonalDown, xlDiagonalUp                       - Ecke zu Ecke
ws.Range("B2").Borders(xlEdgeBottom).LineStyle = xlContinuous   ' nur die Unterkante von B2

Halten Sie dieses Bild fest — acht Kanten, jede unabhängig adressierbar — und jede spätere Regel folgt daraus. Die inneren Rahmen existieren nur, wenn der Bereich mehr als eine Zelle umfasst (eine einzelne Zelle hat kein „Dazwischen“), was genau der Grund ist, warum dieselbe Codezeile sich auf B2 anders verhält als auf B2:E20.

Die wichtigste Regel: .Borders ist jede Kante, .BorderAround ist nur der Rahmen

Hier ist die eine Zeile, die jeden erwischt. Auf einem mehrzelligen Bereich wirkt das Setzen der Auflistung auf alle Kanten zugleich — Außenseiten und die Gitternetzlinien zwischen den Zellen:

' Rahmt JEDE Zelle im Block ein - Kontur plus alle inneren Gitternetzlinien.
ws.Range("A1:D10").Borders.LineStyle = xlContinuous

Das ist selten, was Leute meinen, wenn sie sagen „setz einen Rahmen darum“. Wenn Sie ein einzelnes Rechteck um den ganzen Block und nichts darin wollen, nehmen Sie die BorderAround-Methode, die immer nur die vier Außenkanten anfasst:

' Nur der aeussere Rahmen - keine inneren Linien.
ws.Range("A1:D10").BorderAround LineStyle:=xlContinuous, Weight:=xlThick

Die Unterscheidung ist der Kern des Themas: .Borders = das Gitter, .BorderAround = die Kontur. Wenn Sie wirklich beides wollen — einen eingerahmten Block mit leichteren inneren Linien —, machen Sie es in zwei Durchgängen: Setzen Sie .Borders.LineStyle für das Innere, dann BorderAround für einen kräftigeren Rahmen obendrauf. Zu .Borders zu greifen, wo Sie .BorderAround meinten, ist der häufigste Grund, warum ein „einzelner Rahmen“ als ganzer Käfig herauskommt.

Die drei Eigenschaften, die eine Linie machen: LineStyle, Weight, Color

Eine Rahmenkante ist unsichtbar, bis sie einen LineStyle hat. Das ist die Eigenschaft, die eine Linie einschaltet; die anderen zwei verfeinern sie. Weil Sie meist alle drei zusammen setzen, hält With es lesbar:

With ws.Range("A1:D10").Borders(xlEdgeBottom)
    .LineStyle = xlContinuous   ' schaltet die Linie EIN - ohne dies zeigt sich nichts
    .Weight = xlMedium          ' xlHairline, xlThin, xlMedium, xlThick
    .Color = RGB(0, 32, 96)     ' 24-Bit-RGB, wie Font.Color
End With

Drei Dinge, die zu wissen sich lohnt. LineStyle ist der Ein/Aus-Schalter — xlContinuous, xlDash, xlDot, xlDashDot, xlDouble, xlSlantDashDot und so weiter — und es zu setzen ist es, was den Rahmen erscheinen lässt. Weight ist eine von vier Konstanten (xlHairline, xlThin, xlMedium, xlThick), keine Punktzahl. Und nicht jedes LineStyle/Weight-Paar ist zulässig: xlHairline bedeutet eine durchgezogene dünne Linie, und xlDouble ignoriert Weight völlig — wenn also eine Stärke keine Wirkung zu haben scheint, überschreibt der Linienstil sie. Für die Farbe nehmen Sie .Color = RGB(r, g, b) (derselbe 24-Bit-Raum wie Font.Color, behandelt in VBA Font); meiden Sie .ColorIndex, außer Sie gleichen eine alte Palette ab.

Eine Kante nach der anderen

Die meisten echten Rahmen sind nicht „alles oder nichts“. Eine Linie unter einer Kopfzeile, ein Trenner zwischen zwei Abschnitten, ein dicker linker Rand — jeder ist eine einzelne Kante:

' Eine kraeftige Linie unter der Kopfzeile, ein leichter Trenner zwischen Spalte B und C.
ws.Range("A1:D1").Borders(xlEdgeBottom).Weight = xlThick
ws.Range("A1:D1").Borders(xlEdgeBottom).LineStyle = xlContinuous
ws.Range("C2:C20").Borders(xlEdgeLeft).LineStyle = xlDot

xlInsideVertical und xlInsideHorizontal geben Ihnen die Gitternetzlinien zwischen den Zellen ohne den äußeren Rahmen — das Gegenstück zu BorderAround. Sprechen Sie die Kanten an, die Sie wollen, und lassen Sie den Rest unberührt; jedes Borders(index) ist unabhängig, sodass das Setzen der Unterkante die Oberkante nie stört.

Rahmen löschen

Um Rahmen zu entfernen, setzen Sie den Linienstil auf keinen. Auf der Auflistung löscht es alles; auf einem Index löscht es nur diese Kante:

ws.Range("A1:D10").Borders.LineStyle = xlLineStyleNone   ' alle Rahmen im Block entfernen
ws.Range("A1:D1").Borders(xlEdgeBottom).LineStyle = xlLineStyleNone   ' nur die Linie unter der Kopfzeile entfernen

xlLineStyleNone und xlNone sind hier austauschbar. Beachten Sie, dass das Löschen der Rahmen eines Bereichs die Rahmen nicht anfasst, die Excel als Teil eines Tabellen-Stils oder einer bedingten Formatierung zeichnet — die gehören dem Objekt, das sie erzeugt hat, nicht der Zelle. Wenn also eine Linie sich weigert zu verschwinden, suchen Sie nach einer Tabelle oder einer Formatregel statt nach einem verirrten Borders-Aufruf.

Rahmen sind Dekoration, keine Struktur

Klar gesagt, weil es Nacharbeit erspart: Ein Rahmen ist rein visuell. Er gruppiert keine Zeilen, definiert keinen Bereich und ist für jede Formel unsichtbar. Wenn Sie Rahmen zeichnen, damit ein Block wie eine Tabelle aussieht, um später darauf zu verweisen, wandeln Sie ihn stattdessen in eine echte Excel-Tabelle (ListObject) um — Sie bekommen den eingerahmten Look und einen benannten Bereich, strukturierte Verweise und automatische Streifen. Nutzen Sie handgezeichnete Rahmen für den letzten Schliff an einem Bericht, den Sie gleich drucken oder exportieren, nicht als Weg, Daten eine Form zu geben, die Ihr Code lesen kann. Die Form muss in den Daten leben, so wie in VBA Range; der Rahmen ist nur die Farbe obendrauf.

Wie ExcelMaster hilft

Rahmen verbergen mehr Entscheidungen, als es aussieht: Auflistung gegenüber BorderAround, welche von acht Kanten Sie tatsächlich meinten, ein Weight, das ein LineStyle still überschreibt, und eine Linie, die sich nicht löschen lässt, weil eine Tabelle sie besitzt. Jede falsche Abzweigung ist leise — ein Gitter, wo Sie eine Kontur wollten, oder gar keine Änderung.

ExcelMaster lässt Sie stattdessen das Ergebnis beschreiben. Sagen Sie „rahme den Summenblock mit einer dicken Kontur und einer dünnen Linie unter der Kopfzeile ein“, und es nutzt BorderAround für den Rahmen und Borders(xlEdgeBottom) für die Linie — setzt zuerst LineStyle, damit die Linie auch erscheint, und wählt Weight und Color passend. Sie behalten die Arbeitsmappe und den Code; Sie sparen sich den Durchgang, in dem .Borders jede Zelle einsperrte, die Sie nur umranden wollten.

Häufig gestellte Fragen

Wie füge ich in Excel VBA einen Rahmen zu einem Bereich hinzu?

Für eine einzelne Kontur um den ganzen Bereich nehmen Sie Range("A1:D10").BorderAround LineStyle:=xlContinuous, Weight:=xlThin — sie zeichnet nur den äußeren Rahmen. Für eine bestimmte Kante setzen Sie es auf dem Auflistungs-Index, zum Beispiel Range("A1:D1").Borders(xlEdgeBottom).LineStyle = xlContinuous. Setzen Sie immer LineStyle (nicht nur Weight), denn der Linienstil ist es, der einen Rahmen sichtbar macht.

Warum rahmt Range.Borders.LineStyle jede Zelle ein, statt eine Kontur zu zeichnen?

Weil Range.Borders die ganze Auflistung der Kanten ist — die vier Außenseiten und die inneren Gitternetzlinien zwischen den Zellen. LineStyle auf der Auflistung zu setzen wirkt auf alle davon, ein mehrzelliger Bereich bekommt also um jede Zelle einen Rahmen. Nehmen Sie BorderAround, um nur den äußeren Rahmen anzufassen, oder sprechen Sie einzelne Kanten wie Borders(xlEdgeTop) an, eine Seite nach der anderen.

Was ist der Unterschied zwischen Borders und BorderAround in VBA?

Borders(index) ist eine Auflistung, die Sie nach Kante indizieren (xlEdgeLeft, xlInsideVertical und so weiter), und die bloße Auflistung zu setzen betrifft jede Kante. BorderAround ist eine Methode, die in einem Aufruf nur die vier Außenkanten des Bereichs zeichnet und die inneren Gitternetzlinien in Ruhe lässt. Nehmen Sie BorderAround für eine Kontur und die Borders-Auflistung, wenn Sie innere Linien oder eine einzelne Kante brauchen.

Wie entferne ich Rahmen von einem Bereich in VBA?

Setzen Sie den Linienstil auf keinen: Range("A1:D10").Borders.LineStyle = xlLineStyleNone löscht jeden Rahmen im Block, und Range("A1:D1").Borders(xlEdgeBottom).LineStyle = xlLineStyleNone löscht nur eine Kante. Weigert sich ein Rahmen zu verschwinden, wird er wahrscheinlich von einem Excel-Tabellen-Stil oder einer Regel der bedingten Formatierung gezeichnet, die ihre eigenen Rahmen besitzen.

Welche LineStyle- und Weight-Werte kann ich für VBA-Rahmen nutzen?

LineStyle akzeptiert xlContinuous, xlDash, xlDot, xlDashDot, xlDashDotDot, xlDouble, xlSlantDashDot und xlLineStyleNone. Weight ist eine von vier Konstanten — xlHairline, xlThin, xlMedium, xlThick — keine Punktgröße. Manche Kombinationen sind eingeschränkt: xlDouble ignoriert Weight, wenn also eine Stärke keine Wirkung zu haben scheint, ist der Linienstil der Grund.

Getestet in

Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 14.08.2026.

Verwandte Anleitungen: VBA Merge Cells · VBA Zellfarbe · VBA Font · VBA With · VBA Range