Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Rahmen setzen

VBA Rahmen setzen
11.10.2013 09:55:56
Thomas
Hallo zusammen,
ich brächte einen VBA-Code der folgendes auslöst.
Wenn im Bereich A7:NG100 die Zelle nicht leer ist, dann umrahmen.
Habe es schon zum Teil mit dem Makrorecorder versucht. Allerdings läuft das Makro so endlos...
Vielen Dank!
Gruß
Thomas
Mein Versuch...
Sub Umrahmen()
Dim Zelle As Range
For Each Zelle In Sheets("Anwesenheit").Range("A7:NG100").Cells
If Zelle.Value  "" Then 'ist nicht leer
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
End If
Next
End Sub

Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Rahmen setzen
11.10.2013 10:12:35
Bastian
Hallo Thomas,
den zu Bereich, den die Schleife abklappert, kann man mit specialCells weiter einschränken.
Das sollte dann deutlich schneller gehen:
Versuch mal, die Schleife so zu formulieren:
Option Explicit
Sub Rahmen()
Dim Bereich As Range
Dim Zelle As Range
Set Bereich = Range("A7:NG100")
For Each Zelle In Union(Bereich.SpecialCells(xlCellTypeFormulas), _
Bereich.SpecialCells(xlCellTypeConstants))

Gruß, Bastian

Anzeige
AW: VBA Rahmen setzen
11.10.2013 10:22:06
Thomas
Hallo Basti,
ich habe den Code geändert.
Bekomme allerdings in der Zeile:
For Each Zelle In Union(Bereich.SpecialCells(xlCellTypeFormulas), _
Bereich.SpecialCells(xlCellTypeConstants))
Einen Laufzeitfehler (1024)
Gruß
Thomas
Sub Rahmen()
Dim Bereich As Range
Dim Zelle As Range
Set Bereich = Range("A7:NG100")
For Each Zelle In Union(Bereich.SpecialCells(xlCellTypeFormulas), _
Bereich.SpecialCells(xlCellTypeConstants))
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
Next
End Sub

Anzeige
AW: VBA Rahmen setzen
11.10.2013 10:36:22
Bastian
Hallo Thomas,
dann hast Du in dem Bereich keine Werte (alle Zellen leer?)
Der Code erkennt Zahlen, Text und Formeln in den Zellen. Nur diese Zellen werden von der Schleife abgearbeitet. Alle leeren Zellen werden ignoriert. Der Laufzeitfehler kommt, wenn alle Zellen leer sind.
Vielleicht ist der Bereich auch nicht richtig definiert.
Ich hatte das Tabellenblatt vergessen:
Set rngBereich = Sheets("Anwesenheit").Range("A7:NG100")
Gruß, Bastian

Anzeige
AW: VBA Rahmen setzen
11.10.2013 10:36:41
UweD
Hallo
geht auch ohne Schleife...
Sub Rahmen()
On Error GoTo Fehler
With Cells ' reset
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlNone
.Borders(xlEdgeTop).LineStyle = xlNone
.Borders(xlEdgeBottom).LineStyle = xlNone
.Borders(xlEdgeRight).LineStyle = xlNone
End With
With Union(Range("A1:NG100").SpecialCells(xlCellTypeConstants, 23), _
Range("A1:NG100").SpecialCells(xlCellTypeFormulas, 23))
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlContinuous
.Borders(xlInsideHorizontal).LineStyle = xlContinuous
End With
Err.Clear
Fehler:
If Err.Number  0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub
Gruß UweD

Anzeige
AW: VBA Rahmen setzen
11.10.2013 10:44:28
hary
Moin Uwe
Reicht doch auch!?
.Borders.LineStyle = xlNone 'Rahmen entfernen
 .BorderAround Weight:=xlThin 'Rahmen setzen

gruss hary

AW: VBA Rahmen setzen
11.10.2013 10:47:59
Thomas
Danke erstmal,
aber die Lösung von Uwe beachtet nicht ob die Zelle leer ist oder nicht.
Gruß
Thomas

Anzeige
AW: VBA Rahmen setzen
11.10.2013 10:51:14
Bastian
Hallo Thomas,
doch, der Code von Uwe funktioniert.
Es werden ja die gleichen "SpecialCells" Kriterien verwendet.
Nur halt ohne Schleife, was noch schneller sein dürfte.
Gruß, Bastian

AW: VBA Rahmen setzen
11.10.2013 10:56:06
Thomas
Ich habe den Code von Uwe in einem neuen Arbeitsblatt getestet.
Bei mir meldet sich die MSGbox obwohl Zellen in dem Bereich gefüllt sind.
Gruß
Thomas

Anzeige
AW: VBA Rahmen setzen
11.10.2013 10:59:09
UweD
hallo
lad doch mal eine Musterdatei hoch
Gruß UweD

AW: VBA Rahmen setzen
11.10.2013 11:20:58
UweD
Hallo
Hier mal eine funktionierende Möglichkeit.
https://www.herber.de/bbs/user/87616.xlsm
Sub Rahmen()
On Error GoTo Fehler
'reset
With ActiveSheet
.Cells.Borders.LineStyle = xlNone
MsgBox "alle Rahmen weg"
With Union(.Range("A1:NG100").SpecialCells(xlCellTypeConstants, 23), _
.Range("A1:NG100").SpecialCells(xlCellTypeFormulas, 23))
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlContinuous
.Borders(xlInsideHorizontal).LineStyle = xlContinuous
End With
End With
Err.Clear
Fehler:
If Err.Number  0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub
Gruß UweD

