Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
960to964
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
960to964
960to964
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

aktive Zelle farbig, Code anpassen

aktive Zelle farbig, Code anpassen
20.03.2008 13:14:39
Christian

Hallo an Forum,
nachfolgenden Code habe ich von Hajo's HP.
Wie muss der Code angepasst werden, das er nur die aktiven Zellen in einem Tabellenblatt (bei mir heisst das Blatt Kalkulation) markiert?
Vielen Dank in Voraus an die Helfer!
MfG Christian
Option Explicit
'**************************************************
'* H. Ziplies *
'* 24.07.05 komplette Überarbeitung des Code *
'* erstellt von Hajo.Ziplies@web.de *
'* http://Hajo-Excel.de/ *
'**************************************************
' Farbformatierungen während der Selektion bleiben erhalten, außer ByFarbe
' Abschalten der Markierung durch Doppelklick
Dim BoAktion As Boolean ' Zustand der Markierung
Dim StName As String ' CodeName der Tabelle
Dim StWert(256, 1) As String ' 0=Zelladresse; 1=Farbe der Zelle
Dim InI As Integer ' Schleifenvariable
Dim ByFarbe As Byte ' Farbe der Markierung 1 bis 56


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If BoAktion Then Exit Sub                                       ' Markierung aus
'   nach Hinweis von Peter Haserodt Vergleich eingefügt ob Tabelle
If TypeName(ActiveSheet) = "Worksheet" Then Zurück              ' Farben zurückstellen
End Sub



Private Sub Workbook_Open()
If Selection.Cells.Count > 257 Then Exit Sub                     ' mehr als die mögliche  _
Anzahl markiert
'   nach Hinweis von Peter Haserodt Vergleich eingefügt ob Worksheet
If TypeName(ActiveSheet) = "Worksheet" Then Auslesen    ' Farbe auslesen
End Sub



Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If BoAktion Then Exit Sub                               ' Markierung ausgeschaltet
Zurück                                                  ' Farben zurückstellen
If Target.Count > 257 Then Exit Sub                     ' mehr als die mögliche Anzahl  _
markiert
'   nach Hinweis von Peter Haserodt Vergleich eingefügt ob Tabelle
If TypeName(ActiveSheet) = "Worksheet" Then Auslesen    ' Farben der aktuellen Zeile  _
auslesen
End Sub



Private Sub Workbook_BeforeClose(Cancel As Boolean)
If BoAktion Then Exit Sub                               ' Markierung ausgeschaltet
'   nach Hinweis von Peter Haserodt Vergleich eingefügt ob Tabelle
If TypeName(ActiveSheet) = "Worksheet" Then Zurück      ' Farben zurückstellen
End Sub



Private Sub Workbook_BeforePrint(Cancel As Boolean)
'   falls Farbe beim Druck wieder zurückgestellt werden soll
'   nach Druck ist die aktuelle Zelle nicht markiert
If BoAktion Then Exit Sub                               ' Markierung ausgeschaltet
'   nach Hinweis von Peter Haserodt Vergleich eingefügt
If TypeName(ActiveSheet) = "Worksheet" Then Zurück      ' Farben zurückstellen
End Sub



Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If BoAktion Then Exit Sub                               ' Markierung ausgeschaltet
Zurück                                                  ' Farben zurückstellen
'   nach Hinweis von Peter Haserodt Vergleich eingefügt
If TypeName(ActiveSheet) = "Worksheet" Then
If Selection.Cells.Count > 257 Then Exit Sub        ' mehr als die mögliche Anzahl  _
markiert
Auslesen
End If
End Sub



Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If BoAktion Then Exit Sub                               ' Markierung ausgeschaltet
'   nach Hinweis von Peter Haserodt Vergleich eingefügt
If TypeName(ActiveSheet) = "Worksheet" Then Zurück      ' Farbe zurückstellen
End Sub



Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel  _
As Boolean)
BoAktion = Not BoAktion                                 ' Markierung umschalten
'   nach Hinweis von Peter Haserodt Vergleich eingefügt
If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub   ' keine Tabelle
If BoAktion Then                                        ' Markierung ausgeschaltet
Zurück                                              ' Farben zurückstellen
Else
Auslesen                                            ' Farben auslesen
End If
Cancel = True                                           ' Cursor in Zelle abschalten
End Sub



