Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Rahmen innen und außen

Rahmen innen und außen
08.04.2016 16:24:40
Michael
Hallo zusammen,
in einer Tabelle möchte ich den Bereich A1 bis D6 wie folgt mit einem Rahmen verschönern.
1. A1 - D6 Alle Rahmenlinien
2. A1 - D1 Dicke Rahmenlinien (außen)
3. A1 - D6 Dicke Rahmenlinien (außen)
Dazu habe ich folgenden Code (der auch funktioniert:
Zu 1.
Sub Rahmen_Alle()
Range("A1:d6").Borders(xlDiagonalDown).LineStyle = xlNone
Range("A1:d6").Borders(xlDiagonalUp).LineStyle = xlNone
With Range("A1:d6").Borders
.LineStyle = xlContinuous
.Weight = xlThin
End With
End Sub
Zu 2 und 3:
Sub Rahmen_aussen()
Range("a1:d1").BorderAround LineStyle:=xlContinuous, Weight:=xlThick
Range("a1:d6").BorderAround LineStyle:=xlContinuous, Weight:=xlThick
End Sub
Wie gesagt. Funktioniert einwandfrei.
Habe zu dem Code Rahmen_aussen aber eine Frage.
Kann man diesen Code auch so abändern, dass alle Zellen einen Rahmen erhalten (also quasi den ersten Code ändern).
Gruß und ein schönes Wochenende
Michael

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Rahmen innen und außen
08.04.2016 16:29:20
Arthur
Hallo Michael.
... einfach alle Linie ansprechen. Hier das Beispiel aus dem Makrorecorder:
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Gruß, Arthur.

Anzeige
Mit 'For Each' alle Zellen im ZellBereich ...
08.04.2016 17:53:02
Luc:-?
…durchgehen und die LaufVariablenEigenschaft (As Range!) .BorderAround entsprd bedienen, Michael.
Es ist wenig bekannt, aber es gibt noch 4 weitere Rahmenlinien, die alle inneren Rahmen repräsentieren, .Borders(1) bis .Borders(4). Die wdn nicht immer durch die anderen, äußeren Edge-Rahmen (7…10 in abweichender Reihenfolge) mitgesetzt und auch nicht durch die Rahmenlinien zwischen 2 Zellen (11 & 12). Diese Rahmenlinien wdn wohl sonst nur noch von der BedingtFormatierung angesprochen, die aber andere Konstanten benutzt. Das Ganze ist wie generell in Xl nach links und oben orientiert, d.h., diese Linien haben Priorität vor den rechten/unteren der VorgängerZelle.
Das erklärt dann wohl auch, warum mitunter bei SeitenUmbrüchen innerhalb einer Tabelle Rahmenlinien fehlen.
In HTML-Tabellen ist das ähnlich, nur sind Orientierung und Handhabung etwas anders und das Ganze dient primär der Darstellung doppelter Rahmenlinien, die in Xl ja eigene GrafikSymbole benutzen. Das dürfte übrigens auch ein Grund sein, warum man kaum Xl2HTML-Tools im INet findet, die auch die TabellenRahmung original darstellen… ;-]
Übrigens, die Xl-Diagonal-Rahmenlinien können zwar einzeln gesetzt wdn, aber stets nur das gleiche Format aufweisen, also nicht eine Diagonale anders als die andere (bei ZellZwischenRahmen ist das nicht so).
Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: Mit 'For Each' alle Zellen im ZellBereich ...
08.04.2016 18:37:01
Vatifant
Hallo Luc,
schönen Dank für deine Antwort.
Könntest du mir mal bitte ein Beispiel einstellen. Stehe im Moment ein wenig auf den Schlauch.
Übrigens deine Erklärung bzgl. Rahmen ist sehr interessant.
Gruß
Michael

Wie der Name schon sagt (und auch ...
09.04.2016 02:40:31
Luc:-?
…Nepumuk!), Michael,
bezieht sich .BordersAround auf alle AußenRahmen eines ZellBereichs, nicht auf Diagonalen und auch nicht auf ZellZwischenLinien, denn die wdn ohnehin nur bei Auswahl einer ZellMatrix wirksam. Wie die 8…12 RahmenTeile und ihre 16 AnsprechMöglichkeiten zusammenwirken, kannst du mit den folgenden BspPgmm nachvollziehen. Dazu musst du nur eine Zelle, die fürs 2.Pgm eine (erfüllte) Regel enthalten sollte, bzw eine ZellBereichsMatrix (mind 4 Zellen in mind 2 Zeilen u. 2 Spalten) auswählen und das jeweilige Pgm starten:
Rem Reihenfolge: 1.Runde: LROU.DfDs=rybm.g>cc - 2.Runde: LOUR.IvIh=rybm.gc
Sub ZellRahmen()
Static bix As XlBordersIndex
Dim ix As Integer, bCol
bCol = Array(vbBlack, vbRed, vbYellow, vbBlue, vbMagenta, vbGreen, vbCyan, vbWhite)
With ActiveWindow.RangeSelection
For bix = bix + 1 + CInt(bix > 0) To bix + 6 + CInt(bix > 0)
With .Borders(bix)
.LineStyle = Array(xlContinuous, xlDash)((bix - 1) \ 6)
.Weight = Array(xlThin, xlMedium)((bix - 1) \ 6)
.Color = bCol((bix - 1) Mod 6 + 1)
End With
Next bix
bix = bix * Abs(bix = 7)
End With
End Sub
Rem Reihenfolge: ORLU=rybm
Sub BedFormRahmen()
Dim ix As Integer, erg$(3), bCol, bIdx, bSym, cf As FormatCondition
bCol = Array(vbBlack, vbRed, vbYellow, vbBlue, vbMagenta, vbGreen, vbCyan, vbWhite)
bIdx = Array(xlLeft, xlRight, xlTop, xlBottom)
bSym = Array("L", "R", "O", "U")
With ActiveWindow.RangeSelection.FormatConditions
If CBool(.Count) Then Set cf = .Item(1) Else Exit Sub
End With
For ix = 1 To 4
With WorksheetFunction
If IsNull(cf.Borders(.Small(bIdx, ix)).LineStyle) Then _
cf.Borders(.Small(bIdx, ix)).Color = bCol(ix)
erg(ix - 1) = bSym(.Match(.Small(bIdx, ix), bIdx, 0) - 1) & ": " & _
.Small(bIdx, ix) & "=" & .Match(cf.Borders(.Small(bIdx, ix)).Color, _
bCol, 0) - 1 & ": &h" & Hex(cf.Borders(.Small(bIdx, ix)).Color)
End With
Next ix
MsgBox Join(erg, vbLf): Set cf = Nothing
End Sub
Wenn man die RahmenIndizes aufsteigend ordnet, erhält man so 3 verschiedene Reihenfolgen, was die beiden Pgmm demonstrieren.
Übrigens, die BedingtFormatRegel sollte vom (klassischen) Typ 1 bzw 2 sein, sonst passt das Objekt cf nicht!
Morrn, Luc :-?

Anzeige
AW: Rahmen innen und außen
08.04.2016 18:29:49
Vatifant
Hallo Arthur,
schönen Dank für deine Antwort.
Vielleicht habe ich mich auch nicht richtig ausgedrückt.
Der Beispielcode vom Makrorecorder ist gleich zu setzen mit meinem Code "Rahmen_alle".
Nur dieser ist wesentlich kürzer.
Ich habe nach einer Möglichkeit gesucht diesen Code noch weiter zu kürzen; wie in dem Code "Rahmen_aussen".
Dort wird nur eine Codezeile benötigt; gilt aber nur für Rahmen außen (BorderAround).
Bekomme es irgendwie nicht hin, dass der Innenrahmen angesprochen wird.
Gruß
Michael

Anzeige
AW: Rahmen innen und außen
08.04.2016 19:11:02
Nepumuk
Hallo,
kurz genug?
Public Sub Rahmen()
    Dim enmBordersIndex As XlBordersIndex
    For enmBordersIndex = xlInsideVertical To xlInsideHorizontal
        With Range("A1:D6").Borders(enmBordersIndex)
            .LineStyle = xlContinuous
            .Weight = xlThin
        End With
    Next
    Call Range("A1:D1").BorderAround(LineStyle:=xlContinuous, Weight:=xlThick)
    Call Range("A1:D6").BorderAround(LineStyle:=xlContinuous, Weight:=xlThick)
End Sub

Gruß
Nepumuk

Anzeige
AW: Rahmen innen und außen
08.04.2016 20:05:32
Vatifant
Hallo Nepumuk,
ja, schönen Dank.
Mich interessiert aber immer noch, ob es möglich ist, die Anweisung für den kompletten Rahmen
"Call Range("A1:D6").BorderAround(LineStyle:=xlContinuous, Weight:=xlThick)"
so zu verändern, dass auch die Innenrahmen angesprochen werden.
Trotzdem nochmals schönen Dank
Gruß
Michael

Anzeige
AW: Rahmen innen und außen
08.04.2016 20:20:37
Nepumuk
Hallo,
nein, die Möglichkeit gibt es nicht.
Gruß
Nepumuk

AW: Rahmen innen und außen
08.04.2016 20:27:33
Vatifant
Hallo Nepumuk,
danke für die Info.
Gruß und schönes Wochenende
Michael
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Rahmen innen und außen in Excel gestalten


Schritt-für-Schritt-Anleitung

Um Rahmen in Excel mithilfe von VBA zu setzen, kannst du folgende Schritte befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Rechtsklicke im Projektbereich auf VBAProject (deine Datei) > Einfügen > Modul.

  3. Füge den folgenden Code ein:

    Sub Rahmen_Alle()
       Range("A1:D6").Borders(xlDiagonalDown).LineStyle = xlNone
       Range("A1:D6").Borders(xlDiagonalUp).LineStyle = xlNone
       With Range("A1:D6").Borders
           .LineStyle = xlContinuous
           .Weight = xlThin
       End With
    End Sub
    
    Sub Rahmen_aussen()
       Range("A1:D1").BorderAround LineStyle:=xlContinuous, Weight:=xlThick
       Range("A1:D6").BorderAround LineStyle:=xlContinuous, Weight:=xlThick
    End Sub
  4. Führe das Makro aus: Schließe den VBA-Editor und kehre zu Excel zurück. Drücke ALT + F8, wähle das Makro und klicke auf Ausführen.

Mit diesem Code kannst du die Excel Rahmenlinien für den Bereich A1 bis D6 setzen und sowohl äußere als auch innere Rahmenlinien gestalten.


Häufige Fehler und Lösungen

  • Problem: "Excel Rahmenlinien funktionieren nicht."

    • Lösung: Überprüfe, ob der Zellbereich korrekt angegeben ist. Verwende Range("A1:D6"), um sicherzustellen, dass du den gewünschten Bereich anvisierst.
  • Problem: "Dicke Rahmenlinie wird nicht angezeigt."

    • Lösung: Stelle sicher, dass du die .Weight-Eigenschaft richtig gesetzt hast, z.B. .Weight = xlThick.

Alternative Methoden

Du kannst auch die Excel rahmenlinien dicke über die Benutzeroberfläche ändern:

  1. Markiere den Zellbereich.
  2. Gehe zu Start > Schriftart-Gruppe > klicke auf das Rahmensymbol.
  3. Wähle Rahmenlinien und passe die Dicke an.

Für eine dynamische Umsetzung in VBA, kannst du auch eine Schleife verwenden, um alle Zellen im Bereich zu durchlaufen:

Sub RahmenMitForEach()
    Dim cell As Range
    For Each cell In Range("A1:D6")
        cell.Borders.LineStyle = xlContinuous
        cell.Borders.Weight = xlThin
    Next cell
End Sub

Praktische Beispiele

  1. Dicke Rahmenlinien um einen Bereich setzen:

    Sub DickeRahmen()
       With Range("A1:D6").Borders
           .LineStyle = xlContinuous
           .Weight = xlThick
       End With
    End Sub
  2. Diagonale Linien in Zellen hinzufügen:

    Sub DiagonaleLinie()
       With Range("A1")
           .Borders(xlDiagonalDown).LineStyle = xlContinuous
           .Borders(xlDiagonalDown).Weight = xlThin
       End With
    End Sub

Tipps für Profis

  • Verwende die .TintAndShade-Eigenschaft, um die Farbe der Rahmenlinien anzupassen.
  • Experimentiere mit verschiedenen xlBorders-Indizes, um spezifische Linien zwischen Zellen zu setzen.
  • Du kannst auch die Excel vba rahmenlinien setzen für das gesamte Arbeitsblatt automatisieren, indem du eine Schleife über alle Zellen im Blatt schreibst.

FAQ: Häufige Fragen

1. Kann ich die Rahmenlinien für alle Zellen gleichzeitig setzen? Ja, du kannst eine Schleife verwenden, um alle Zellen im gewünschten Bereich zu durchlaufen und die Rahmenlinien entsprechend zu setzen.

2. Wie ändere ich die Farbe der Rahmenlinien? Du kannst die .Color-Eigenschaft der Rahmenlinien nutzen, um die Farbe anzupassen. Beispiel: .Borders.Color = RGB(255, 0, 0) für rot.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige