Zellen und Tabellenblätter formatieren

Sub ZelleEinfaerben()
Dim ws As Worksheet
Set ws = Worksheets("Tabelle1")
'
' Hintergrund der Zelle "A1" rot faerben
ws.Cells(1, 1).Interior.Color = vbRed
' Rahmen der Zelle "B1" rot faerben
ws.Cells(1, 2).Borders.Color = vbRed
' Schrift der Zelle "B1" rot faerben
ws.Cells(1, 2).Font.Color = vbRed
'
Set ws = Nothing
End Sub

„vbRed“ ist eine Farbkonstante, mit der der Hintergrund einer Zelle rot eingefärbt wird. Mit „Interior“ wird der Hintergrund einer Zelle eingefärbt. Mit „Borders“ kann man den Rahmen einfärben und mit „Font“ die Schrift:

In VBA gibt es 8 Farbkonstanten

Hintergrund einer Zelle mit einer Farbe aus der Standardfarbpalette einfärben

Um Farben der Standardfarbpalette mit VBA zu verwenden, steht Eigenschaft „ColorIndex“ zur Verfügung. Es stehen 56 Farben zur Verfügung. Leider ist der ColorIndex nicht besonders aussagekräftig. Daher sind die Farben in der folgenden Abbildung gezeigt.

Mit der folgenden Sub Prozedur lassen sich die Farben und der zugehörige Index in einem Excel Tabellenblatt ausgeben:

Sub ZelleEinfaerbenColorIndex()
Dim i As Integer
Dim ws As Worksheet
Set ws = Worksheets("Tabelle2")
'
For i = 1 To 56
    Debug.Print i
    ' ColorIndex in Spalte 1 schreiben
    ws.Cells(i + 1, 1).Value = i
    ' Zelle in Spalte 2 einfärben
    ws.Cells(i + 1, 2).Interior.ColorIndex = i
Next i
'
Set ws = Nothing
End Sub

Hintergrund einer Zelle mit einer RGB Farbe einfärben

Ab Excel 2007 ist möglich, jede beliebige Farbe über den RGB-Farbwert zuzuweisen. RGB-Farben setzen sich aus den drei Farben Rot, Grün und Blau zusammen. Der Farbanteil der drei Farben liegt im Bereich von 0 bis 255. Damit stehen 16.777.216 (= 256*256*256) Farbwerte zur Verfügung.

RGB Standardfarben sind:

  • Rot: RGB(255, 0, 0)
  • Grün: RGB(0, 255, 0)
  • Blau: RGB(0, 0, 255)
  • Weiß RGB(255, 255, 255)
  • Schwarz RGB(0, 0, 0)

Es gibt mehrere Möglichkeiten, die RGB Farben darzustellen:

  • mit den Farbanteilen für die Farben Rot, Grün und Blau: RGB(Rot, Grün, Blau)
    Rot, Grün und Blau sind hierbei ganze Zahlen im Bereich 0 – 255, die die Komponten der Farben darstellen.
  • mit einer ganzen Zahl vom Typ Long, die den RGB-Farbwert darstellt.
  • mit dem Hex-Farbcode.

RGB Farbwert mit der RGB Funktion berechnen

Zur Verdeutlichung wurde hier wurde die RGB-Funktion verwendet. Sie gibt eine ganze Zahl vom Typ Long zurück, die den RGB-Farbwert darstellt. Die Syntax der Funktion ist
RGB(Rot, Grün, Blau)
wobei

  • Rot – Ganze Zahl im Bereich 0 – 255 (einschließlich), die die rote Komponente der Farbe darstellt.
  • Grün – Ganze Zahl im Bereich 0 – 255 (einschließlich), die die grüne Komponente der Farbe darstellt.
  • Blau – Ganze Zahl im Bereich 0 – 255 (einschließlich), die die blaue Komponente der Farbe darstellt.

Der RGB Farbwert berechnet sich wie folgt aus den Farbanteilen für die Farben Rot, Grün und Blau:
RGB Farbwert = Rot + (Grün * 256) + (Blau * 65536)

Mit dem folgenden VBA Code lässt sich überprüfen, dass die VBA RGB Funktion dasselbe Ergebnis liefert wie die angegebene Formel

Sub RGB_Funktion()
Dim intRot As Integer, intGruen As Integer, intBlau As Integer
Dim lngRGBWert As Long
intRot = 81
intGruen = 98
intBlau = 18
lngRGBWert = CLng(intRot) + CLng(intGruen) * 256 + CLng(intBlau) * 65536
Debug.Print lngRGBWert, RGB(intRot, intGruen, intBlau)
End Sub

Der Hex-Farbcode für die RGB Farben

Die RGB Farben können auch durch einen Hex-Farbcode dargestellt werden. Der Hex-Farbcode ist eine 6-stellige Hexadezimalzahl (Basis 16), die wie folgt aufgebaut ist:
RRGGBB
wobei
– die zwei linken Ziffern „RR“ die rote Farbe repräsentieren.
– die zwei mittleren Ziffern „GG“ die grüne Farbe repräsentieren.
– die zwei rechten Ziffern „BB“ die blaue Farbe repräsentieren.

Achtung: rechnet man den RGB-Farbwert in eine Hex-Zahl um, unterscheidet er sich vom Hex Farbcode:
– der Hexadezimalwert des RGB-Farbwertes ist wie folgt aufgebaut: BBGGRR
– der Hex-Farbcode ist wie folgt aufgebaut: RRGGBB

Beispiel: Hex-Farbcode aus den RGB Farbanteilen ermitteln
Mit der folgenden Funktion kann der Hex-Farbcode aus den RGB Farbanteilen ermittelt werden.

Sub Test_GetHexFromRGB()
Dim iRed As Integer, iGreen As Integer, iBlue As Integer
iRed = 81
iGreen = 98
iBlue = 18
Debug.Print GetHexFromRGB(iRed, iGreen, iBlue) ' Sollergebnis: #516212
End Sub
'
Function GetHexFromRGB(iRed As Integer, iGreen As Integer, iBlue As Integer) As String
GetHexFromRGB = "#" & Right("00" & Hex(iRed), 2) & _
    Right("00" & Hex(iGreen), 2) & Right("00" & Hex(iBlue), 2)
End Function

Hintergrund einer Zelle in einer RGB Farbe einfärben

Mit dem folgenden VBA Code lässt sich der Hintergrund einer Zelle in einer RGB Farbe einfärben.

Sub ZelleEinfaerbenRGB()
Dim ws As Worksheet
Set ws = Worksheets("Tabelle1")
'
' Hintergrund der Zelle "A1" rot faerben
ws.Cells(1, 1).Interior.Color = RGB(255, 0, 0)
' Rahmen der Zelle "B1" rot faerben
ws.Cells(1, 2).Borders.Color = RGB(255, 0, 0)
' Schrift der Zelle "B1" rot faerben
ws.Cells(1, 2).Font.Color = RGB(255, 0, 0)
'
Set ws = Nothing
End Sub

In Excel lässt sich die RGB Farbpallette folgendermaßen anzeigen:

  1. Auf die Zelle klicken, deren Hintergrund eingefärbt werden soll.
  2. Auf der Registerkarte Start auf den Pfeil neben Füllfarbe (Symbol Farbeimer) klicken.
  3. Im Fenster, das erscheint auf „Weitere Farben …“ klicken

Dann erscheint folgendes Fenster. Unter dem Reiter „Benutzerdefiniert“ erscheinen die RGB Farben.

RGB Farben sind besonders interessant, wenn man beispielsweise von einem Kollegen eine Excel Datei erhält, in der verschiedene Farben verwendet werden. Man kann dann die RGB Werte dieser Farben bestimmen und dann im VBA exakt die gleichen Farben verwenden.

RGB-Farbanteile der Hintergrundfarbe einer Zelle ermitteln

Mit dem in folgendem Beispiel angegebenen Code lässen sich die RGB Farbanteile der Hintergrundfarbe in der Zelle „A2“ ermitteln. Hierfür wird die Funktion „GetRGB“ verwendet, die die RGB Farbanteile aus dem RGB-Farbwert ermittelt. Diese Funktion gibt eine Zeichenfolge im Format
  RGB(Rot, Grün, Blau)
zurück.

Sub test_GetRGBValue()
Dim RGBColor As Long
Dim ws As Worksheet
'
Set ws = Worksheets("Tabelle1")
RGBColor = ws.Cells(2, 1).Interior.Color
Debug.Print GetRGB(RGBColor)
'
Set ws = Nothing
End Sub
'
Function GetRGB(lColor As Long) As String
' Der RGB Farbwert lColor wird mit folgender Formel berechnet:
' lColor = Rot + (Gruen * 256) + (Blau * 65536)
' Diese Funktion extrahiert die RGB Farbanteile aus dem RGB Farbwert
Dim lRed As Long, lGreen As Long, lBlue As Long
'
lRed = lColor Mod 256
lGreen = (lColor \ 256) Mod 256
lBlue = (lColor \ 65536) Mod 256
'
GetRGB = "RGB(" & CStr(lRed) & ", " & CStr(lGreen) & ", " & CStr(lBlue) & ")"
End Function