Private Sub Zurück()
Dim StKlarname As String                    ' Klarname der Tabelle
If StName = "" Then Exit Sub                ' die Variable ist noch nicht belegt
'   Klarname der Tabellle feststellen
Dim WsTabelle As Worksheet
For Each WsTabelle In Worksheets            ' Schleife über alle Tabellen
If WsTabelle.CodeName = StName Then     ' Namen mit abgespeicherten vergleichen
StKlarname = WsTabelle.Name         ' Namen auf Register auslesen
Exit For                            ' Schleife verlassen
End If
Next WsTabelle
If StKlarname = "" Then                     ' Tabelle wurde gelöscht
StWert(0, 1) = ""                       ' ersten vorhanden Wert löschen, die Werte  _
werden nicht mehr benötigt
Exit Sub
End If
'   Farben zurückstellen
With Worksheets(StKlarname)
For InI = 0 To 256
If StWert(InI, 1) = "" Then Exit For ' keine weiteren Werte vorhanden
' ist die Zelle mit ByFarbe markiert alte Zellenfarbe zurücksetzen
If .Range(StWert(InI, 0)).Interior.ColorIndex = ByFarbe Then
.Range(StWert(InI, 0)).Interior.ColorIndex = CInt(StWert(InI, 1))
End If
Next InI
'        .Protect "Passwort"
End With
End Sub



Private Sub Auslesen()
Dim RaZelle As Range
ByFarbe = 3                                         ' Farbe der Markierung
InI = 0
StName = ActiveSheet.CodeName                       ' CodeName der Tabelle
'    ActiveSheet.Unprotect "Passwort"                    ' Schutz aufheben
For Each RaZelle In Selection                       ' Schleife über alle markierten Zellen
StWert(InI, 0) = RaZelle.Address                ' Zelladresse
StWert(InI, 1) = RaZelle.Interior.ColorIndex    ' Farbe der Zelle
RaZelle.Interior.ColorIndex = ByFarbe           ' Zelle mit Farbe markieren
InI = InI + 1                                   ' Laufvariable erhöhen
Next RaZelle
'    ActiveSheet.Protect "Passwort"                      ' Schutz aufheben
If InI < 256 Then StWert(InI + 1, 1) = ""           ' den nächsten alten Farbwerte löschen
End Sub


10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: aktive Zelle farbig, Code anpassen
20.03.2008 14:12:39
Christian
Hallo Hajo,
Danke für den Tip, aber ;-) das ist noch nicht die perfekte Lösung, denn in anderen Tabellenblättern sind per Hyperlink Verweise auf das Tabellenblatt Kalkulation, und da hätte ich halt gerne nur in diesem Blatt die aktiven Zellen farbig unterlegt.
In Deinem Bsp. kann man die Markierung nur für die ganze Mappe an- und ausschalten, wäre soweit in Ordnung, wenn nicht die Hyperlinks wären.
Leider gehen meine VBA Kenntnisse gegen Null, so das ich keine Ahnung habe, den Code sohin gehend zu ändern, das nur im Tabellenblatt Kalkulation markiert wird.
MfG Christian

Anzeige
AW: aktive Zelle farbig, Code anpassen
20.03.2008 14:18:30
Hajo_Zi
Hallo Christian,
in dem Code muss man doch nur den Namen der aktuellen Tabelle prüfen, ich bin leider schon fast fort und kann mich da jetzt nicht drum kümmern.
Gruß Hajo

AW: aktive Zelle farbig, Code anpassen
20.03.2008 14:47:26
Beverly
Hi Christian,
wenn du den Code aus dem von Hajo verlinkten Beispiel nimmst und (ohne den Code großartig verändern zu wollen) den im allgemeinen Modul1 durch diesen ersetzt, sollte nur in Tabelle "Test2" die Zelle markiert werden. In den anderen ist zwar dar Menüpunkt im Kontextmenü der rechten Maustaste noch vorhanden, bleibt aber ohne Wirkung


Option Explicit
Option Private Module   ' damit Makros nicht sichtbar
'* H. Ziplies                                     *
'* 24.10.06                                       *
'* erstellt von Hajo.Ziplies@web.de               *
'* http://Hajo-Excel.de/
Public BoZustand As Boolean         ' Zustand der Markierung
Public StName As String             ' CodeName der Tabelle
Dim StWert(256, 1) As String        ' 0=Zelladresse; 1=Farbe der Zelle
Public InI As Integer               ' Schleifenvariable
Public ByFarbe As Byte              ' Farbe Markierung
'   Kontextmenü
Sub KontextmenüErgänzen()
Dim oBtn As CommandBarButton
Set oBtn = Application.CommandBars("Cell").Controls.Add
With oBtn
.Caption = "Markierung"        ' Beschriftung
.OnAction = "Markierung"       ' Aktion
.FaceId = 343                  ' Symbol
End With
Set oBtn = Nothing
End Sub
Sub KontextmenüZurücksetzen()
On Error Resume Next
Application.CommandBars("Cell").Controls("Markierung").Delete
End Sub
Sub Markierung()
'   nach Hinweis von Peter Haserodt Vergleich eingefügt
If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub               ' keine Tabelle
If ActiveSheet.Name = "Test2" Then
With Application.CommandBars("Cell").Controls("Markierung")
If .FaceId = 342 Then
.FaceId = 343
Auslesen                                                        ' Farbe  _
Fadenkreuz auslesen
MsgBox "Markierung ein"
Else
.FaceId = 342
Zurück                                                          ' Farbe zurü _
ckstellen
MsgBox "Markierung aus"
End If
End With
BoZustand = Not BoZustand
End If
End Sub
Sub Zurück()
'   Farben zurückstellen
With Worksheets("Test2")
'        .Unprotect "Passwort"
For InI = 0 To 256
If StWert(InI, 1) = "" Then Exit For ' keine weiteren Werte vorhanden
' ist die Zelle mit ByFarbe markiert alte Zellenfarbe zurücksetzen
If .Range(StWert(InI, 0)).Interior.ColorIndex = ByFarbe Then
.Range(StWert(InI, 0)).Interior.ColorIndex = CInt(StWert(InI, 1))
End If
Next InI
'        .Protect "Passwort"
End With
End Sub
Sub Auslesen()
Dim RaZelle As Range
ByFarbe = 3                                         ' Farbe der Markierung
InI = 0
If ActiveSheet.Name = "Test2" Then
'        ActiveSheet.Unprotect "Passwort"                    ' Schutz aufheben
For Each RaZelle In Selection                       ' Schleife über alle markierten  _
Zellen
StWert(InI, 0) = RaZelle.Address                ' Zelladresse
StWert(InI, 1) = RaZelle.Interior.ColorIndex    ' Farbe der Zelle
RaZelle.Interior.ColorIndex = ByFarbe           ' Zelle mit Farbe markieren
InI = InI + 1                                   ' Laufvariable erhöhen
Next RaZelle
'        ActiveSheet.Protect "Passwort"                      ' Schutz aufheben
If InI < 256 Then StWert(InI + 1, 1) = ""           ' den nächsten alten Farbwerte lö _
schen
End If
End Sub<7pre>

Grußformel

Anzeige
AW: aktive Zelle farbig, Code anpassen
20.03.2008 15:04:38
Christian
Hallo Hajo, Hallo Karin,
danke erst einmal für eure Unterstützung, werde mich heute abend eingehend damit beschäftigen, da ich jetzt auch erstmal weg bin.
Rückmeldung erfolgt auf jeden Fall!
MfG Christian

Code angepasst
21.03.2008 09:51:30
Christian
Hallo Karin, Hallo Hajo,
Danke für Eure Hilfe, habe den Code von Karin/Hajo nach meinen Wünschen anpassen können.
MfG Christian

doch noch Probleme
21.03.2008 14:21:33
Christian
Hallo Karin, Hallo Hajo und andere Helfer,
Testweise hat das eigentlich alles funktioniert in meiner Testmappe, aber beim Einfügen in die Orginal-datei gibt es Probleme. Und zwar beim Klick auf die Rechte Maustaste, dazu hat mir Hajo vor einiger Zeit schon mal einen Code für ein zusätzliches Kontextmenü geschrieben, der Zelleninhalte aus dem Tabellenblatt Kalkulation anzeigt.
Zur Zeit werden die aktiven Zellen brav markiert, das ist also ganz gut.
Sobald jedoch die rechte Maustaste gedrückt wird, erscheint folgende Meldung:
Fehler beim Kompilieren: Nach End Sub</pre><p>, End Funktion oder End Property können nur Kommentare stehen!
Die gelb markierte Zeile im Code:
</p><pre>Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As _
Boolean)
Was muss wie geändert werden, damit es reibungslos klappt?
Danke im Vorraus für die Helfer!
Der gesamte Code unter diese Arbeitsmappe:
Option Explicit


Private Sub Workbook_BeforeClose_ZELLE(Cancel As Boolean)
Zurueck_ZELLE
End Sub



Private Sub Workbook_Deactivate_ZELLE()
Zurueck_ZELLE
End Sub



Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As  _
_
Boolean)
Dim oBtn As CommandBarButton
Zurueck_ZELLE
With Worksheets("Kalkulation")
Set oBtn = Application.CommandBars("Cell").Controls.Add
oBtn.Caption = .Range("S2") & " " & .Range("S3").Text
Set oBtn = Application.CommandBars("Cell").Controls.Add
oBtn.Caption = .Range("S5") & " " & .Range("S6").Text
Set oBtn = Application.CommandBars("Cell").Controls.Add
oBtn.Caption = .Range("S7") & " " & .Range("S8").Text
Set oBtn = Application.CommandBars("Cell").Controls.Add
oBtn.Caption = .Range("S10") & " " & .Range("S11").Text
Set oBtn = Nothing
End With
End Sub


Option Explicit
'**************************************************
'* H. Ziplies *
'* 24.07.05 komplette Überarbeitung des Code *
'* erstellt von Hajo.Ziplies@web.de *
'* http://Hajo-Excel.de/ *
'**************************************************
' Farbformatierungen während der Selektion bleiben erhalten, außer ByFarbe
' Abschalten der Markierung durch Doppelklick
Dim BoMenue As Boolean


Private Sub Workbook_Activate()
If BoMenue = False Then KontextmenüErgänzen
End Sub



Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If BoZustand Then Exit Sub                                       ' Markierung aus
'   nach Hinweis von Peter Haserodt Vergleich eingefügt ob Tabelle
If TypeName(ActiveSheet) = "Worksheet" Then Zurück_1              ' Farben zurückstellen
End Sub



Private Sub Workbook_Deactivate()
BoMenue = False
KontextmenüZurücksetzen
End Sub



Private Sub Workbook_Open()
KontextmenüErgänzen
BoMenue = True
If Selection.Cells.Count > 257 Then Exit Sub                     ' mehr als die mögliche  _
Anzahl markiert
'   nach Hinweis von Peter Haserodt Vergleich eingefügt ob Worksheet
If TypeName(ActiveSheet) = "Worksheet" Then Auslesen_1    ' Farbe auslesen
End Sub



Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If BoZustand Then Exit Sub                               ' Markierung ausgeschaltet
Zurück_1                                                  ' Farben zurückstellen
If Target.Count > 257 Then Exit Sub                     ' mehr als die mögliche Anzahl  _
markiert
'   nach Hinweis von Peter Haserodt Vergleich eingefügt ob Tabelle
If TypeName(ActiveSheet) = "Worksheet" Then Auslesen_1    ' Farben der aktuellen Zeile  _
auslesen
End Sub



Private Sub Workbook_BeforeClose(Cancel As Boolean)
KontextmenüZurücksetzen
If BoZustand Then Exit Sub                               ' Markierung ausgeschaltet
'   nach Hinweis von Peter Haserodt Vergleich eingefügt ob Tabelle
If TypeName(ActiveSheet) = "Worksheet" Then Zurück_1      ' Farben zurückstellen
End Sub



Private Sub Workbook_BeforePrint(Cancel As Boolean)
'   falls Farbe beim Druck wieder zurückgestellt werden soll
'   nach Druck ist die aktuelle Zelle nicht markiert
If BoZustand Then Exit Sub                               ' Markierung ausgeschaltet
'   nach Hinweis von Peter Haserodt Vergleich eingefügt
If TypeName(ActiveSheet) = "Worksheet" Then Zurück_1      ' Farben zurückstellen
End Sub



Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If BoZustand Then Exit Sub                               ' Markierung ausgeschaltet
Zurück_1                                                  ' Farben zurückstellen
'   nach Hinweis von Peter Haserodt Vergleich eingefügt
If TypeName(ActiveSheet) = "Worksheet" Then
If Selection.Cells.Count > 257 Then Exit Sub        ' mehr als die mögliche Anzahl  _
markiert
Auslesen_1
End If
End Sub



Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If BoZustand Then Exit Sub                               ' Markierung ausgeschaltet
'   nach Hinweis von Peter Haserodt Vergleich eingefügt
If TypeName(ActiveSheet) = "Worksheet" Then Zurück_1      ' Farbe zurückstellen
End Sub


Der Code im Modul 3
Option Explicit
Sub Zurueck_ZELLE()
CommandBars("Cell").Reset
End Sub


und der Code im Modul 4
Option Explicit
Option Private Module ' damit Makros nicht sichtbar
'**************************************************
'* H. Ziplies *
'* 24.10.06 *
'* erstellt von Hajo.Ziplies@web.de *
'* http://Hajo-Excel.de/
' *
'**************************************************
Public BoZustand As Boolean ' Zustand der Markierung
Public StName As String ' CodeName der Tabelle
Dim StWert(256, 1) As String ' 0=Zelladresse; 1=Farbe der Zelle
Public InI As Integer ' Schleifenvariable
Public ByFarbe As Byte ' Farbe Markierung
' Kontextmenü
Sub KontextmenüErgänzen()
Dim oBtn As CommandBarButton
Set oBtn = Application.CommandBars("Cell").Controls.Add
With oBtn
.Caption = "Markierung" ' Beschriftung
.OnAction = "Markierung" ' Aktion
.FaceId = 343 ' Symbol
End With
Set oBtn = Nothing
End Sub


Sub KontextmenüZurücksetzen()
On Error Resume Next
Application.CommandBars("Cell").Controls("Markierung").Delete
End Sub


Sub Markierung()
' nach Hinweis von Peter Haserodt Vergleich eingefügt
If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub ' keine Tabelle
If ActiveSheet.Name = "Kalkulation" Then
With Application.CommandBars("Cell").Controls("Markierung")
If .FaceId = 342 Then
.FaceId = 343
Auslesen ' Farbe Fadenkreuz Auslesen
MsgBox "Markierung ein"
Else
.FaceId = 342
Zurück ' Farbe zurückstellen
MsgBox "Markierung aus"
End If
End With
BoZustand = Not BoZustand
End If
End Sub


Sub Zurück_1()
' Farben zurückstellen
With Worksheets("Kalkulation")
' .Unprotect "Passwort"
For InI = 0 To 256
If StWert(InI, 1) = "" Then Exit For ' keine weiteren Werte vorhanden
' ist die Zelle mit ByFarbe markiert alte Zellenfarbe zurücksetzen
If .Range(StWert(InI, 0)).Interior.ColorIndex = ByFarbe Then
.Range(StWert(InI, 0)).Interior.ColorIndex = CInt(StWert(InI, 1))
End If
Next InI
' .Protect "Passwort"
End With
End Sub


Sub Auslesen_1()
Dim RaZelle As Range
ByFarbe = 2 ' Farbe der Markierung
InI = 0
If ActiveSheet.Name = "Kalkulation" Then
' ActiveSheet.Unprotect "Passwort" ' Schutz aufheben
For Each RaZelle In Selection ' Schleife über alle markierten Zellen
StWert(InI, 0) = RaZelle.Address ' Zelladresse
StWert(InI, 1) = RaZelle.Interior.ColorIndex ' Farbe der Zelle
RaZelle.Interior.ColorIndex = ByFarbe ' Zelle mit Farbe markieren
InI = InI + 1 ' Laufvariable erhöhen
Next RaZelle
' ActiveSheet.Protect "Passwort" ' Schutz aufheben
If InI < 256 Then StWert(InI + 1, 1) = "" ' den nächsten alten Farbwerte löschen
End If
End Sub


Anzeige
noch offen o.T.
21.03.2008 14:22:50
Christian

Zelel markieren
21.03.2008 14:57:54
Beverly
Hi Christian,
du hast 2 Mal Option Explicit in deinem Code - lösche das oberste und verschiebe die ersten 3 Prozeduren unter die Zeile Dim BoMenue As Boolean.


Noch eine Frage ;-)
21.03.2008 15:11:09
Christian
Hallo Karin,
Danke, das war der entscheidende Hinweis.
Nun ist es aber noch so, das im Kontextmenü die Option Zellen markieren nicht mehr auftaucht, das ist nicht überlebenswichtig, aber perfekt wäre es natürlich, wenn man das noch hinbekommen könnte.
Meine VBA Kenntnisse sind echt miserabel ;-)
Wenn Du da noch einmal helfen könntest, wäre ich Dir sehr dankbar!
MfG Christian

Anzeige

124 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige