Inhaltsverzeichnis
ToggleEine Zelle formatieren
Hintergrund einer Zelle einfärben
Hintergrund einer Zelle mit Hilfe einer Farbkonstanten einfärben
Der Hintergrund einer Zelle lässt sich mit dem Befehl „Interior.Color“ wie folgt mit Hilfe einer VBA Farbkonstanten einfärben:
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:
- Auf die Zelle klicken, deren Hintergrund eingefärbt werden soll.
- Auf der Registerkarte Start auf den Pfeil neben Füllfarbe (Symbol Farbeimer) klicken.
- 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.
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
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
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?
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
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
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
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
Pingback: Excel Objekte - Excel VBA Tipps
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
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
Wie immer schnellen und fachlichen Super Lösungsvorschlag.
Anfänger dankt Super Profi
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
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
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