Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA Kontrollkästchen auswerten -Syntax

487 views
Skip to first unread message

Hans Alborg

unread,
Feb 4, 2015, 2:18:59 AM2/4/15
to
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

Claus Busch

unread,
Feb 4, 2015, 3:25:37 AM2/4/15
to
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

Claus Busch

unread,
Feb 4, 2015, 4:29:41 AM2/4/15
to
Hallo Hans,

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

> 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.

du könntest auf dem Blatt mit den Daten eine LinkedCell anlegen und
diese dann auswerten ob WAHR oder FALSCH (Tabellennamen und gewünschten
Bereich anpassen):

For i = 3 To letzteSpalte ' === Kontrollkästchen erzeugen
With ActiveSheet
.CheckBoxes.Add(685, 204 + (i * 17.5), 12, 8).Select
With Selection
.Value = xlOn
.LinkedCell = "Tabelle1!Z" & i - 2
.Caption = ""
.Display3DShading = True
.Name = "ChBx(" & i - 2 & ")"
.OnAction = "Chart_Checkboxen"
End With
End With
Next i

Hans Alborg

unread,
Feb 4, 2015, 1:09:59 PM2/4/15
to
Hi Claus,

"Claus Busch" schrieb...

> du könntest auf dem Blatt mit den Daten eine LinkedCell anlegen und diese
> dann auswerten ob WAHR oder FALSCH (Tabellennamen und gewünschten Bereich anpassen):
> [Code = .LinkedCell = "Tabelle1!Z" & i - 2]

Das hab ich zwar eingefügt und angepaßt, frage aber die Checkboxen zunächst
lt. Deinem anderen Vorschlag ab, nämlich arge ich Böses wegen der Z- Spalte
<"Tabelle1!Z" & i - 2> und dem Wert <.UsedRange.Columns.Count> den ich ja
benötige.

Sub Chart_Checkboxen()
'
Set shDaten_gesamt = Sheets("alle-Daten")
letzteSpalte = shDaten_gesamt.UsedRange.Columns.Count
'
For i = 3 To letzteSpalte ' === Kontrollkästchen abfragen
With ActiveSheet
.Shapes("ChBx(" & i - 2 & ")").Select
If Selection.Value = xlOff Then _
Call Diagrammlinienstärke_dünn(i)
If Selection.Value = xlOn Then _
Call Diagrammlinienstärke_dick(i)
End With
Next i
'
ActiveChart.ChartArea.Select
End Sub
'
Sub Diagrammlinienstärke_dünn _
(ByVal i As Double)
ActiveChart.SeriesCollection(i - 2).Border.Weight _
= 0.75 ' 0.75 ist min
End Sub
'
Sub Diagrammlinienstärke_dick _
(ByVal i As Double)
ActiveChart.SeriesCollection(i - 2).Border.Weight _
= 2.75 ' 4 ist max
End Sub
'
So wie oben geht's aber sehr gut. Die kleinste Linienstärke ist 0.75 und
leider nicht 0. Aber die dünneren Kurven sind schon ok.
Die Linienstärke ist nur eine Zeile und könnte gleich anstelle des Call's
dastehen, aber evtl. stelle ich in diese Subroutinen noch mehr rein (etwa
Strich- bzw. Punktlinien), daher lasse ich die Unterroutinen mal bestehen.

Die Farbe der Kurven gefällt mir bisher auch nicht. Excel erzeugt
verschiedene Schattierungen von Grün! Mal sehen was passiert wenn mehr
Kurven dazukommen (hab die Daten weiterer Jahre gefunden).
Dann kann es auch nötig werden, das erste Kontrollkästchen abhängig von der
Lage der Legende einzufügen. Entsprechenden Code hatte ich bei meinen
Netzsuchen schon gesehen.

Und am Ende kommt noch ein Chart mit einem (wählbaren???) Ausschnitt des
Kurvenbereichs dazu (mit gleichem Codegerüst).
Dann wäre das Projekt fertig :-)

Hans

Claus Busch

unread,
Feb 4, 2015, 2:05:55 PM2/4/15
to
Hallo Hans,

Am Wed, 4 Feb 2015 19:09:15 +0100 schrieb Hans Alborg:

