Microsoft Excel

Herbers Excel/VBA-Archiv

Zähler einbauen

Betrifft: Zähler einbauen von: Björn
Geschrieben am: 03.09.2014 14:09:07

Hallo,

ich habe eine Tabelle, bei der, wenn man eine Zelle per DropDown färbt, ein zugehöriges Blatt und eine zugehörige Form ebenfalls gefärbt werden.

Der Code dazu sieht wie folgt aus:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngFarbe As Long
Select Case Target.Address(False, False)

Case "C59"
lngFarbe = FuellFarbe(Target.Value)
With ActiveSheet.Shapes.Range(Array("Rectangle 7")).Fill
.Visible = msoTrue
.ForeColor.RGB = lngFarbe
.Transparency = 0
.Solid
End With
Worksheets("P1").Tab.Color = lngFarbe

Case "C60"
lngFarbe = FuellFarbe(Target.Value)
With ActiveSheet.Shapes.Range(Array("Rectangle 8")).Fill
.Visible = msoTrue
.ForeColor.RGB = lngFarbe
.Transparency = 0
.Solid
End With
Worksheets("P2").Tab.Color = lngFarbe

...


jetzt übertrage ich das auf einige andere Tabellen. Hier habe ich teilweise bis zu 100 Zellen für "Case". Leider wurden die Tabellen nicht so angelegt, dass diese immer bei beispielsweise A1 beginnen und bei A99 enden. Kann man einen Zähler einbauen, wo man nur den Bereich ändert/einfügt (Bsp. Range A1 bis A99) und in den einezelnen "Case-Blöcken" steht dann bei Case: Case "zaehler" statt Case "60" usw. So spart man sich zumindest diese Eingabe und kann sich auf die Zuweisung der Rechtecke und Blätter konzentrieren.

Grüße,
Björn

  

Betrifft: AW: Zähler einbauen von: Frank
Geschrieben am: 03.09.2014 19:43:31

Hallo Björn,

m.E. geht das nicht und widerspricht auch dem Sinn von SELECT CASE. Der besteht u.a. darin, gezielt vorzugeben, wie bei konkreten Werten verfahren werden soll. Eine Variable enthält aber a priori keine konkreten Werte.

Eventuell hilft Dir, den Zellbezug umzurechnen (wenn ich Dich richtig verstanden habe, brauchst Du nur die Zeile). Ist also der Bereich A1-A99 und A13 wird gewählt, weist Du den Wert 13 einer Variablen zu (z.B. zaehler). Ist der Bereich C5-C104 und C13 wird gewählt, wäre das dann der Wert 9.
Dann prüfst Du SELECT CASE wie folgt

zaehler = GewaehlteZeile - BereichAnfangsZeile + 1

Select Case zaehler
Case 1
...
Case 2
...

...
Case Else
...
End select

Die einzelnen CASE-Blöcke musst Du aber wohl oder übel anlegen.

Es sei denn - das kommt aus Deinem Beispielcode nicht richtig raus - das, was zu tun ist, folgt einem Muster, das mit einer mathematischen Reihe abzubilden ist.

In Deinem Beispiel: C59 >> Rectangle 7; C60 >> Rectangle 8
Wenn das immer so ist, kann man sich evtl. das SELECT sparen und das Ganze in eine Sub ausgliedern, der dann nur noch der Zähler übergeben wird. Wobei ich hier nicht sicher bin, ob der Parameter auch als zusammengebastelter String a la "Rectangle" & zaehler akzeptiert wird.

Grüsse,
Frank


 

Beiträge aus den Excel-Beispielen zum Thema "Zähler einbauen"