Discussion:
VBA Kontrollkästchen auswerten -Syntax
(zu alt für eine Antwort)
Hans Alborg
2015-02-04 07:18:36 UTC
Permalink
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
2015-02-04 08:25:34 UTC
Permalink
Hallo Hans,
Post by 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
2015-02-04 09:29:39 UTC
Permalink
Hallo Hans,
Post by 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


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2015-02-04 18:09:15 UTC
Permalink
Hi Claus,

"Claus Busch" schrieb...
du könntest auf dem Blatt mit den Daten eine LinkedCell anlegen und diese
[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
2015-02-04 19:05:52 UTC
Permalink
Hallo Hans,
Post by 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


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Claus Busch
2015-02-04 19:15:07 UTC
Permalink
Hallo Hans,
Post by 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.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2015-02-04 20:08:19 UTC
Permalink
Hallo Claus,

"Claus Busch" schrieb...
Post by Claus Busch
Post by 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...
Post by Claus Busch
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
2015-02-04 20:24:47 UTC
Permalink
Hallo Hans,
Post by 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
Post by Hans Alborg
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))
Post by Hans Alborg
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.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Claus Busch
2015-02-04 20:33:00 UTC
Permalink
Hallo Hans,
Post by 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.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2015-02-05 18:18:57 UTC
Permalink
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
2015-02-05 18:16:43 UTC
Permalink
Hallo Claus,

"Claus Busch" schrieb...
Post by Claus Busch
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.
Post by Claus Busch
... 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!
Post by Claus Busch
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.
Post by Claus Busch
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.
Post by Claus Busch
https://onedrive.live.com/?cid=9378AAB6121822A3&id=9378AAB6121822A3%21326#cid=9378AAB6121822A3&id=9378AAB6121822A3%21326
nach "DynamicheDiagramme"
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
Claus Busch
2015-02-05 07:41:20 UTC
Permalink
Hallo Hans,
Post by 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


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2015-02-05 19:26:34 UTC
Permalink
Hallo,

"Claus Busch" schrieb...
Post by Claus Busch
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
.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
2015-02-05 19:35:43 UTC
Permalink
Hallo Hans,
Post by 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.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2015-02-06 21:21:26 UTC
Permalink
Hallo Claus,

"Claus Busch" schrieb...
Post by Claus Busch
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
2015-02-07 09:43:50 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Ein Problem ist noch die gern aufpoppende Multifunktionsleiste mit den
Diagrammformaten. Ich hab nur was gefunden, das mir auch die
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.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Claus Busch
2015-02-07 09:47:06 UTC
Permalink
Hallo Hans,
Post by 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.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2015-02-12 18:16:18 UTC
Permalink
Hi Claus,

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

"Claus Busch" schrieb...
Post by Claus Busch
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.
Post by Claus Busch
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

Lesen Sie weiter auf narkive:
Loading...