Hintergrundfarbe einer Zelle entfernen

Es gibt folgende Möglichkeiten, um die Hintergrundfarbe einer Zelle zu entfernen:

  • der Eigenschaft ColorIndex die Konstante xlNone zuweisen.
  • der Eigenschaft ColorIndex die Konstante den Farbindex -4142 zuweisen.
Beispiel:
Sub Hintergrundfarbe_einer_Zelle_loeschen()
Dim ws As Worksheet
Set ws = Worksheets("Tabelle1")
'
' Hintergrundfarbe der Zelle "B1" löschen
ws.Cells(1, 2).Interior.ColorIndex = xlNone
' Hintergrundfarbe der Zelle "B2" löschen
ws.Cells(2, 2).Interior.ColorIndex = -4142
'
Debug.Print xlNone ' Sollergebnis: xlNone = -4142
'
Set ws = Nothing
End Sub

Rahmen einer Zelle einfärben

Folgende Methoden können verwendet werden, um den Rahmen einer Zelle einzufärben

  • den Rahmen mit Hilfe einer Farbkonstanten einfärben.
  • den Rahmen mit einer Farbe aus der Standardfarbpalette einfärben.
  • den Rahmen mit einer RGB Farbe einfärben.
Sub Rahmen_faerben()
Dim ws As Worksheet
Set ws = Worksheets("Tabelle1")

'Strichstärke des Rahmens der Zelle "A1" setzen
ws.Cells(1, 1).Borders.Weight = 4
'Rahmen der Zelle "A1" in Blau färben
ws.Cells(1, 1).Borders.Color = vbBlue

'Strichstärke des Rahmens der Zelle "D1" setzen
ws.Cells(1, 4).Borders.Weight = 4
'Rahmen der Zelle "D1" in Magenta färben
ws.Cells(1, 4).Borders.ColorIndex = 7

'Strichstärke des Rahmens der Zelle "B3" setzen
ws.Cells(3, 2).Borders.Weight = 4
'Rahmen der Zelle "B3" rot färben
ws.Cells(3, 2).Borders.Color = RGB(255, 0, 0)
'
Set ws = Nothing
End Sub

Text in einer Zelle färben

Folgende Methoden können verwendet werden, um den Text in einer Zelle einzufärben:

  • den Text mit Hilfe einer Farbkonstanten einfärben.
  • den Text mit einer Farbe aus der Standardfarbpalette einfärben.
  • den Text mit einer RGB Farbe einfärben.
Sub Text_faerben()
Dim ws As Worksheet
Set ws = Worksheets("Tabelle1")
'
'Text in der Zelle "A1" blau färben
ws.Cells(1, 1).Font.Color = vbBlue

'Text in der Zelle "D1" magenta färben
ws.Cells(1, 4).Font.ColorIndex = 7

'Text in der Zelle "B2" rot färben
ws.Cells(2, 2).Font.Color = RGB(255, 0, 0)
Set ws = Nothing
End Sub

Teil eines Textes in einer Zelle einfärben

Es ist auch möglich einen Teil eines Textes in einer Zelle einzufärben. Hierfür wird die „Range.Characters“-Eigenschaft verwendet. Die Syntax ist
Ausdruck.Characters (Start, Länge)
wobei
Ausdruck – Variable, die ein Range-Objekt darstellt.
Start – Position des ersten Zeichens im Text, das eingefärbt werden soll.
Länge – Die Anzahl der Zeichen, die eingefärbt werden sollen.

Sub Teil_eines_Textes_einfaerben()
Dim ws As Worksheet
'
Set ws = Worksheets("Tabelle1")
'
' Teil eines Textes einfärben
ws.Cells(2, 1).Characters(Start:=3, Length:=4).Font.Color = vbRed
'
Set ws = Nothing
End Sub

Interessant ist es, nach einem Begriff in einem Text in einer Excel Zelle zu suchen und falls dieser Begriff im Text enthalten ist, den Begriff einzufärben. Es wäre natürlich auch möglich die Schriftgröße für den Begriff zu ändern oder den Begriff fett zu schreiben.
Beispiel:
In die Zelle „A1“ des Tabellenblatts „Tabelle1“ wurde der Text „Zeichen innerhalb eines Textes einfärben“ geschrieben. In diesem Text soll nun „Textes“ eingefärbt werden. Das ist mit folgendem Code möglich. Im Code wird die Zeichenfolgefunktion „InStr“ verwendet, die im Beitrag „Zeichenfolgenfunktionen“ erklärt wird.

Sub Teil_eines_Textes_einfaerben_2()
Dim sZeichenfolge As String, iPos As Integer, iLen As Integer
Dim sTeilZeichenfolge As String
Dim ws As Worksheet
'
Set ws = Worksheets("Tabelle1")
'
' Der Beispieltext lautet: "Zeichen innerhalb eines Textes einfärben"
sTeilZeichenfolge = "Textes"
iLen = Len(sTeilZeichenfolge)
sZeichenfolge = ws.Cells(1, 1).Value
iPos = InStr(1, sZeichenfolge, sTeilZeichenfolge)
'
' Teil eines Textes einfärben
ws.Cells(1, 1).Characters(Start:=iPos, Length:=iLen).Font.Color = vbRed
' Schriftgroesse für einen Teil eines Textes ändern
ws.Cells(1, 1).Characters(Start:=iPos, Length:=iLen).Font.Size = 14
' Teil eines Textes fett schreiben
ws.Cells(1, 1).Characters(Start:=iPos, Length:=iLen).Font.Bold = True

'
Set ws = Nothing
End Sub

Die Schriftgröße in einer Zelle ändern

Sub Schriftgroesse_aendern()
Dim ws As Worksheet
Set ws = Worksheets("Tabelle1")
ws.Cells(2, 2).Font.Size = 14 ' Schriftgroesse auf 14 Punkt setzen
ws.Cells(2, 2).Font.Bold = True ' Schrift fett formatieren
Set ws = Nothing
End Sub

Einen Zellbereich formatieren

Gitternetzlinien einfügen

Oft muss man einen großen Bereich von Zellen mit Gitternetzlinien versehen. Für einen solchen Fall ist das folgende VBA Programm hilfreich.

Sub Rahmen_hinzufuegen()
'
Dim i As Integer, iNoOfRows As Integer, iNoOfColumns As Integer
Dim iStartRow As Integer
Dim aArrayB As Variant
Dim ws As Worksheet
'
' die vier folgende Zeilen muessen angepasst werden:
Set ws = Worksheets("Tabelle1") ' Tabellenblatt
iNoOfRows = 10                  ' Anzahl der Zeilen
iNoOfColumns = 10               ' Anzahl der Spalten
iStartRow = 1                   ' Startzeile
'
aArrayB = Array(xlEdgeLeft, xlEdgeTop, xlEdgeBottom, xlEdgeRight, xlInsideVertical, xlInsideHorizontal)
ws.Range(Cells(iStartRow, 1), Cells(iNoOfRows, iNoOfColumns)).Select
For i = LBound(aArrayB) To UBound(aArrayB)
    With Selection.Borders(aArrayB(i))
         .LineStyle = xlContinuous   ' Durchgezogene Linie
         .Color = RGB(0, 0, 0)       ' Schwarze Farbe
         .TintAndShade = 0
         .Weight = xlThin            ' Strichstaerke fein
    End With
Next i
Set ws = Nothing
End Sub

Leere Zeilen in einem Tabellenblatt einfügen

Mit folgendem VBA Code kann man eine leere Zeile unterhalb der gewünschten Zeile einfügen:

