Eingabefeld einfärben



Excel-Version: Ab 8.0
nach unten

Betrifft: Eingabefeld einfärben
von: Rainer
Geschrieben am: 12.07.2002 - 18:20:42

Ich stöbere als Anfänger schon mehrere Stunden hier rum und bin auch fast fündig geworden, aber leider färbt mir das Ding die ganze Zeile und nicht die Zelle.
Für Euch Profis sicher 'ne Kleinigkeit.

nachfolgender Code färbt die ganze Zelle in gelb.
Diesen Codeteil bitte in einem Modul der entsprechenden
Mappe kopieren:
Dim ranAltBereich As Range
Dim lngColorIndex(1 To 256) As Long
Dim bolDynMauszeiger As Boolean

Sub MarkierungEin(ByVal Target As Excel.Range)
Dim ranZelle As Range
Dim x As Integer

If bolDynMauszeiger = False Then Exit Sub

If Not ranAltBereich Is Nothing Then
x = 0
On Error Resume Next

For Each ranZelle In ranAltBereich
x = x + 1
ranZelle.Interior.ColorIndex = lngColorIndex(x)
Next

End If

Set ranAltBereich = _
Range("A" & Target.Row & ":IV" & Target.Row)
x = 0

For Each ranZelle In ranAltBereich
x = x + 1
lngColorIndex(x) = _
ranZelle.Interior.ColorIndex
Next

Target.EntireRow.Interior.Color = RGB(255, 255, 200)

End Sub

Sub MarkierungAus()
Dim x As Integer
Dim ranZelle As Range

If Not ranAltBereich Is Nothing Then
x = 0

For Each ranZelle In ranAltBereich
x = x + 1
ranZelle.Interior.ColorIndex = lngColorIndex(x)
Next

End If
End Sub

Sub MauszeigerEinschalten()
bolDynMauszeiger = True
End Sub

Sub MauszeigerAusschalten()
MarkierungAus
bolDynMauszeiger = False
End Sub

Den jetzt folgenden Code bitte in "diese Arbeitsmappe" kopieren:

Private Sub Workbook_SheetSelectionChange(ByVal sh _
As Object, ByVal Target1 As Excel.Range)
MarkierungEin Target1
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
MarkierungAus
End Sub



nach oben   nach unten

Re: Eingabefeld einfärben
von: Hajo_Zi
Geschrieben am: 12.07.2002 - 18:26:29

Hallo Rainer

was möchtest Du den. Die gerade aktive Zelle anders färben???

Folgender Code in ein Modul


Option Explicit
Public OldColorIndex As Variant
Public OldRange As String


folgende Code in DieseArbeitsmappe
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If OldRange <> "" Then Range(OldRange).Interior.ColorIndex = OldColorIndex
End Sub

Private Sub Workbook_Open()
    If ActiveSheet.Name = "Tabelle1" Then
        OldRange = ActiveCell.Address
        OldColorIndex = ActiveCell.Interior.ColorIndex
        ActiveCell.Interior.ColorIndex = 3
    End If
End Sub


und folgender Code in die Tabelle

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
'   Beim 1. Aufruf ist OldRange noch undefiniert
    If OldRange = "" Then
        OldRange = Target.Address
        OldColorIndex = Target.Interior.ColorIndex
'       Setze Hintergrundfarbe der aktiven Selection auf Rot
        Target.Interior.ColorIndex = 3
    Else
'       Setze alten Range auf alte Farbe
        If Range(OldRange).Interior.ColorIndex = 3 Then
            Range(OldRange).Interior.ColorIndex = OldColorIndex
        End If
        OldColorIndex = Target.Interior.ColorIndex
'       Merke mir aktuellen Adresse für nächsten Aufruf
        OldRange = Target.Address
'       Setze Hintergrundfarbe der aktiven Selection auf Rot
        Target.Interior.ColorIndex = 3
    End If
End Sub

Gruß Hajo


nach oben   nach unten

Re: Eingabefeld einfärben
von: Rainer
Geschrieben am: 14.07.2002 - 21:36:35

Erst mal tausend Dank an Hajo, aber auch die anderen, die hier so dummies wie mir weiterhelfen. Genau das sollte es sein, was du da rübergeschickt hast, bis auf zwei kleine Eigenarten (Blattwechsel, Blattschutz) klappt auch alles.
Ich wollte das für mehrere 3 von 6 Arbeitsblättern nutzen, wenn ich das in alle 3 Arbeitsblätter kopiere, klappt das auch gut mit dem Einfärben nur wenn ich in ein anderes wechsle und wieder zurück kehre und das öfter ist bald das ganze Blatt rot, Irgendwie scheint er da was zu vergessen, rücksetzen auch bei ABlattwechsel.
Ja dann habe ich das ABlatt noch mit Schutz versehen, damit mit Tab nur an bestimmte Zellen (zur Einagbe) gesprungen wird. Dann kommt auch gleich noch ein Laufzeitfehler daher immer genau dann wenn er die Zelle auf rot setzen soll (auch wenn ich mich in einer nicht gesperrten Zelle befinde):
' Setze Hintergrundfarbe der aktiven Selection auf Rot
Target.Interior.ColorIndex = 3

nach oben   nach unten

Re: Eingabefeld einfärben
von: Hajo_Zi
Geschrieben am: 14.07.2002 - 21:41:19

Hallo Rainer

ich habe es bisher nur mit einem Register getestet. Aber soweit ich meinen Code überblicke muß Du für jedes Register eine einzelne Variable setzen. Das ist mir jetzt leider zu spät und zu Aufwendig um jetzt noch den Code zuerstellen. Sowas muß ich schon am Wochenende machen.

Gruß Hajo


nach oben   nach unten

Re: Eingabefeld einfärben
von: Hajo_Zi
Geschrieben am: 15.07.2002 - 06:54:47

Hallo Rainer

so mal auf die schnelle. Bitte schreibe mir per Mail ob es geht da ich es nicht umfangreich getestet habe.

in ein Modul


Option Explicit
Public OldColorIndex As Variant
Public OldRange As String
Public Register As String


in  DieseArbeitsmappe
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If OldRange <> "" Then ActiveSheet.Range(OldRange).Interior.ColorIndex = OldColorIndex
End Sub

Private Sub Workbook_Open()
    OldRange = ActiveCell.Address
    Register = ActiveSheet.Name
    OldColorIndex = ActiveCell.Interior.ColorIndex
    ActiveCell.Interior.ColorIndex = 3
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    OldRange = ActiveCell.Address
    OldColorIndex = ActiveCell.Interior.ColorIndex
    ActiveCell.Interior.ColorIndex = 3
    Register = ActiveSheet.Name
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    If OldRange <> "" Then Worksheets(Register).Range(OldRange).Interior.ColorIndex = OldColorIndex
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'   Beim 1. Aufruf ist OldRange noch undefiniert
    If OldRange = "" Then
        OldRange = Target.Address
        OldColorIndex = Target.Interior.ColorIndex
'       Setze Hintergrundfarbe der aktiven Selection auf Rot
        Target.Interior.ColorIndex = 3
    Else
'       Setze alten Range auf alte Farbe
        If Range(OldRange).Interior.ColorIndex = 3 Then
            Range(OldRange).Interior.ColorIndex = OldColorIndex
        End If
        OldColorIndex = Target.Interior.ColorIndex
'       Merke mir aktuellen Adresse für nächsten Aufruf
        OldRange = Target.Address
'       Setze Hintergrundfarbe der aktiven Selection auf Rot
        Target.Interior.ColorIndex = 3
    End If
End Sub

kein Code mehr in den Tabellen.

Gruß Hajo


nach oben   nach unten

Re: Eingabefeld einfärben
von: rainer
Geschrieben am: 16.07.2002 - 12:31:22

Lieber Hajo,

erst mal vielen Dank für dein Gehirnschmalz ..., das mit dem Arbeitsblatt wechsel klappt jetzt super.
Und ich habe auch eine Idee warum das mit der Fehlermeldung (Laufzeitfehler 1004) erscheint. Wenn der Schutz aktiviert ist/wird, darf die Farbe per Def, ja nicht mehr geändert werden; daher die Fehlermeldung.
Also sehe ich nur eine Lösung:
Vor dem Ändern prüfen, ob die Zelle gesperrt ist, wenn ja NIX tun (oder zur nächsten nicht geschützten Zelle springen, wäre noch genialer), sonst einfärben.

So weit zur Theorie: Wie's dann in der Praxisprogrammierung aussieht ? in so antiquierten Sparchen, die ich mal gelernt habe kein Problem, aber VBA ??? Ich werde mich mal dran versuchen, soll ja üben...

 nach oben

Beiträge aus den Excel-Beispielen zum Thema "Eingabefeld einfärben"