> Das hab ich zwar eingefügt und angepaßt, frage aber die Checkboxen zunächst
> lt. Deinem anderen Vorschlag ab, nämlich arge ich Böses wegen der Z- Spalte
> <"Tabelle1!Z" & i - 2> und dem Wert <.UsedRange.Columns.Count> den ich ja
> benötige.

du könntest die Namen der Checkboxen auch in einem Array hinterlegen und
dann das Array durchlaufen. Name ist einfach ChBx1 usw.:

Sub Test2()
Dim letzteSpalte As Long, i As Long, n As Long
Dim varChBx() As String

letzteSpalte = 6
n = 0
For i = 3 To letzteSpalte ' === Kontrollkästchen erzeugen
With ActiveSheet
.CheckBoxes.Add(685, 204 + (i * 17.5), 12, 8).Select
ReDim Preserve varChBx(n)
With Selection
.Value = xlOn
.Caption = ""
.Display3DShading = True
.Name = "Chbx" & i - 2
.OnAction = "Chart_Checkboxen"
varChBx(n) = Selection.Name
End With
End With
n = n + 1
Next i
End Sub

Claus Busch

unread,
Feb 4, 2015, 2:15:10 PM2/4/15
to
Hallo Hans,

Am Wed, 4 Feb 2015 19:09:15 +0100 schrieb Hans Alborg:


> So wie oben geht's aber sehr gut. Die kleinste Linienstärke ist 0.75 und
> leider nicht 0. Aber die dünneren Kurven sind schon ok.
> Die Linienstärke ist nur eine Zeile und könnte gleich anstelle des Call's
> dastehen, aber evtl. stelle ich in diese Subroutinen noch mehr rein (etwa
> Strich- bzw. Punktlinien), daher lasse ich die Unterroutinen mal bestehen.

beim Formatieren der Datenreihen wird mir aber 0 angeboten und dann mit
0,25 gesteigert. Stärke 0 wäre ja unsichtbar, aber die dünnste Linie
könnte 0,25 sein bzw. könnte 0,25 das Inkrement in deiner Schleife
sein.

Hans Alborg

unread,
Feb 4, 2015, 3:08:44 PM2/4/15
to
Hallo Claus,

"Claus Busch" schrieb...

> Hans Alborg:

>> So wie oben geht's aber sehr gut. Die kleinste Linienstärke ist 0.75 und
>> leider nicht 0. Aber die dünneren Kurven sind schon ok.

> beim Formatieren der Datenreihen wird mir aber 0 angeboten und dann mit
> 0,25 gesteigert.

Naja direkt...

> Stärke 0 wäre ja unsichtbar,

Das wollte ich ja haben zum Ausblenden.
Jedoch nimmt VBA noch 0.55 an, aber nicht 0.5!
Das ist aber egal, weil (bei mir hier) offensichtlich nur "Thin" und "Thick"
angezeigt wird. Bei irgendeinem Wert springt das halt um. Gibt es "Middle"
eigentlich auch?

Ich könnte auch die Linienfarbe auf Weiß ändern, dann sieht man die Kurve(n)
auch nicht. Das hab ich verworfen, weil bei Überschneidungen die sichtbaren
Kurven "zerstückelt" wirken.

Zum anderen Posting:

Ich hatte ja ein Array für die Checkboxen definiert (bis 20), hab jetzt aber
bemerkt, daß ich allen denselben Namen "ChBx" verpaßt habe, halt mit der
Zählernummer (n) dabei. Ist das der Grund warum sich die Boxen so gegen die
Abfrage sperren???

Die Sache mit der Zellzuweisung brauche ich für den jetzigen Zustand wohl
nicht. Und wenn, müßte ich evtl. nur die letzte Spalte ab Zeile 2 abfragen,
kein Problem.

Wie ich mal den Diagrammausschnitt bestimme interessiert mich da schon eher:
das sollte ja mit Sicht auf das Chart möglich sein!
Die Werte auf der Zeitachse könnten in einer Combibox erscheinen und dort
ausgewählt werden. Aber die Auswahl der Zeitachse, nicht alle Zeiten der B-
Spalte, sollten in die Combibox. Die B- Spalte enthält ja 690 Zeitwerte!
Die >angezeigten< Werte der Zeitachse sind so 48 Stück. Und es ist auch gut
das wählen zu können was im Diagramm steht.

Na morgen wieder...

Hans

Claus Busch

unread,
Feb 4, 2015, 3:24:50 PM2/4/15
to
Hallo Hans,

Am Wed, 4 Feb 2015 21:08:19 +0100 schrieb Hans Alborg:

> Das wollte ich ja haben zum Ausblenden.
> Jedoch nimmt VBA noch 0.55 an, aber nicht 0.5!
> Das ist aber egal, weil (bei mir hier) offensichtlich nur "Thin" und "Thick"
> angezeigt wird. Bei irgendeinem Wert springt das halt um. Gibt es "Middle"
> eigentlich auch?

per VBA habe ich das noch nie probiert.
bei weight hast du 4 Möglichkeiten:
xlHairline
xlThin
xlMedium
xlThick

> Ich hatte ja ein Array für die Checkboxen definiert (bis 20), hab jetzt aber
> bemerkt, daß ich allen denselben Namen "ChBx" verpaßt habe, halt mit der
> Zählernummer (n) dabei. Ist das der Grund warum sich die Boxen so gegen die
> Abfrage sperren???

nein, du musst sie als Shapes ansprechen, also
ActiveSheet.Shapes("ChBx1")
oder als
Activesheet.Shapes(varChBx(i))

> Wie ich mal den Diagrammausschnitt bestimme interessiert mich da schon eher:
> das sollte ja mit Sicht auf das Chart möglich sein!
> Die Werte auf der Zeitachse könnten in einer Combibox erscheinen und dort
> ausgewählt werden. Aber die Auswahl der Zeitachse, nicht alle Zeiten der B-
> Spalte, sollten in die Combibox. Die B- Spalte enthält ja 690 Zeitwerte!
> Die >angezeigten< Werte der Zeitachse sind so 48 Stück. Und es ist auch gut
> das wählen zu können was im Diagramm steht.

du bräuchtest zwei ComboBoxen für Start- und Enddatum. Auf dem Blatt
erstellst du dann einen Namen für die Zeitachse mit diesen beiden
Datumswerten in der Formel.
Oder schau mal hier:
https://onedrive.live.com/?cid=9378AAB6121822A3&id=9378AAB6121822A3%21326#cid=9378AAB6121822A3&id=9378AAB6121822A3%21326
nach "DynamicheDiagramme"
Darim sind 4 verschiedene Arten, den zeitlichen Diagrammbereich zu
gestalten.
Du musst die Mappe herunterladen, denn in OneDrive sind Makros
deaktiviert.

Claus Busch

unread,
Feb 4, 2015, 3:33:03 PM2/4/15
to
Hallo Hans,

Am Wed, 4 Feb 2015 21:24:47 +0100 schrieb Claus Busch:

> nein, du musst sie als Shapes ansprechen, also
> ActiveSheet.Shapes("ChBx1")
> oder als
> Activesheet.Shapes(varChBx(i))

ActiveX-Checkboxen sind Objekte, die du mit ihrem Namen ansprechen
kannst. Formularsteuerelemente sind nur Formen und keine Objekte.

Claus Busch

unread,
Feb 5, 2015, 2:41:24 AM2/5/15
to
Hallo Hans,

Am Wed, 4 Feb 2015 21:08:19 +0100 schrieb Hans Alborg:

> Das wollte ich ja haben zum Ausblenden.
> Jedoch nimmt VBA noch 0.55 an, aber nicht 0.5!
> Das ist aber egal, weil (bei mir hier) offensichtlich nur "Thin" und "Thick"
> angezeigt wird. Bei irgendeinem Wert springt das halt um. Gibt es "Middle"
> eigentlich auch?

es hat mir keine Ruhe gelassen, dass etwas das von Hand geht, mit VBA
nicht zu machen sein soll. Die Syntax ist ein wenig anders in xl2007. So
bekommst du deine Linien unsichtbar und wieder sichtbar:

Sub Chart_Checkboxen()
Dim varChBx() As Variant
Dim i As Long, n As Long

For i = 1 To ActiveSheet.Shapes.Count
ReDim Preserve varChBx(n)
varChBx(n) = ActiveSheet.Shapes(i).Name
n = n + 1
Next
For i = LBound(varChBx) To UBound(varChBx)
ActiveSheet.Shapes(varChBx(i)).Select
With ActiveChart.SeriesCollection(i + 1).Format.Line
.Visible = IIf(Selection.Value = xlOff, msoFalse, msoTrue)
End With
Next
End Sub

Mit der Syntax:
With ActiveChart.SeriesCollection(i + 1).Format.Line
kannst du dann auch mit
.weight jeden erdenklichen Wert zuordnen

Hans Alborg

unread,
Feb 5, 2015, 2:26:56 PM2/5/15
to
Hi,

"Claus Busch" schrieb...

> ActiveX-Checkboxen sind Objekte, die du mit ihrem Namen ansprechen kannst.
> Formularsteuerelemente sind nur Formen und keine Objekte.

Na denn hab ich's ja so gut hinbekommen wie's geht ;-)

Hans

Hans Alborg

unread,
Feb 5, 2015, 2:26:56 PM2/5/15
to
Hallo Claus,

"Claus Busch" schrieb...

> H.Alborg:

> bei weight hast du 4 Möglichkeiten:
> xlHairline
> xlThin
> xlMedium
> xlThick

Also xlHairline und xlThin machen die eine dünne Linie, die anderen drei
eine dicke. Wohlgemerkt in meinem Fall: Excel 2007 und im Liniendiagramm.

>> ... hab jetzt aber bemerkt, daß ich allen denselben Namen "ChBx" verpaßt
>> habe, halt mit der Zählernummer (n) dabei. Ist das der Grund warum sich
>> die Boxen so gegen die Abfrage sperren???

> nein, du musst sie als Shapes ansprechen, also
> ActiveSheet.Shapes("ChBx1")
> oder als
> Activesheet.Shapes(varChBx(i))

Meinte ich ja, wie oben ist die Nr. Teil des Strings, aber nicht in meinem
Code. Die untere Variante hatte ich so noch nicht probiert.
Im übrigen hatte ich Not, auf dem Char- Blatt ein passendes Select- Ereignis
zu finden. Immerhin kam ich beim Anklicken der Checkboxen zu einer
Fehlermeldung wegen des nicht erkannten Objects.
Die Lösung mit dem zugewiesenen Makro ist mMn. aber in jedem Fall besser!

>> Wie ich mal den Diagrammausschnitt bestimme interessiert mich da schon
>> eher:
>> fffft...

> du bräuchtest zwei ComboBoxen für Start- und Enddatum.

Yo, ist schon fertig und alles läuft rund!
Das sind aber -hm- Drop Boxen. ActiveX- Sachen meiden meine Finger z.Z.
komischerweise.

> Auf dem Blatt erstellst du dann einen Namen für die Zeitachse mit diesen
> beiden Datumswerten in der Formel.

Hä? Ich hab einfach (das eigentliche Diagramm mit der Zeitachse ist ja
statisch) geguckt welche Zeiten sich das Diagramm in der B- Spalte
ausgesucht hat. Aha! Jede 14. Zeile war das. Da mir eine Schleife (für immer
dieselben Zeiten!) zu overdressed war, hab ich ein Stück tiefer (so ab Zeile
700) diese einzelnen Zeiten nochmal untereinander eingetragen.

Das ist auch wichtig, weil wenn ich in der ersten "von-" Drop Box eine Zeit
wähle und in der "bis-" Drop Box dann nur die folgenden Zeiten anwählbar
sind.
Das erfordert eine Schleife wo ich diese Liste abklappern kann.
Dann noch einen kleinen Button "Go" anklicken und das
Charts("Teil-Diagramm") wird aktiviert und gezeichnet.
ok...seh ich mir nachher an.

Wie gesagt, bin "fast" fertig. Die Kurvenfarben gefallen mir nicht, werde
mir evtl. ein "Farbarray" zimmern, so daß die Kurven fortlaufend eine Farbe
bekommen, die mir gefällt.
Das mit der Punktlinie hab ich auch noch nicht getestet. Ich muß auch noch
absichern, daß die Kurven des Ausschnitts genau so dick/dünn sind wie im
Gesamtdiagramm.
Und dann die Druckoptionen...

Hans

Hans Alborg

unread,
Feb 5, 2015, 2:26:57 PM2/5/15
to
Hallo,

"Claus Busch" schrieb...

> es hat mir keine Ruhe gelassen, dass etwas das von Hand geht, mit VBA
> nicht zu machen sein soll. Die Syntax ist ein wenig anders in xl2007. So
> bekommst du deine Linien unsichtbar und wieder sichtbar:

>.Format.Line.Visible = _
> IIf(Selection.Value = xlOff, msoFalse, msoTrue)
> End With

> Mit der Syntax: [...].SeriesCollection(i + 1).Format.Line
> kannst du dann auch mit .weight jeden erdenklichen Wert zuordnen

Danke, das macht die Mappe perfekt! Ich hab auf die Schnelle mit Visible =
False getestet. Beim wieder Sichtbarmachen der Kurve mit True ändert sich
die Farbe zu schwarz. Aber ist ja kein Problem, den Farbwert an dieser
Stelle nochmal einzutragen

So, jetzt noch eine Runde exceln...

Hans

Claus Busch

unread,
Feb 5, 2015, 2:35:47 PM2/5/15
to
Hallo Hans,

Am Thu, 5 Feb 2015 20:26:34 +0100 schrieb Hans Alborg:

> Danke, das macht die Mappe perfekt! Ich hab auf die Schnelle mit Visible =
> False getestet. Beim wieder Sichtbarmachen der Kurve mit True ändert sich
> die Farbe zu schwarz. Aber ist ja kein Problem, den Farbwert an dieser
> Stelle nochmal einzutragen

ich hatte es bei mir so gelöst.
Sub Test()
Dim letzteSpalte As Long, i As Long

For i = 3 To letzteSpalte ' === Kontrollkästchen erzeugen
With ActiveSheet
.CheckBoxes.Add(685, 204 + (i * 17.5), 12, 8).Select
ReDim Preserve varChBx(n)
With Selection
.Value = xlOn
.Caption = ""
.Display3DShading = True
.Name = "Chbx" & i - 2
.OnAction = "Chart_Checkboxen"
End With
End With
Next i
End Sub

Sub Format()
Dim i As Long

With ActiveChart
For i = 1 To .SeriesCollection.Count
With .SeriesCollection(i)
.Border.ColorIndex = i + 2
If i Mod 3 = 1 Then
.Border.LineStyle = xlContinuous
ElseIf i Mod 3 = 2 Then
.Border.LineStyle = xlDash
Else
.Border.LineStyle = xlDashDot
End If
With .Format.Line
.Weight = 3
End With
End With
Next
End With

End Sub

Sub Chart_Checkboxen()
Dim varChBx() As Variant
Dim i As Long, n As Long

For i = 1 To ActiveSheet.Shapes.Count
ReDim Preserve varChBx(n)
varChBx(n) = ActiveSheet.Shapes(i).Name
n = n + 1
Next

For i = LBound(varChBx) To UBound(varChBx)
ActiveSheet.Shapes(varChBx(i)).Select
With ActiveChart.SeriesCollection(i + 1)
.Border.ColorIndex = i + 3
If i + 1 Mod 3 = 1 Then
.Border.LineStyle = xlContinuous
ElseIf i + 1 Mod 3 = 2 Then
.Border.LineStyle = xlDash
Else
.Border.LineStyle = xlDashDot
End If
With .Format.Line
If Selection.Value = xlOff Then
.Visible = msoFalse
Else
.Visible = msoTrue
.Weight = 3
End If
End With
End With
ActiveChart.PlotArea.Select
Next
End Sub

Beim Formatieren wird immer eine Linie durchgezogen, die nächste
gestrichelt und die dritte dann Strich-Punkt und dann wieder von vorne.
Das bringt auch etwas Unterschied in die Linien.

Hans Alborg

unread,
Feb 6, 2015, 4:21:38 PM2/6/15
to
Hallo Claus,

"Claus Busch" schrieb...

> ich hatte es bei mir so gelöst.

> Sub Format()
> Dim i As Long
>
> With ActiveChart
> For i = 1 To .SeriesCollection.Count
> With .SeriesCollection(i)
> .Border.ColorIndex = i + 2
> If i Mod 3 = 1 Then
> .Border.LineStyle = xlContinuous
> ElseIf i Mod 3 = 2 Then
> .Border.LineStyle = xlDash
> Else
> .Border.LineStyle = xlDashDot
> End If
> With .Format.Line
> .Weight = 3
> End With
> End With
> Next
> End With
>
> End Sub
> [...]

> Beim Formatieren wird immer eine Linie durchgezogen, die nächste
> gestrichelt und die dritte dann Strich-Punkt und dann wieder von vorne.
> Das bringt auch etwas Unterschied in die Linien.

Die unterbrochenen Linien hatte ich bis jetzt nicht getestet. Allerdings
habe ich mein Farbarray erstellt, damit die Kurven zunächst in sich gut
unterscheidenden Farben erzeugt werden. Mit der Zuordnung (i) zu bestimmten
Farbwerten gelingt es auch, das Char- Blatt mit den Kurvenausschnitten
wieder in denselben Farben zu bekommen (Im Gegensatz zu Deiner Beispielmappe
"DynamischeDiagramme" habe ich extra Charts, also keine Sheets für die
Diagramme).

Wenn allerdings die Anzahl der Kurven mal zu hoch wird, überlege ich das mit
den Punkt/ Strich- Kurven. Ursprünglich wollte ich sie ja statt dem
Ausblenden hernehmen, was sich dank Dir jetzt erledigt hat.

Heute konnte ich diese Mappe auf einem älteren Rechner testen. Da stellte
sich heraus, daß ich den Diagrammtyp .ChartType = xlLine noch angeben muß,
obwohl das Chartblatt vor dem Löschen der "alten" Kurven schon darauf
eingestellt war.

Ein Problem ist noch die gern aufpoppende Multifunktionsleiste mit den
Diagrammformaten. Ich hab nur was gefunden, das mir auch die
Schnellstartleiste versteckt:
Application.ExecuteExcel4Macro _
"Show.Toolbar(""Ribbon"", False)"
Dann kann ich meine Buttons in dieser Leiste nicht mehr erreichen und sogar
Excel nicht mehr auf normale Art beenden.
Vielleicht bau ich das wieder aus...

Hans

Claus Busch

unread,
Feb 7, 2015, 4:43:55 AM2/7/15
to
Hallo Hans,

Am Fri, 6 Feb 2015 22:21:26 +0100 schrieb Hans Alborg:

> Ein Problem ist noch die gern aufpoppende Multifunktionsleiste mit den
> Diagrammformaten. Ich hab nur was gefunden, das mir auch die
> Schnellstartleiste versteckt:
> Application.ExecuteExcel4Macro _
> "Show.Toolbar(""Ribbon"", False)"
> Dann kann ich meine Buttons in dieser Leiste nicht mehr erreichen und sogar
> Excel nicht mehr auf normale Art beenden.

du könntest einfach nur den Ribbon ausblenden, indem du auf einen Reiter
doppelklickst. Menüs und Schnellstartleiste bleiben dir aber erhalten.

Claus Busch

unread,
Feb 7, 2015, 4:47:11 AM2/7/15
to
Hallo Hans,

Am Sat, 7 Feb 2015 10:43:50 +0100 schrieb Claus Busch:

> du könntest einfach nur den Ribbon ausblenden, indem du auf einen Reiter
> doppelklickst. Menüs und Schnellstartleiste bleiben dir aber erhalten.

Nachtrag:
Wenn du in dieser Ansicht das Diagramm aktivierst und auf Ansicht =>
Zoommodus: Auswahl klickst, wird dein Diagramm noch etwas größer.

Hans Alborg

unread,
Feb 12, 2015, 1:16:33 PM2/12/15
to
Hi Claus,

(sorry für die späte Antwort, viel Stress!)

"Claus Busch" schrieb...

> du könntest einfach nur den Ribbon ausblenden, indem du auf einen Reiter
> doppelklickst. Menüs und Schnellstartleiste bleiben dir aber erhalten.

Inzwischen bleibt die Menüleiste klein. Die ist wohl nur aufgeploppt wenn
ich einen Fehler im Code hatte (also sehr oft "damals";-).
Deine Lösung würde SendKey an eine bestimmte Bildschirmposition erfordern.
Kann ich mir aber z.Zt. sparen.

> Nachtrag:
> Wenn du in dieser Ansicht das Diagramm aktivierst und auf Ansicht =>
> Zoommodus: Auswahl klickst, wird dein Diagramm noch etwas größer.

Stimmt. Aber nur "höher". Da ich momentan mit der Größe zufrieden bin laß
ich das auch erstmal. Die Uhreiten, senkrecht auf der Zeitachse unten, sind
gut im Bild.

Nächste Woche geht's an einen weiteren Rechner (XP), wo die Mappe laufen
soll. Mal gucken was dann so passiert!

Tschüß,

Hans

0 new messages