Anzeige
AW: VBA Rahmen setzen
11.10.2013 11:00:30
UweD
Hallo hary
... .Cells.Borders.LineStyle = xlNone das klappt
... .BorderAround Weight:=xlThin dann wird bei einem Zellbereich nur außenherum gerahmt und innen nicht

@Uwe Danke gruss owT
11.10.2013 11:54:05
hary
.

AW: @Uwe Danke gruss owT
11.10.2013 15:02:49
UweD
Hallo
weiss nicht, woran es liegt.
Ändere ich irgendeine Zelle, dann geht es
:-(

AW: @Uwe Danke gruss owT
11.10.2013 15:29:44
Thomas
Hallo Uwe,
ich habe es jetzt mit Bedingter Formatierung gelöst.
Danke für deine Mühe.
Schöne Grüße & ein schönes Wochenende.
Thomas
;

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

VBA Rahmen setzen in Excel


Schritt-für-Schritt-Anleitung

Um in Excel mit VBA Rahmen um Zellen zu setzen, kannst du den folgenden Code verwenden. Dieser Code überprüft, ob die Zellen im Bereich A7:NG100 nicht leer sind, und setzt dann die Rahmenlinien:

Sub Umrahmen()
    Dim Zelle As Range
    For Each Zelle In Sheets("Anwesenheit").Range("A7:NG100").Cells
        If Zelle.Value <> "" Then ' ist nicht leer
            With Zelle.Borders
                .LineStyle = xlContinuous
                .ColorIndex = 0
                .Weight = xlThin
            End With
        End If
    Next Zelle
End Sub

Dieser VBA-Code führt die Funktion vba rahmen um zelle aus und setzt die vba rahmenlinien um alle nicht leeren Zellen.


Häufige Fehler und Lösungen

  1. Laufzeitfehler 1024: Dieser Fehler tritt auf, wenn der angegebene Bereich keine nicht leeren Zellen enthält. Stelle sicher, dass der Bereich korrekt definiert ist und mindestens eine Zelle nicht leer ist.

  2. Rahmen werden nicht gesetzt: Überprüfe, ob die Zellen tatsächlich Werte enthalten. Verwende den Code mit SpecialCells, um nur Zellen mit Werten zu berücksichtigen.

Set Bereich = Range("A7:NG100")
For Each Zelle In Union(Bereich.SpecialCells(xlCellTypeFormulas), Bereich.SpecialCells(xlCellTypeConstants))

Alternative Methoden

Eine schnellere Methode, um Rahmen um mehrere Zellen zu setzen, ist die Verwendung von Union und SpecialCells. Hier ist ein Beispiel:

Sub Rahmen()
    On Error Resume Next
    With Union(Sheets("Anwesenheit").Range("A7:NG100").SpecialCells(xlCellTypeConstants), _
               Sheets("Anwesenheit").Range("A7:NG100").SpecialCells(xlCellTypeFormulas))
        .Borders.LineStyle = xlContinuous
    End With
    On Error GoTo 0
End Sub

Diese Methode ist effizienter, da sie die Schleife vermeidet und direkt alle relevanten Zellen anspricht.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du vba excel rahmen setzen kannst:

  1. Rahmen um alle Zellen setzen:

    Sub AlleRahmen()
       With Sheets("Anwesenheit").Cells.Borders
           .LineStyle = xlContinuous
           .Weight = xlThin
       End With
    End Sub
  2. Rahmen entfernen:

    Sub RahmenEntfernen()
       With Sheets("Anwesenheit").Cells.Borders
           .LineStyle = xlNone
       End With
    End Sub
  3. Dünne Rahmenlinien setzen:

    Sub DünneRahmen()
       With Sheets("Anwesenheit").Range("A7:NG100").Borders
           .LineStyle = xlContinuous
           .Weight = xlThin
       End With
    End Sub

Tipps für Profis

  • Verwende On Error Resume Next, um Laufzeitfehler in deinem Code zu vermeiden, besonders wenn du mit SpecialCells arbeitest.
  • Experimentiere mit den verschiedenen LineStyle und Weight-Eigenschaften, um die gewünschten visuellen Effekte zu erzielen.
  • Wenn du den Rahmen um mehrere Zellen setzen möchtest, kannst du Union verwenden, um die Leistung zu optimieren.

FAQ: Häufige Fragen

1. Wie entferne ich alle Rahmenlinien in einem Bereich?
Verwende den folgenden Code:

Sub AlleRahmenEntfernen()
    With Sheets("Anwesenheit").Cells.Borders
        .LineStyle = xlNone
    End With
End Sub

2. Kann ich die Rahmenlinien in unterschiedlichen Stilen setzen?
Ja, du kannst verschiedene LineStyle wie xlDash, xlDot usw. verwenden, um verschiedene Stile für die vba rahmenlinien zu setzen.

3. Wie kann ich Rahmen um mehrere nicht zusammenhängende Zellen setzen?
Du kannst Union verwenden, um mehrere Zellbereiche zusammenzufassen und dann die Rahmen zu setzen.

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