Discussion:
"Bedingte Formatierung" mit VBA in Workbook
(zu alt für eine Antwort)
Ralf Brinkmann
1970-01-01 00:00:00 UTC
Permalink
Hallo Alle,

ich hatte hier mal von, ich glaube, Melanie eine tolle "Formel" bekommen, mit
der ich auf einen Rutsch in all meinen zwölf Monatsblättern des Dienstplanes
die jeweiligen Dienstgruppen (A bis E) in den Zellen B4 bis BK4 in einer Art
"bedingter Formatierung" unterschiedlich einfärben konnte:

Option Explicit
Private Sub Worksheet_Calculate()
On Error GoTo ErrorHandler
Application.ScreenUpdating = False
Dim Zelle As Range
For Each Zelle In Range("B4:BK4")
Select Case Zelle.Value
Case "A"
Zelle.Interior.ColorIndex = 50 'Grün
Case "B"
Zelle.Interior.ColorIndex = 6 'Gelb
Case "C"
Zelle.Interior.ColorIndex = 3 'Rot
Case "D"
Zelle.Interior.ColorIndex = 41 'Blau
Case "E"
Zelle.Interior.ColorIndex = 1 'Schwarz
Zelle.Font.ColorIndex = 2 'Weiß
Case Else
Zelle.Interior.ColorIndex = xlNone 'keine
End Select
Next
ErrorHandler:
Application.ScreenUpdating = True
End Sub

Dieses Ding habe ich in jedem einzelnen Tabellenblatt untergebracht, also 12
mal.

Schlau, wie ich hier mittlerweile geworden bin :-), wollte ich das nun
vereinfachen und überall rauslöschen und nur noch vorne in "Diese
Arbeitsmappe" drin stehen haben. Also habe ich es wie folgt einfach in der
zweiten Zeile abgeändert:

Option Explicit
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
'Private Sub Worksheet_Calculate()
On Error GoTo ErrorHandler
Application.ScreenUpdating = False
Dim Zelle As Range
For Each Zelle In Range("B4:BK4")
Select Case Zelle.Value
Case "A"
Zelle.Interior.ColorIndex = 50 'Grün
Case "B"
Zelle.Interior.ColorIndex = 6 'Gelb
Case "C"
Zelle.Interior.ColorIndex = 3 'Rot
Case "D"
Zelle.Interior.ColorIndex = 41 'Blau
Case "E"
Zelle.Interior.ColorIndex = 1 'Schwarz
Zelle.Font.ColorIndex = 2 'Weiß
Case Else
Zelle.Interior.ColorIndex = xlNone 'keine
End Select
Next
ErrorHandler:
Application.ScreenUpdating = True
End Sub

Leider ändert das mir die Farben jetzt nur noch in der aktuellen Tabelle. Auf
den Folgeblättern gibt es Kuddelmuddel.

Was habe ich vergessen?

Gruß, Ralf
Thomas Ramel
2004-08-29 09:12:11 UTC
Permalink
Grüezi Ralf

Ralf Brinkmann schrieb am 26.08.2004
Post by Ralf Brinkmann
ich hatte hier mal von, ich glaube, Melanie eine tolle "Formel" bekommen, mit
der ich auf einen Rutsch in all meinen zwölf Monatsblättern des Dienstplanes
die jeweiligen Dienstgruppen (A bis E) in den Zellen B4 bis BK4 in einer Art
[Ereignis-Proztedur gesnippt]
Post by Ralf Brinkmann
Dieses Ding habe ich in jedem einzelnen Tabellenblatt untergebracht, also 12
mal.
Schlau, wie ich hier mittlerweile geworden bin :-), wollte ich das nun
vereinfachen und überall rauslöschen und nur noch vorne in "Diese
Arbeitsmappe" drin stehen haben.
Das ist eine Sehr gute Idee, die du auch soweit korrekt umgesetzt hast.
Du musst nur noch sagen, auf welches Tabellenblatt sich die Veränderung
Post by Ralf Brinkmann
Option Explicit
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
'Private Sub Worksheet_Calculate()
On Error GoTo ErrorHandler
Application.ScreenUpdating = False
Dim Zelle As Range
For Each Zelle In Range("B4:BK4")
For Each Zelle In Sh.Range("B4:BK4")

