VBA Kontrollkästchen auswerten -Syntax

04/02/2015 - 08:18 von Hans Alborg | Report spam
Hallo Gruppe,

<Excel 2007>

Ich setze Kurven in ein Chart- Blatt, erzeuge Kontrollkàstchen und weise
ihnen ein Makro zu. Soweit bin ich gekommen und es làuft perfekt.
In einem Datenblatt sind in Spalte B die Bezugswerte (Zeiten) und in C,D
usw. die Daten für je eine Kurve.

Codeauszüge:

For i = 1 To .SeriesCollection.Count ' alte Kurven löschen
With ActiveChart
.SeriesCollection(1).Delete
.CheckBoxes.Delete
End With
Next i
For i = 3 To letzteSpalte ' Kurven zeichnen
With ActiveChart
.SeriesCollection.NewSeries
Set rngDaten = Union(rngDaten, _
Range(shDaten_gesamt.Cells(2, i), _
shDaten_gesamt.Cells(690, i)))
.SetSourceData Source:=rngDaten
End With
Next i
'
For i = 3 To letzteSpalte ' Kurvennamen
ActiveChart.SeriesCollection(i - 2).Name = _
shDaten_gesamt.Cells(1, i).Value
Next i
'
ActiveChart.HasLegend = True ' Legende formatueren
ActiveChart.Legend.Select
With Selection
.Border.LineStyle = xlContinuous
.Border.Weight = xlThin
.Border.Color = RGB(255, 0, 0)
End With
'
' Die Formatierung der Tabelle spare ich
' mir hier, ist vom Bildschirm abhàngig.
'
For i = 3 To letzteSpalte ' Kontrollkàstchen erzeugen
With ActiveChart
.CheckBoxes.Add(685, 204 + (i * 17.5), 12, 8).Select
Selection.Value = xlOff
Selection.Caption = ""
Selection.Display3DShading = True
Selection.Name = "ChBx(" & i - 2 & ")"
Selection.OnAction = "Chart_Checkboxen"
End With
Next i
ActiveChart.ChartArea.Select

' -
Das war's. Das erste Kontrollkàstchen wird
neben den ersten Legendeneintrag gesetzt,
in Höhe 204 + (i*17.5).
Dann folgen die weiteren je Anzahl der Kurven.
Den Kàstchen wird das Makro "Chart_Checkboxen"
zugeordnet.

Was noch fehlt: alle Kàstchen müssen
schon jetzt angehakt sein, denn die Kurven
sind ja vorhanden.

Die 3 einzelnen Schleifen sind leider notwendig,
sonst funktioniert das nicht so.

Mein Problem:
Die Checkboxen bekommen sofort den
Arraynamen "ChBx(i) verpaßt, wodurch ich
sie eigentlich leicht ansprechen wollte.
"i" kann den Wert 120 bekommen.

Aber in der Subroutine weden die Objekte nicht erkannt, was mich jetzt
ausbremst:

Sub Chart_Checkboxen()
Dim Sh As Shapes
'
For i = 1 To Sh.Count
test1 = Sh.Name
MsgBox "Name: " & test1, vbOKOnly
Next i
'
If Not ChBx(1) Is Nothing Then Stop
If ChBx(1) Is Nothing Then Stop
End Sub

Nur die letzte If- Abfrage führt hier zu einem Stop.
Frage ich nach True oder False kommt eine Fehlermeldung wegen des nicht
gefundenen Objekts.
Oben ist eine Shapes- Suche eingebaut, die mir die Checkboxen unter dem
richtigen Namen anzeigt.
Volle Deklarationen > If Charts("Name").Checkbox("Name) is True< o.à. haben
nichts gebracht.

Wie ist hier also die Syntax für die Boxen?
Geht die Array- Schreibweise hier nicht?

Wenn ich hier weiterkàme gibt es viele Möglichkeiten, um Kurven ein- und
auszublenden. Da die Komtrollkàstchen und die Legenden aber erhalten werden
müssen, werde ich evtl. nur die jew. Kurve in Hintergrundfarbe setzen oder
die Linienstàrke verringern (test: geht 0?).

Dann zieht mich mal vom Schlauch runter bitte!

Hans
 

Lesen sie die antworten

#1 Claus Busch
04/02/2015 - 09:25 | Warnen spam
Hallo Hans,

Am Wed, 4 Feb 2015 08:18:36 +0100 schrieb Hans Alborg:

Wenn ich hier weiterkàme gibt es viele Möglichkeiten, um Kurven ein- und
auszublenden. Da die Komtrollkàstchen und die Legenden aber erhalten werden
müssen, werde ich evtl. nur die jew. Kurve in Hintergrundfarbe setzen oder
die Linienstàrke verringern (test: geht 0?).



bei diesen Formularkontrollkàstchen wird normalerweise die verknüpfte
Zelle ausgewertet. Wenn es diese aber nicht gibt, musst du sie scheinbar
selektieren, um ihren Wert festzustellen.
Außerdem sind Shapes eine Methode von ActiveSheet. Probiere es mal so:

Sub Chart_Checkboxen()
Dim Sh As Shape
Dim i As Long
Dim test1 As String

With ActiveSheet
For Each Sh In .Shapes
test1 = Sh.Name
MsgBox "Name: " & test1, vbOKOnly
Next

.Shapes("ChBx(1)").Select
If Selection.Value = xlOff Then
MsgBox Selection.Name & " Nicht aktiviert"
End If
End With
End Sub

Wenn du im Blatt arbeitest, musst du diese Kontrollkàstchen zum Löschen
rechts anklicken und dann Start => Bearbeiten => Alle Löschen. Mit dem
Kontextmenü bekommst du nur die Option "Ausschneiden". Du siehst dann
das Kontrollkàstchen nicht mehr, aber es ist immer noch im Blatt. Bei
der Schleife bekommst du dann mehrere Durchlàufe.

Wenn die Kontrollkàstchen aktiviert sein sollen, àndere den Code zum
Erstellen ab:
Selection.Value = xlOn


Mit freundlichen Grüßen
Claus
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional

Ähnliche fragen