Sub Zeile_einfuegen()
' Fügt eine leere Zeile unterhalb der Zeile "iZeile" ein
Dim ws As Worksheet, iZeile As Integer
Set ws = Worksheets("Tabelle4")
iZeile = 6
ws.Rows(iZeile + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Set ws = Nothing
End Sub

Mit folgendem Code kann man mehrere leere Zeilen unterhalb der gewünschten Zeile einfügen

Sub Mehrere_Zeilen_einfuegen()
' Fügt mehrere leere Zeile unterhalb der Zeile "iZeile" ein
Dim ws As Worksheet, iZeile As Integer, iAnzahlAnZeilen As Integer
Set ws = Worksheets("Tabelle4")
iZeile = 6
iAnzahlAnZeilen = 3 ' Anzahl der leeren Zeilen, die eingefügt werden sollen
ws.Range(Rows(iZeile + 1), Rows(iZeile + iAnzahlAnZeilen)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Set ws = Nothing
End Sub

Zeilen innerhalb eines Tabellenblatts löschen

Mit folgendem Code lässt sich eine Zeile innerhalb eines Tabellenblatts löschen.
Achtung: mit diesem Code muss man sehr vorsichtig umgehen, da die gelöschten Zeilen unwiederbringlich gelöscht werden. Am sichersten ist es, eine Kopie der Excel Datei anzulegen und den Code dort auszuführen. Sollte etwas schief gehen kann man dann auf die Originaldatei zurückgreifen.

Sub Eine_Zeile_loeschen()
' Löscht die Zeile "iZeile"
Dim ws As Worksheet, iZeile As Integer
Set ws = Worksheets("Tabelle4")
iZeile = 6
ws.Rows(iZeile).Delete
Set ws = Nothing
End Sub

Mit folgendem Code lässt sich die gewünschte Anzahl an Zeilen innerhalb eines Tabellenblatts löschen.
Achtung: mit diesem Code muss man sehr vorsichtig umgehen, da die gelöschten Zeilen unwiederbringlich gelöscht werden. Am sichersten ist es, eine Kopie der Excel Datei anzulegen und den Code dort auszuführen. Sollte etwas schief gehen, kann man dann auf die Originaldatei zurückgreifen.

Sub Mehrere_Zeile_loeschen()
' Löscht die gewünschte Anzahl an Zeilen ab der Zeile "iZeile"
Dim ws As Worksheet, iZeile As Integer, iAnzahlAnZeilen As Integer
Set ws = Worksheets("Tabelle4")
iZeile = 6
iAnzahlAnZeilen = 2
ws.Range(Rows(iZeile), Rows(iZeile + iAnzahlAnZeilen - 1)).Delete
Set ws = Nothing
End Sub

Anmerkung:
Verwendet man die Löschanweisung für das Löschen einer oder mehrerer Zeilen in einer for … next Schleife muss man die Schleife von der letzten Zeile in Richtung zur ersten Zeile durchlaufen.
Beispiel:

Sub Eine_Zeile_loeschen_mit_for_next()
' Löscht die Zeile, die die Zahl 5 enthält
Dim ws As Worksheet, iZeile As Integer
Set ws = Worksheets("Tabelle4")
'
For iZeile = 11 To 2 Step -1
    If ws.Cells(iZeile, 1).Value = 5 Then
       ws.Rows(iZeile).Delete
    End If
Next iZeile
'
Set ws = Nothing
End Sub

Die Excel-Datei für das Beispiel sieht wie folgt aus:

Inhalt eines Bereichs in einem Tabellenblatt löschen

Mit folgendem Code läßt sich der Inhalt eines Bereichs in einem Tabellenblatt löschen. Es wird nur der Inhalt gelöscht und keine Zeilen.

Sub Inhalt_eines_Bereichs_loeschen()
Dim iErsteZeile As Integer, iLetzteZeile As Integer
Dim iErsteSpalte As Integer, iLetzteSpalte As Integer
Dim ws As Worksheet
'
Set ws = Worksheets("Tabelle1")
iErsteZeile = 1
iLetzteZeile = 10
iErsteSpalte = 1
iLetzteSpalte = 5
'
ws.Activate
ws.Range(Cells(iErsteZeile, iErsteSpalte), Cells(iLetzteZeile, iLetzteSpalte)).ClearContents
'
Set ws = Nothing
End Sub

Leere Zeilen am Ende eines Tabellenblattes löschen

Manchmal kann ein Tabellenblatt die maximale Anzahl an Zeilen von 1.048.576 enthalten, von denen fast alle leer sind. Die unerwünschten Zeilen können mit folgendem VBA Code gelöscht werden.

Achtung:
Man sollte sehr vorsichtig bei der Anwendung dieses VBA Codes sein.
Sind die Zeilen erst einmal gelöscht, können sie nicht wieder hergestellt werden: es gibt keine „Zurück“ Taste. Es empfiehlt sich daher, eine Kopie der Excel Datei zu erstellen und dort die Zeilen zu löschen. Im Fehlerfall kann man dann auf die Originaldatei zurückgreifen.

Sub nicht_benoetigte_Zeilen_loeschen()
'
Dim lngFirstRowToDelete As Long, lngLastRowInSheet As Long
Dim ws As Worksheet
'
' Die beiden folgenden Zeilen muessen angepasst werden
Set ws = Worksheets("Tabelle1")
lngFirstRowToDelete = 100 ' Zeile, ab der geloescht werden soll
'
lngLastRowInSheet = ws.Rows.Count
'
ws.Rows(CStr(lngFirstRowToDelete) & ":" & CStr(lngLastRowInSheet)).Select
With Selection
   .ClearContents
   .Delete
End With

Set ws = Nothing
End Sub

Dieser Beitrag hat 13 Kommentare

  1. Alois

    Hallo
    Eine Frage zum RGB Code?
    Simmt das schon alles mit der Farbberechnung ich dachte das die Hex Zahl so berechnet wird.
    Rot * 65536 + Grün * 256 + Blau 256

    Wenn du da was einbauen könntest zu Thema RGB Farbe auslesen (was ich nicht ganz verstehe) wäre Super

    1. admin

      Hallo Alois,
      ich habe versucht, den Beitrag klarer zu formulieren. Hoffentlich ist mir das einigermaßen gelungen. Ich habe auch einen Beispiel Code für das Auslesen der RGB Farbe der Hintergrundfarbe einer Zelle eingefügt. Der Code schreibt den RGB Wert im Format „RGB(Rot, Grün, Blau)“ in das Direktfenster. Im Direktfenster kann man den RGB Wert kopieren und in einen anderen Code einfügen. Das habe ich häufig so gemacht. Hilft Dir dieser Code?

  2. Alois

    Hallo
    Alles Super so mir ist wieder einiges viel verständlicher geworden vor allem die Unterschiede beim umrechnen der Hex Zahlen von Normaldezimalzahlen und Hex rgb Code.
    v
    Vielen Dank Super Erklärungen
    Gruß Alois

  3. Alois

    Hallo
    Super habe alles probiert funktioniert Super.
    Aber ich möchte auch wissen warum das so toll geht.
    Könntest du z.B.
    Right(„00“ & Hex(iGreen)
    mir mal die Funktion erklären „00“ ist wahrscheinlich das Format oder
    und noch eins warum schließt du jede Prozedur mit WS=nothing

    Vielen vielen Dank weiter so SUPER
    Gruß Alois

    1. admin

      Hallo Alois,
      der Ausdruck
      Right(„00“ & Hex(iGreen), 2)
      ist ein Zeichenfolgenausdruck (Zeichenfolge = engl. String). Damit erzwingt man, dass die Zeichenfolge immer zwei Buchstaben lang ist. Ziel ist es eine Zeichenfolge im Format RRGGBB zu erhalten. Dazu muss man wissen, dass die Hex-Funktion eine Zeichenfolge zurückgibt, die den Hexadezimalwert einer Zahl darstellt. „00“ ist eine Zeichenfolge, die zwei Mal aus der Ziffer 0 (= Null) besteht. Mit dem & Zeichen verknüpft man die beiden Zeichenfolgen. Die Funktion „Right(…,2) gibt die zwei ersten Zeichen, von rechts aus gezählt, zurück. Ist beispielsweise iGreen = 0, dann ist Hex(iGreen) = 0 (eine Ziffer lang): In diesem Fall ist „00“ & Hex(iGreen) = „00“ & „0“ = „000“. Die beiden ersten Ziffern von rechts ergeben „00“. Mit folgender Prozedur kannst Du das selbst ausprobieren (iGreen muss im Bereich von 0 – 255 liegen, 255 ist die größte Zahl, die mit einer zweiziffrigen Hex-Zahl dargestellt werden kann, nämlich FF):
      Sub Test_Zeichenfolgeausdruck()
      Dim iGreen As Integer
      iGreen = 0
      Debug.Print Hex(iGreen), „00“ & Hex(iGreen), Right(„00“ & Hex(iGreen), 2)
      End Sub

      Mit ws = Nothing lösche ich eine Objektvariable, die ich vorher erzeugt habe, am Ende des Codes. Es wird empfohlen Objektvariable am Ende immer auf diese Weise zu löschen.

      Habe ich mich verständlich ausgedrückt?

      Viele Grüße
      Stefan

  4. Alois

    Super verständlich bist halt Profi habe in den letzten Tagen mehr gelernt von dir als in hunderten anderer Videos seit ich mich mit VBA beschäftige ist in meinem Alter halt nicht mehr so leicht wie in der Jugend aber deinen Super Ausführungen kann ich gut folgen.
    Tausend Dank für Super verständliche und sehr schnelle Antworten
    Gruß Alois

  5. Alois

    Hallo
    Hätte eine Frage wenn ich bei folgendem Code in eine Inputbox nichts eintrage kommt Fehlermeldung, wie ksnn ich das machen um bei Nichteingabe in eine Box die Sub ohne Meldung zu beenden?
    Sub Rahmen_formatieren()
    Dim AlleRahmen As Variant
    Dim i As Integer
    Dim ErsteZeile As Integer
    Dim LetzteZeile As Integer
    Dim LetzteSpalte As Integer
    Dim Bereich As Range
    ErsteZeile = InputBox(„Nummer der ersten Zeile eingeben“, „Auswahl des Bereiches“)
    LetzteZeile = InputBox(„Nummer der letzten Zeile eingeben“, „Auswahl des Bereiches“)
    LetzteSpalte = InputBox(„Nummer der letzten Spalte eingeben“, „Auswahl des Bereiches“)
    Set Bereich = Range(Cells(ErsteZeile, 1), Cells(LetzteZeile, LetzteSpalte))

    AlleRahmen = Array(xlEdgeLeft, xlEdgeTop, xlEdgeBottom, xlEdgeRight, xlInsideVertical, xlInsideHorizontal)
    ‚ThisWorkbook.Worksheets(„Probeblatt“).Range(„L3:L20“).Select
    Bereich.Select
    For i = LBound(AlleRahmen) To UBound(AlleRahmen) ‚unterster und oberster Array Index.
    ‚ With ThisWorkbook.Worksheets(„Tabelle1“).Range(Bereich).Borders(AlleRahmen(i))
    With Selection.Borders(AlleRahmen(i))
    .LineStyle = xlContinuous
    .Color = RGB(255, 10, 20)
    .Weight = xlThin
    .TintAndShade = 0 ‚Werte zwischen -1 und 1 sind zulässig (Aufhellen oder abdunkeln der Farbe, 0 ist neutral)
    End With
    Next i
    End Sub
    Danke und Gruß
    Alois

    1. admin

      Hallo Alois,

      ich konnte den Fehler nachvollziehen. Wenn man in eine der InputBoxen keinen Wert eingibt gibt es für diese Zeile die Fehlermeldung „Typen unverträglich“. Wird beispielsweise für die Nummer der ersten Zeile kein Wert eingegeben würde das der Anweisung ErsteZeile = „“ entsprechen, was die Fehlermeldung „Typen unverträglich“ zur Folge hat. Den Fehler kann man durch einen kleinen „Umweg“ über einen String (deutsch Zeichenfolge) abfangen, wie im folgenden Code gezeigt. Einer String Variablen darf man einen String der Länge Null zuweisen. Nur wenn die Länge des Strings größer als 0 ist, wird der String in eine Integer Zahl umgewandelt. Der vorbesetzte Wert einer Integer Variablen ist 0. Mit der Abfrage
      If ErsteZeile > 0 And LetzteZeile > 0 And LetzteSpalte > 0 Then
      kann man überprüfen, ob in jede Inputbox ein Wert eingegeben wurde.
      Bei Bedarf kann man zusätzlich abfragen, ob sich die Eingabe Zeichenfolge in eine Zahl umwandeln lässt und nur dann die Eingabe in eine Zahl umwandeln: if Len(strInput) > 0 and IsNumeric(strInput) = True then …..

      Sub Rahmen_formatieren_n()
      Dim AlleRahmen As Variant
      Dim i As Integer
      Dim ErsteZeile As Integer, strInput As String
      Dim LetzteZeile As Integer
      Dim LetzteSpalte As Integer
      Dim Bereich As Range
      strInput = InputBox(„Nummer der ersten Zeile eingeben“, „Auswahl des Bereiches“)
      If Len(strInput) > 0 Then ErsteZeile = CInt(strInput)
      strInput = InputBox(„Nummer der letzten Zeile eingeben“, „Auswahl des Bereiches“)
      If Len(strInput) > 0 Then LetzteZeile = CInt(strInput)
      strInput = InputBox(„Nummer der letzten Spalte eingeben“, „Auswahl des Bereiches“)
      If Len(strInput) > 0 Then LetzteSpalte = CInt(strInput)

      If ErsteZeile > 0 And LetzteZeile > 0 And LetzteSpalte > 0 Then
      Set Bereich = Range(Cells(ErsteZeile, 1), Cells(LetzteZeile, LetzteSpalte))

      AlleRahmen = Array(xlEdgeLeft, xlEdgeTop, xlEdgeBottom, xlEdgeRight, xlInsideVertical, xlInsideHorizontal)
      ‚ThisWorkbook.Worksheets(„Probeblatt“).Range(„L3:L20“).Select
      Bereich.Select
      For i = LBound(AlleRahmen) To UBound(AlleRahmen) ‚unterster und oberster Array Index.
      ‚ With ThisWorkbook.Worksheets(„Tabelle1“).Range(Bereich).Borders(AlleRahmen(i))
      With Selection.Borders(AlleRahmen(i))
      .LineStyle = xlContinuous
      .Color = RGB(255, 10, 20)
      .Weight = xlThin
      .TintAndShade = 0 ‚Werte zwischen -1 und 1 sind zulässig (Aufhellen oder abdunkeln der Farbe, 0 ist neutral)
      End With
      Next i
      End If
      End Sub
      Löst dieser Vorschlag das Problem?
      Viele Grüße
      Stefan

  6. Alois

    Wie immer schnellen und fachlichen Super Lösungsvorschlag.
    Anfänger dankt Super Profi

  7. Alois

    Hallo
    Bin fleißig am ausprobieren.
    Da aber der Code nicht funktioniert wenn in einer Box nichts eingegeben wird, gibt es da nicht eine If Anweisung die Prozedur beendet sobald eine Box leer ist.
    Ist als Anfänger noch sehr schwer zu verstehen mit deiner Code Erweiterung
    Halte mich nicht ganz für dumm bin halt nur blutiger Anfänger und habe immer eine Super Freude wenn was klappt was bei deinen Anweisungen schon oft der Fall war.
    Schönen Sonntag und Gruß
    Alois

    1. admin

      Hallo Alois,
      der Kommentar ist vollkommen berechtigt. Wenn in eine der InputBoxen kein Wert eingegeben wird hat die entsprechende Variable ErsteZeile, LetzteZeile oder LetzteSpalte den Wert Null (Null ist der voreingestellte Wert für Integer Variablen). Falls eine der Variablen den Wert 0 hat würde das einen schwer zu findenden Fehler in der Zeile
      Set Bereich = Range(Cells(ErsteZeile, 1), Cells(LetzteZeile, LetzteSpalte))
      auslösen. Dieser Fehler wird daher in der von mit vorgeschlagenen Änderung des Codes mit der Zeile
      If ErsteZeile > 0 And LetzteZeile > 0 And LetzteSpalte > 0 Then …
      abgefangen (das Ende „End If“ der If-Abfrage befindet sich unmittelbar vor „End Sub“). Natürlich kann man sich mehr als einen Weg überlegen, um den Fehler abzufangen. Der Code innerhalb der If-Abfrage wird nur dann ausgeführt, wenn die Bedingung erfüllt ist. Ansonsten wird die Sub-Prozedur beendet. Bei Bedarf könnte man ein Else in die If-Abfrage einbauen und eine Fehlermeldung in einer Message Box oder im Direktfenster ausgeben, z. B.
      Else
      Debug.Print „Eingabe unvollständig“
      vor dem „End If“
      Habe ich mich verständlich ausgedrückt?
      Viele Grüße und einen schönen Sonntagabend
      Stefan

  8. Alois

    Hallo Stefan
    Werde das jetzt schon schaffen bei den Super Anleitungen von Dir.
    Aber natürlich ist es viel einfacher zu verstehen wenn es mit so einem Codefenster (wie bei deinen Beispielen schwarz hinterlegt) die ich nun mittlerweile nach einigem studieren alle verstanden habe.

    Macht mir sehr viel Spaß nach deinen Anleitungen zu probieren, habe noch einige Kapitel deiner Seite ab zu arbeiten aber bei so freundlicher Unterstützung fällt mir das gar nicht mal so schwer.
    Beste Seite im Netz für Leute mit meinem Wissen und ich habe wirklich sehr sehr viel you tube Videos geschaut und die meisten nicht so leicht nachverfolgen können wie deine Seite.
    Dafür nochmals vielen Dank
    Gruß Alois

Schreibe einen Kommentar