977 Aufrufe
Gefragt in Tabellenkalkulation von finger59 Experte (1.3k Punkte)
Hallo liebe Excelfangemeinde,

bei dieser Aufgabe hatte mir Rainer schon mal mit einem Code geholfen einem frei markierten Bereich zu formatieren.
Ausgangspunkt: Ein frei markierter Bereich soll eine bestimmte Formatierung haben und bis auf die unterste Zeile ist es so wie ich es gerne haben möchte.

Sub Rahmensetzen()

With Selection
.Borders(xlEdgeLeft).Weight = xlThick
.Borders(xlEdgeTop).Weight = xlHairline
.Borders(xlEdgeBottom).LineStyle = xlDouble
.Borders(xlEdgeRight).Weight = xlThick
.Borders(xlInsideVertical).Weight = xlThin
.Borders(xlInsideHorizontal).Weight = xlHairline
End With
With Range(Cells(Selection.Row, Selection.Column), _
Cells(Selection.Row, Cells(Selection.Row, _
Columns.Count).End(xlToLeft).Column))
.Font.Bold = True
.HorizontalAlignment = xlCenter
.Borders(xlEdgeLeft).Weight = xlThick
.Borders(xlEdgeTop).Weight = xlThick
.Borders(xlEdgeBottom).Weight = xlThick
.Borders(xlEdgeRight).Weight = xlThick
End With
Range("A1").Select
End Sub

Leider habe ich bislang nichts gefunden um die unterste markierte Zeile anzusprechen, damit ich diese mit Fett markieren und der dicke Rahmenstrich nach oben gesetzt werden kann.
Das fettsetzen und die Rahmenlinie sollten kein Problem darstellen, aber wie kann man die unterste Zeile für die Formatierung ansprechen?
Leider gibt es dazu keinen festen markierten Bereich, sondern der ist immer wieder an ganz verschiedenen Stellen und zudem unterschiedlich lang, sonst wäre es ja zu einfach.... ;-)

Ich danke allen schon mal für Ihr Interesse an meiner Anfrage und wünsche allen noch einen schönen Abend.... LG Helmut

6 Antworten

0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Helmut,

folgender Code ermittelt dir die letzte Zeile einer Selection.
Geht vielleicht noch einfacher, aber ich bin leider kein VBA-Profi.

Option Explicit

Sub LastRowSelection()
Dim rngA As Range
For Each rngA In Selection.Areas
MsgBox Range(Cells(rngA(rngA.Cells.Count).Row, rngA(1).Column), Cells(rngA(rngA.Cells.Count).Row, rngA(rngA.Cells.Count).Column)).Address
Next
End Sub


Gruß
Rainer
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Helmut,

ergänze zum Formatieren der letzten Zeile in deinem markierten Bereich die folgende Zeile:

Range(Cells(Selection.Row + Selection.Rows.Count - 1, Selection.Column), Cells(Selection.Row + Selection.Rows.Count - 1, Selection.Column + Selection.Columns.Count - 1)).Font.Bold = True


Noch eine Frage zum Code. Stimmt der so, denn bei deinem geposteten Code wird die oberste Zeile des markierten Bereichs von Spalte A bis zur ersten Spalte deines markierten Bereichs mit einem Rahmen fett formatiert, bzw. nur die Spalte A erhält einen fett formatierten Rahmen.

Oder war das Makro so gemeint:

Sub Rahmensetzen_neu()

With Selection
.Borders(xlEdgeLeft).Weight = xlThick
.Borders(xlEdgeTop).Weight = xlHairline
.Borders(xlEdgeBottom).LineStyle = xlDouble
.Borders(xlEdgeRight).Weight = xlThick
.Borders(xlInsideVertical).Weight = xlThin
.Borders(xlInsideHorizontal).Weight = xlHairline
End With
With Range(Cells(Selection.Row, Selection.Column), Cells(Selection.Row, Selection.Column + Selection.Columns.Count - 1))
.Font.Bold = True
.HorizontalAlignment = xlCenter
.Borders(xlEdgeLeft).Weight = xlThick
.Borders(xlEdgeTop).Weight = xlThick
.Borders(xlEdgeBottom).Weight = xlThick
.Borders(xlEdgeRight).Weight = xlThick
End With
Range(Cells(Selection.Row + Selection.Rows.Count - 1, Selection.Column), Cells(Selection.Row + Selection.Rows.Count - 1, Selection.Column + Selection.Columns.Count - 1)).Font.Bold = True
Range("A1").Select
End Sub


Gruß

M.O.
0 Punkte
Beantwortet von finger59 Experte (1.3k Punkte)
Guten Morgen Rainer,
guten Morgen M.O.,

Euch beiden vielen Dank für Eure Lösungen.

In der Zeit wie Du M.O. Deine Lösung gepostet hattest, habe ich Rainers Ansatz getestet und dann
die Msgbox vorne weggelassen und da dann .Address zu einem Fehler führte in .select umgeschrieben
und schon funktionierte das Markieren der letzten Zeile mit der anschließenden Rahmensetzung.

Deine Lösung M.O. wäre sicherlich die korrekte gewesen, aber dank Rainers Ansatz bin ich dann auch zu
dem gewünschten Ergebnis gekommen.

Nochmals Euch beiden vielen Dank für Eure Mühen und wünsche Euch und natürlich auch allen anderen
Interessierten noch einen schönen und scheinbar sonnigen (Arbeits-)Tag... LG Helmut
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

noch eine variante

gruss nighty

Selection(Selection.Cells.Count).Row
0 Punkte
Beantwortet von finger59 Experte (1.3k Punkte)
Hi nighty,

ich habe mal Deine Lösung Interesse halber in mein Makro eingesetzt und bekam dann aber eine Fehlermeldung
Objekt unterstützt diese Eigenschaft oder Methode nicht

Sub Rahmensetzen()

With Selection
.Borders(xlEdgeLeft).Weight = xlThick
.Borders(xlEdgeTop).Weight = xlHairline
.Borders(xlEdgeBottom).LineStyle = xlDouble
.Borders(xlEdgeRight).Weight = xlThick
.Borders(xlInsideVertical).Weight = xlThin
.Borders(xlInsideHorizontal).Weight = xlHairline
End With
With Range(Cells(Selection.Row, Selection.Column), _
Cells(Selection.Row, Cells(Selection.Row, _
Columns.Count).End(xlToLeft).Column))
.Font.Bold = True
.HorizontalAlignment = xlCenter
.Borders(xlEdgeLeft).Weight = xlThick
.Borders(xlEdgeTop).Weight = xlThick
.Borders(xlEdgeBottom).Weight = xlThick
.Borders(xlEdgeRight).Weight = xlThick
End With

' Dim rngA As Range
' For Each rngA In Selection.Areas
' Range(Cells(rngA(rngA.Cells.Count).Row, rngA(1).Column), Cells(rngA(rngA.Cells.Count).Row, rngA(rngA.Cells.Count).Column)).Select
' Next

Selection(Selection.Cells.Count).Row

With Selection
.Borders(xlEdgeLeft).Weight = xlThick
.Borders(xlEdgeTop).Weight = xlThick
.Borders(xlEdgeBottom).LineStyle = xlDouble
.Borders(xlEdgeRight).Weight = xlThick
' .Borders(xlInsideVertical).Weight = xlThin
' .Borders(xlInsideHorizontal).Weight = xlHairline
.Font.Bold = True
End With

Range("A1").Select

End Sub

Nur mal so angefragt... wie hätte ich Deinen Code da einzusetzen gehabt...?

Vielen Dank und LG.... Helmut
0 Punkte
Beantwortet von
Hi,

habe eben den Thread entdeckt.

so geht's auch.

With Selection.Rows(Selection.Rows.Count)
.Font.Bold = True
.Borders(xlEdgeTop).Weight = xlThick
End With

Gruß Mr. K.
...