Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1484to1488
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

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

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

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

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

66 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige