Hans Alborg
2015-02-04 07:18:36 UTC
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 1....20 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
<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 1....20 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