Anzeige
Archiv - Navigation
1524to1528
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

Bereich mit Farbe füllen

Bereich mit Farbe füllen
29.11.2016 11:42:50
Ulf
Hallo Forum,
ich bin zwar kein direkter VBA-Anfänger, aber ich habe ab und zu meine Probleme. So auch hier wieder :
ich möchte einen frei definierbaren Bereich mit einer Hintergrundfarbe (hier : grau) füllen. _ Dazu habe ich folgende Routine geschrieben (intLastColumn und strWetter sind als Public vorher bereits definiert) :

Public Sub Bereich_Füllen(ByVal intRow, ByVal intColumn)
Dim intI As Integer        ' Schleifenzähler
Dim wksOne As Worksheet    ' aktuelles Arbeitsblatt
Dim rngZeile As Range      ' aktuelle Zeile
Set wksOne = ThisWorkbook.Sheets(strWetter)    ' Arbeitsblatt "Wetterlage"
With wksOne
intLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
If Cells(intRow - 1, 1).Interior.Color = RGB(217, 217, 217) Then
.Range(wksOne.Cells(intRow, 1), _
wksOne.Cells(intRow, intLastColumn)).Interior.Color = xlNone
intOffset = 1
Else
intOffset = 0
End If
For intI = intRow + intOffset To intLastRow Step 2
.Range(Cells(intI, 1), Cells(intRow, intLastColumn)) _
.Interior.Color = RGB(217, 217, 217) ' Zeile grau färben
.Range(Cells(intI + 1, 1), Cells(intRow, intLastColumn)) _
.Interior.Color = RGB(255, 255, 255) ' Zeile weiß färben
Next intI
End With
End Sub

Bei der Zuweisung der Farbe zum Bereich bekomme ich immer einen Laufzeitfehler 1004 : 'Anwendungs- oder objektdefinierter Fehler'. Leider hilft mir die Hilfe nicht wirklich weiter. Ich habe schon mehrere Varianten der Ansprache des Range-Objektes versucht, allerdings ohne Erfolg. Meine letzte Hoffnung ist daher dieses Forum...
MfG,
Ulf

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bereich mit Farbe füllen
29.11.2016 11:47:14
Rudi
Hallo,
Referenzierung mangelhaft!
Public Sub Bereich_Füllen(ByVal intRow, ByVal intColumn)
Dim intI As Integer        ' Schleifenzähler
Dim wksOne As Worksheet    ' aktuelles Arbeitsblatt
Dim rngZeile As Range      ' aktuelle Zeile
Set wksOne = ThisWorkbook.Sheets(strWetter)    ' Arbeitsblatt "Wetterlage"
With wksOne
intLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
If .Cells(intRow - 1, 1).Interior.Color = RGB(217, 217, 217) Then
.Range(.Cells(intRow, 1), _
.Cells(intRow, intLastColumn)).Interior.Color = xlNone
intOffset = 1
Else
intOffset = 0
End If
For intI = intRow + intOffset To intLastRow Step 2
.Range(.Cells(intI, 1), .Cells(intRow, intLastColumn)) _
.Interior.Color = RGB(217, 217, 217) ' Zeile grau färben
.Range(.Cells(intI + 1, 1), .Cells(intRow, intLastColumn)) _
.Interior.Color = RGB(255, 255, 255) ' Zeile weiß färben
Next intI
End With
End Sub
Gruß
Rudi
Anzeige
AW: Bereich mit Farbe füllen
29.11.2016 12:10:19
Ulf
Hallo Rudi,
Danke für die schnelle Antwort. Leider bekomme ich auch nach der Einarbeitung Deiner Verbesserung den gleichen Fehler an der gleichen Stelle.
Noch irgendeine andere Idee (sonst müsste ich die Zeilen in einer Schleife zellenweise färben) ?
Gruß,
Ulf
AW: Bereich mit Farbe füllen -
29.11.2016 12:35:05
Daniel
Hi
was da so grundsätzlich falsch ist:
1. sollten Variablen für Zeilennummern immer als LONG deklariert werden.
Integer reicht nur bis c.a 32.000 und das kann für Zeilennummern zu wenig sein.
Außerdem verarbeitet der Rechner Integer und Long gleich schnell, dh die Verwendung von Integer hat keinen Vorteil (die paar gesparten Bytes sind bei Einzelvariablen irrelevant)
2. beim Range in der For-Schleife fehlt das Sheet vor den Cells innerhalb der Range.
Cells ohne Tabellenblattangabe beziehen sich idR auf das aktive Tabellenblatt und bei Range(Cells(), Cells()) muss man darauf achten, dass sich die beiden Cells auf das gleiche Tabellenblatt beziehen wie die Range, sonst gibt es einen Laufzeitfehler.
3. es ist generell ungünstig, jede 2. Zeile einzufärben. Excel speichert die Formatierungsinformation "Blockweise", und durch das einfärben jeder 2. Zeile entsteht die maximale Anzahl an Blöcken.
Besser wäre hier, die Bedingte Formatierung für alle Zellen einzusetzen mit der Regel: IstGerade(Zeile()), weil hier zwar auch jede 2. Zeile gefärbt wird, aber alle alle Zeilen die die gleiche Formatierung haben und damit einen Block bilden.
Oder man formatiert den ganzen Bereich als Tabelle (Einfügen-Tabellen-Tabelle), dann bekommt man auch eine Zeilenweise wechselnde Formatierung (welche dann auch beim Sortieren, Filtern, Löschen erhalten bleibt)
Gruß Daniel
Anzeige
AW: Bereich mit Farbe füllen -
29.11.2016 13:23:47
Ulf
Hallo Daniel,
vielen Dank für Deine grundsätzlichen Erklärungen. Long benötige ich hierbei zwar nicht, aber ich werde es in Zukunft berücksichtigen.
Die Idee mit der Bedingten Formatierung finde ich prinzipiell gut, aber es hapert bei mir an der Umsetzung. Wie muss ich was formatieren, damit Excel tatsächlich auch bei nachträglich eingefügten Zeilen diese Formatierung vornimmt ? Kann ich das ggfs. auch in VBA realisieren oder wäre der Aufwand dafür zu hoch ?
Ich habe das Ganze jetzt mal etwas zusammengefasst, aber es klappt immer noch nicht :
Public Sub Bereich_Färben(ByVal rngTarget As Range)
Dim intI As Integer        ' Schleifenzähler
Dim intOffset As Integer   ' Offset für Zeile
Dim wksOne As Worksheet    ' aktuelles Arbeitsblatt
Set wksOne = ThisWorkbook.Sheets(strWetter)  ' Arbeitsblatt "Wetterlage"
With wksOne
intLastRow = .Cells(Rows.Count, 1).End(xlUp).Row ' letzte beschriebene Zeile
If Cells(rngTarget.Row - 1, 1).Interior.Color = RGB(217, 217, 217) Then
rngTarget.Interior.Color = xlNone
intOffset = 1
Else
intOffset = 0
End If
For intI = rngTarget.Row + intOffset To intLastRow Step 2
rngTarget.Interior.Color = RGB(217, 217, 217)
rngTarget.Interior.Color = xlnone
Next intI
End With
End Sub

Er bemängelt immer noch die Anweisung
       rngTarget.Interior.Color = xlNone

mit dem Laufzeitfehler 1004.
Ich danke schon mal für die Antworten.
Gruß,
Ulf
Anzeige
AW: Bereich mit Farbe füllen -
29.11.2016 13:40:59
Daniel
Hi
der Code ansich ist zwar nicht dafür geeignet, jede zweite Zeile zu färben, aber er sollte eigentlich ohne Fehler funktionieren.
der Fehler dürfe daher kommen, dass das Blatt noch geschützt ist, und es daher nicht zulässig ist, die Formatierung zu ändern.
Gruß Daniel
AW: Bereich mit Farbe füllen -
29.11.2016 13:46:57
Ulf
Ja, Daniel,
genau dasselbe habe ich auch gerade herausgefunden, aber trotzdem noch einmal Danke an alle, die mir geholfen haben.
Gruß,
Ulf
AW: Bereich mit Farbe füllen -
29.11.2016 13:29:26
Ulf
Hallo Daniel,
vielen Dank für Deine grundsätzlichen Erklärungen. Long benötige ich hierbei zwar nicht, aber ich werde es in Zukunft berücksichtigen.
Die Idee mit der Bedingten Formatierung finde ich prinzipiell gut, aber es hapert bei mir an der Umsetzung. Wie muss ich was formatieren, damit Excel tatsächlich auch bei nachträglich eingefügten Zeilen diese Formatierung vornimmt ? Kann ich das ggfs. auch in VBA realisieren oder wäre der Aufwand dafür zu hoch ?
Ich habe das Ganze jetzt mal etwas zusammengefasst, aber es klappt immer noch nicht :
Public Sub Bereich_Färben(ByVal rngTarget As Range)
Dim intI As Integer        ' Schleifenzähler
Dim intOffset As Integer   ' Offset für Zeile
Dim wksOne As Worksheet    ' aktuelles Arbeitsblatt
Set wksOne = ThisWorkbook.Sheets(strWetter)  ' Arbeitsblatt "Wetterlage"
With wksOne
intLastRow = .Cells(Rows.Count, 1).End(xlUp).Row ' letzte beschriebene Zeile
If Cells(rngTarget.Row - 1, 1).Interior.Color = RGB(217, 217, 217) Then
rngTarget.Interior.Color = xlNone
intOffset = 1
Else
intOffset = 0
End If
For intI = rngTarget.Row + intOffset To intLastRow Step 2
rngTarget.Interior.Color = RGB(217, 217, 217)
rngTarget.Interior.Color = xlnone
Next intI
End With
End Sub

Er bemängelt immer noch die Anweisung
       rngTarget.Interior.Color = xlNone

mit dem Laufzeitfehler 1004.
Ich danke schon mal für die Antworten.
Gruß,
Ulf
Anzeige

35 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige