Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen

Zellen Formatieren | Herbers Excel-Forum


Betrifft: Zellen Formatieren von: Joachim
Geschrieben am: 12.11.2009 15:19:21

Hallo,

wie muss ich denn Target in Set RaBereich = Intersect(RaBereich, Range(Target.Address)) definieren.
Da kommt immer eine Fehlermeldung:

Private Sub CommandButton3_Click()

    Dim RaBereich As Range, RaZelle As Range

    Set RaBereich = Range("R")

    Set RaBereich = Intersect(RaBereich, Range(Target.Address))
    If RaBereich Is Nothing Then Exit Sub
    For Each RaZelle In RaBereich
        With RaZelle
            Select Case UCase(.Value) ' UMWANDLUNG DER Eingabe in Großbuchstaben
                Case "GREEN"
                    .Interior.ColorIndex = 4
                    .Font.ColorIndex = 1
                Case "RED"
                    .Interior.ColorIndex = 3
                    .Font.ColorIndex = 1
                Case "YELLOW"
                    .Interior.ColorIndex = 6
                    .Font.ColorIndex = 1
                Case "BLUE"
                    .Interior.ColorIndex = 5
                    .Font.ColorIndex = 1

            End Select
        End With
    Next RaZelle
    Set RaBereich = Nothing


End Sub


Danke
Joachim

  

Betrifft: AW: Zellen Formatieren von: Björn B.
Geschrieben am: 12.11.2009 15:32:31

Hallo,

Code woanders herkopiert, was? ;-)

DAs funktioniert so nicht. Du hast Target nicht definiert.
Das ist aus einem SelectionChange Ereignis, das gibt dann das Target mit.
Wenn du das ganze über CommandButtpn aufrufst, dann fehlt das.

Was genau möchtest du denn? Was soll wann passieren?

Gruß
Björn


  

Betrifft: AW: Zellen Formatieren von: Joachim
Geschrieben am: 12.11.2009 15:44:46

Hi,

ich möchte einfach die Spalte R durchlaufen , und entsprechend dem Eintrag den Hintergrund färben.

das ist eigentlich alles.

GRuss
Joachim


  

Betrifft: AW: Zellen Formatieren von: Björn B.
Geschrieben am: 12.11.2009 15:53:17

Dann versuch es mal so.

Schau dir bitte auch die anderen Antworten an.
Hab meine "Kürzung" mit eingebaut, und auch ein "Case Else" dazu gemacht. Erklärung im Code.
Den Bereich solltest Du wenn möglich eingrenzen, dass nicht alle Zellen geprüft werden müssen.

Gruß
Björn B.


Private Sub CommandButton3_Click()

    Dim RaBereich As Range, RaZelle As Range

    Set RaBereich = Range("R:R")
    'Makro wird schneller, wenn Du den Bereich engrenzen kannst, so werden über 65000 Zellen  _
gecheckt
    'Eingrenzen z.B. so: Range("R1:R100")
    For Each RaZelle In RaBereich
      With RaZelle
         .Font.ColorIndex = 1
          Select Case UCase(.Value) ' UMWANDLUNG DER Eingabe in Großbuchstaben
              Case "GREEN"
                  .Interior.ColorIndex = 4
              Case "RED"
                  .Interior.ColorIndex = 3
              Case "YELLOW"
                  .Interior.ColorIndex = 6
              Case "BLUE"
                .Interior.ColorIndex = 5
            'Hier wird Zellfarbe auf "keine Füllung" gesetzt. Sonst bleibt es rot oder blau,
            'wenn man den Wert wieder löscht
              Case Else
                    .Interior.ColorIndex = xlNone
            End Select
        End With
    Next RaZelle
    Set RaBereich = Nothing
End Sub



  

Betrifft: Danke, so passts owT von: Joachim
Geschrieben am: 12.11.2009 16:11:38




  

Betrifft: Woher soll Excel wissen, was "TARGET" ist ? von: NoNet
Geschrieben am: 12.11.2009 15:37:17

Hallo Joachim,

das Objekt "TARGET" ist hier weder deklariert (mit DIM) noch definiert (mit SET).
woher soll Excel/VBA oder auch WIR denn wissen, was TARGET ist ?
Dieses Objekt existiert standardmässig nur in Excel Ereignismakros automatisch, wie z.B. in folgenden :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Private Sub Worksheet_Change(ByVal Target As Range)
etc.


Wie Du erkennen kannst, wird das Objekt hier (im Gegensatz zu Deinem Codebeispiel) bereist im Prozedurkopf deklariert (BYVAL).

Ich könnte mir vorstellen, dass du z.B. die markierten Zellen einfärben möchtest, dazu müsstest Du die SET-Anweisung austauschen :

Set RaBereich = Intersect(RaBereich, Selection)

Falls es das nicht war, dann beschreibe bitte exakt, WAS Du möchtest.

Gruß, NoNet

PS: Ist Range("R") ein definierter Bereichsnamen oder soll das die Spalte R sein ?
Falls es die Spalte R sein soll, dann bitte Code ändern : Set RaBereich = Columns("R:R")


  

Betrifft: kürzer... von: Björn B.
Geschrieben am: 12.11.2009 15:46:19

da du immer den gleichen Wert für Font.ColorIndex setzt, brauchst du das nicht in die Case-Anweisung jedes mal einbauen.
Hier reicht also:

        With RaZelle
            .Font.ColorIndex = 1  'reicht hier einmal!

            Select Case UCase(.Value) ' UMWANDLUNG DER Eingabe in Großbuchstaben
                Case "GREEN"
                    .Interior.ColorIndex = 4
                Case "RED"
                    .Interior.ColorIndex = 3
                Case "YELLOW"
                    .Interior.ColorIndex = 6
                Case "BLUE"
                    .Interior.ColorIndex = 5
            End Select
        End With
Da es sich aber um den Standardwert handelt (Schwarz), könntest du es auch ganz weg lassen, wenn es dir nur um die Zellfarbe geht.

Gruß
Björn


  

Betrifft: Danke dir auch owT von: Joachim
Geschrieben am: 12.11.2009 16:12:14




  

Betrifft: "TARGET" ist Finanzmathematik von: WF
Geschrieben am: 12.11.2009 17:02:56

ausgeschrieben:
Transeuropean Automated Real-time Gross settlement Express Transfer system

Salut WF


  

Betrifft: Da hinten aus der letzten Ecke wieder... ;-) von: NoNet
Geschrieben am: 12.11.2009 17:52:15

Hey WF,

das sind mir ja die "Richtigen" : Keine Ahnung vom "Saufen" (VBA) haben, aber mit den großen Hunden mitpinkeln wollen ;-)

So geht das :

Das mit dem TARGET hättest Du ja auch mal früher sagen können...

Gruß, NoNet


  

Betrifft: ..wo hast du denn das her ??? :-) Gruß von: robert
Geschrieben am: 12.11.2009 18:37:03




  

Betrifft: Ganz einfach : Rechtsklick - Eigenschaften ;-) _oT von: NoNet
Geschrieben am: 12.11.2009 18:38:55

_oT


  

Betrifft: OT:Hi folks, get warmed up... von: Renee
Geschrieben am: 13.11.2009 00:27:47

don't cool down ;-)

Renée will be back in around 3 weeks....


  

Betrifft: Hi, Renée, someone is hardly waiting for... von: Luc:-?
Geschrieben am: 13.11.2009 03:24:14

...you - you gave him your mailaddress 2 years ago and he tried to contact you, not knowing anything about the following events...
Welcome, princess of the dark origin of mankind... ;-)
Luc :-?


  

Betrifft: Allerdings ist dein PS kein Standard-VBA,... von: Luc:-?
Geschrieben am: 12.11.2009 20:03:02

...NoNet... ;-)
R als Bereichsname ist nicht zu empfehlen (mind RR oder unter xl12 RRRR). Ansonsten heißt es Range("R:R") oder besser Columns(18). Alles andere verursacht zusätzlichen Rechenaufwand!
Gruß Luc :-?


  

Betrifft: Mein "PS" empfiehlt auch keinen Bereichsnamen von: NoNet
Geschrieben am: 12.11.2009 20:13:53

Moin Luc,

"Mein PS" enthielt keine Empfehlung zur Benamung eines Bereiches, sondern nur eine vermutete Nachfrage diesbezüglich bzw. eine Empfehlung für Columns("R:R").

Ich persönlich würde eine gesamte Spalte allenfalls "SpalteR" benennen oder besser noch "SprechenderNameFuerSpalteR".

Ob nun Range("R:R") oder Columns("R:R") oder Columns(18) - das sehe ich unabhängig der dafür benötigten Rechenzeit jedoch eher gelassen... ;-)

Gruß, NoNet


  

Betrifft: Bzgl Columns sehe ich das nicht so gelassen... von: Luc:-?
Geschrieben am: 12.11.2009 20:40:05

...wie du, Thomas,
dazu gab's hier auch schon mal 'ne Diskussion... ;-)
Gruß Luc :-?


Beiträge aus den Excel-Beispielen zum Thema "Zellen Formatieren"