'Füge also die Objekt-Variable für das Tabellenlbtt wie hier ein
Post by Ralf Brinkmann
Select Case Zelle.Value
Case "A"
Zelle.Interior.ColorIndex = 50 'Grün
Case "B"
Zelle.Interior.ColorIndex = 6 'Gelb
Case "C"
Zelle.Interior.ColorIndex = 3 'Rot
Case "D"
Zelle.Interior.ColorIndex = 41 'Blau
Case "E"
Zelle.Interior.ColorIndex = 1 'Schwarz
Zelle.Font.ColorIndex = 2 'Weiß
Case Else
Zelle.Interior.ColorIndex = xlNone 'keine
End Select
Next
Application.ScreenUpdating = True
End Sub
--
Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -

[Win XP Pro SP-1 / xl2000 SP-3]
Ralf Brinkmann
1970-01-01 00:00:00 UTC
Permalink
Hallo Thomas,

fein, dass Du es doch noch gefunden hast!
Post by Thomas Ramel
Das ist eine Sehr gute Idee, die du auch soweit korrekt umgesetzt hast.
Puh!
Post by Thomas Ramel
Du musst nur noch sagen, auf welches Tabellenblatt sich die
Das dachte ich mir dann auch.
Post by Thomas Ramel
For Each Zelle In Sh.Range("B4:BK4")
Ach! Woher soll ein Mensch das denn wissen? Und woher weißt Du das? Wie ich
schon mal sagte, in Access ist das etwas einfacher (und auch bei den normalen
Funktionen in Excel), weil man da einfach anklicken und sich alle
Möglichkeiten anschauen kann. Dann wählt man nur noch die richtige aus.

Oder gibt es da in VBA für Excel etwa so was Ähnliches?
Post by Thomas Ramel
'Füge also die Objekt-Variable für das Tabellenlbtt wie hier ein
Das werde ich gleich mal ausprobieren. DANKE!

Gruß, Ralf
Ralf Brinkmann
1970-01-01 00:00:00 UTC
Permalink
Hallo Thomas!
Post by Ralf Brinkmann
Ach! Woher soll ein Mensch das denn wissen?
Gibt es denn im VB-Editor irgendwo eine Auflistung sämtlicher möglichen
"Befehle", so wie man sie in Excel selbst sieht, wenn man auf das
Funktionssymbol klickt?

Oder kennst Du die einfach alle auswendig?

Gruß, Ralf
Monika Weber
2004-08-29 16:52:01 UTC
Permalink
Hallo Ralf,
Post by Ralf Brinkmann
Post by Ralf Brinkmann
Ach! Woher soll ein Mensch das denn wissen?
Gibt es denn im VB-Editor irgendwo eine Auflistung sämtlicher möglichen
"Befehle", so wie man sie in Excel selbst sieht, wenn man auf das
Funktionssymbol klickt?
drück die Taste F2. Auf diese Weise gelangst Du
zum Objektkatalog. Dort sollte alles zu finden sein.

Bei dem "sh" handelte es sich nicht um einen Befehl,
sondern um eine Variable. Diese findest Du im runden
Klammernpaar deklariert.

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
--
Es liebs Grüessli
Monika Weber [Microsoft MVP für Excel]

http://www.jumper.ch (Office Help Desk)
http://excel.codebooks.de
Ralf Brinkmann
1970-01-01 00:00:00 UTC
Permalink
Hallo Monika,
Post by Monika Weber
Post by Ralf Brinkmann
Ach! Woher soll ein Mensch das denn wissen?
drück die Taste F2. Auf diese Weise gelangst Du
zum Objektkatalog. Dort sollte alles zu finden sein.
Aha. Da muss ich mich mal durcharbeiten. Ich hoffe, da stehen auch Erklärungen
dabei.
Post by Monika Weber
Bei dem "sh" handelte es sich nicht um einen Befehl,
sondern um eine Variable. Diese findest Du im runden
Klammernpaar deklariert.
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Gut, danke. Ich glaube, ich brauche mal einen richtigen Unterricht. Hast Du am
kommenden Wochenende schon was vor? :-)

Gruß, Ralf


SEEN-BY: 244/1200 2122

Loading...