Discussion:
Diagramm größer mit VBA?
(zu alt für eine Antwort)
Hans Alborg
2015-01-27 18:06:56 UTC
Permalink
Hallo.

<Excel2007>

ich wollte mich etwas von meiner Simu- Mappe erholen und hab was mit
Diagrammen angefangen...

Auf ein leeres Blatt wird eine Datenreihe importiert mit zugehöriger
Nummerierung und Uhrzeiten (A,B,C), etwa 6000 Datensätze.
Das ist die klassische Ausgabe eines Datenloggers.

Dann wird verarbeitet (ausgedünnt) und als Quelle für ein Diagramm
hergenommen. Es entsteht also ein Liniendiagramm mit einer Kurve. Und
klappt. Links befindet sich standardmäßig die Legende, also ein Strich in
der Kurvenfarbe und ein Name (hier "2015". Lasse ich "2015" weg, wird der
rechte Rand des Diagramms automatisch schmäler.
Soweit die Verhältnisse.

Der Rand des Diagramms läßt sich per Maus nicht weiter "aufziehen" und bis
zum Bildschirmrand ist es noch ein ganzes Stück.

Jetzt möchte ich weitere Kurven dazubekommen und einzeln ein/ ausblenden.
Das bekomme ich mit VBA sicher zustande.
Zur Steuerung möchte ich Steuerelemente direkt an den rechten Rand des
Charts setzen. Ich hab mir die kleinen "Kontrollkästchen" dafür ausgesucht,
da sie ohne ihren Text wenig Platz brauchen. Der Text steht ja trotzdem da:
im Legendenkästchen.

Aber!!!
Die sollten rechts neben die Legenden- Bezeichnungen plaziert werden. Der
Rand des Charts reicht aber nicht.

Gibt es eine nicht strafbare Methode, den rechten Rand zu vergrößern?

Mir fällt nur ein, z.B. die Überschrift des Diagramms überlang zu machen
oder sowas.
Das Diagramm auf ein Tabellenblatt packen möchte ich nicht.

Ich hab experimentiert, das Legendenkästchen selbst zum Klicken
heranzunehmen, aber wie sortiert man den Rest des Klickbereichs (ChartArea)
aus?
Und da ich das Chartblatt erst erzeuge, müßte ich den Code auch immer
reinkopieren :-(

Noch ein Nachsetzer: mit VBA die Linienstärke der Kurve ändern?
Wird wohl was Einfaches sein, aber die Sonne geht unter und ich hab's nicht
gepackt...

Hans
Claus Busch
2015-01-27 18:25:03 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Der Rand des Diagramms läßt sich per Maus nicht weiter "aufziehen" und bis
zum Bildschirmrand ist es noch ein ganzes Stück.
wenn du ein Diagrammblatt hast, selektiere das Diagramm und gehe auf
Ansicht => Zoommodus: Auswahl. Damit wird das Diagramm maximiert. Wenn
du den rechten Rand größer haben willst, ziehe am rechten Ziehpunkt der
Zeichnungsfläche die Fläche kleiner um den Rand zwischen
Zeichnungsfläche und Diagrammfläche zu vergrößern.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2015-01-27 18:49:02 UTC
Permalink
N'Abend Claus,

"Claus Busch" schrieb...
Post by Claus Busch
Ansicht => Zoommodus: Auswahl. Damit wird das Diagramm maximiert.
Ahh, Zoom. Danke, damit komm ich weiter. Muß nur sehen wie das mit VBA geht,
weil: o/u stauchen muß ich es auch dann noch.
Post by Claus Busch
Wenn du den rechten Rand größer haben willst, ziehe am rechten Ziehpunkt
der Zeichnungsfläche die Fläche kleiner um den Rand zwischen
Zeichnungsfläche und Diagrammfläche zu vergrößern.
Auch klar. Wenn ich das Ganze mit Zoom breiter bekomme hab ich ja Platz.

Hm. Ich kann das "Kontrollkästchen" mit VBA auch erzeugen, aber wie
plazierert VBA es genau neben die Legende?
Zweitens: läßt sich das Diagramm auch gegen Anklicken schützen wie ein
Blatt? Ich bin halt Grobmotoriker und das "Kontrollkästchen" ist so nah
dran...

Hans
Claus Busch
2015-01-27 18:56:15 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Hm. Ich kann das "Kontrollkästchen" mit VBA auch erzeugen, aber wie
plazierert VBA es genau neben die Legende?
Zweitens: läßt sich das Diagramm auch gegen Anklicken schützen wie ein
Blatt? Ich bin halt Grobmotoriker und das "Kontrollkästchen" ist so nah
dran...
da kann ich dir leider nicht weiterhelfen. Mit Diagrammen hab ich es
nicht so. Ich verwende sie sehr selten und dann mache ich alles von
Hand. Und 2007 zeichnet auch keine Makros auf, wenn man mit Diagrammen
hantiert.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2015-01-27 20:38:22 UTC
Permalink
Hallo Claus,

"Claus Busch" schrieb...
... aber wie plazierert VBA es genau neben die Legende?
So gehts:
ActiveSheet.CheckBoxes.Add(685, 255, 12, 8).Select

Das ist dann aber bildschirmabhängig, na ja...
Zweitens: läßt sich das Diagramm auch gegen Anklicken schützen wie ein
Blatt?
Blattschutz läßt sich einschalten, aber so richtig gegen Klick ins Blatt und
für Klick ins Kontrollkästchen sieht nicht so aus...
Und 2007 zeichnet auch keine Makros auf, wenn man mit Diagrammen hantiert.
Ein bisserl schon, aber echt wenig.

Na jedenfalls vielen Dank, ich komme jetzt weiter. Am Weekend (das ist
französisch ;-) bin ich mal gespannt wie das Ein/ Ausschalten der Kurven
klappt.

Gute Nacht!

Hans
Ka Prucha
2015-01-28 06:02:04 UTC
Permalink
Post by Hans Alborg
Hallo Claus,
"Claus Busch" schrieb...
... aber wie plazierert VBA es genau neben die Legende?
ActiveSheet.CheckBoxes.Add(685, 255, 12, 8).Select
Das ist dann aber bildschirmabhängig, na ja...
Zweitens: läßt sich das Diagramm auch gegen Anklicken schützen wie
ein Blatt?
Blattschutz läßt sich einschalten, aber so richtig gegen Klick ins Blatt
und für Klick ins Kontrollkästchen sieht nicht so aus...
Und 2007 zeichnet auch keine Makros auf, wenn man mit Diagrammen hantiert.
Ein bisserl schon, aber echt wenig.
Na jedenfalls vielen Dank, ich komme jetzt weiter. Am Weekend (das ist
französisch ;-) bin ich mal gespannt wie das Ein/ Ausschalten der Kurven
klappt.
Vielleicht ist etwas für dich hilfreiches dabei...

Sub chart()
'
' chart Makro
' Makro am 25.06.2004 von Our Valued Customer aufgezeichnet
'
' Tastenkombination: Strg+f
'
Dim C As Long
On Error Resume Next
For C = 1 To 11
Debug.Print ActiveSheet.Shapes(C).Name
ActiveSheet.ChartObjects(ActiveSheet.Shapes(C).Name).Activate
ActiveSheet.Shapes(C).ScaleHeight 0.5, msoFalse, msoScaleFromTopLeft
ActiveSheet.Shapes(C).ScaleWidth 0.85, msoFalse, msoScaleFromTopLeft
ActiveSheet.Shapes(C).ScaleHeight 0.85, msoFalse, msoScaleFromTopLeft
Next

End Sub
Sub form()
'
' form Makro
' Makro am 25.06.2004 von Our Valued Customer aufgezeichnet
'
' Tastenkombination: Strg+g
'
ActiveChart.ChartTitle.Select
'Selection.Left = 170
Selection.Top = 1
'Selection.AutoScaleFont = True
With Selection.Font
.Name = "Arial"
.FontStyle = "Fett"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With
ActiveChart.Axes(xlValue).AxisTitle.Select
With ActiveChart.Axes(xlValue)
.MinimumScaleIsAuto = True
.MaximumScale = 7
.MinorUnitIsAuto = True
.MajorUnit = 1
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With
Selection.AutoScaleFont = False
With Selection.Font
.Name = "Arial"
.FontStyle = "Fett"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With
Selection.Left = 1
ActiveChart.Legend.Select
Selection.AutoScaleFont = False
With Selection.Font
.Name = "Arial"
.FontStyle = "Standard"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With
' Selection.Height = 19
' Selection.Height = 13
' Selection.Top = 111
ActiveChart.Axes(xlCategory).Select
Selection.TickLabels.AutoScaleFont = False
With Selection.TickLabels
.Alignment = xlCenter
.Offset = 0
.Orientation = xlAutomatic
End With
With Selection.TickLabels.Font
.Name = "Arial"
.FontStyle = "Standard"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With
ActiveChart.Axes(xlValue).Select
Selection.TickLabels.AutoScaleFont = False
With Selection.TickLabels.Font
.Name = "Arial"
.FontStyle = "Standard"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With
ActiveChart.PlotArea.Select
Selection.Top = 6
' Selection.Height = 96
' Selection.Width = 337
' Selection.Height = 105
Selection.Left = 12
Selection.Width = 337
End Sub

mgh Ka Prucha
Hans Alborg
2015-01-29 20:43:39 UTC
Permalink
Dieser beitrag ist möglicherweise unangemessen. Klicken sie auf, um es anzuzeigen.
Claus Busch
2015-01-30 07:38:48 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Momentan hab ich aber das Problem mehrere Kurven gleichzeitig ins Chart zu
bekommen ("damals" hat's mit 70 Kurven geklappt und heute nicht mehr als
zwei... steh wohl auf'm Schlauch).
hast du die Bereiche benamt? Dann könntest du diese Namen in eine Array
schreiben und dann das Array durchlaufen:

For i = LBound(myArr) To UBound(myArr)
With ActiveChart
.ChartType = xlLine
.SeriesCollection.NewSeries
.SeriesCollection(1).Values = _
"=" & ThisWorkbook.Name & "!y_" & myArr(i)


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2015-01-30 14:19:50 UTC
Permalink
Hi,

"Claus Busch" schrieb...
Post by Claus Busch
...Kurven ...nicht mehr als zwei... steh wohl auf'm Schlauch
hast du die Bereiche benamt?
Sowieso. Aber jetzt bin ich auch vom Schlauch runtergestiegen. Beim
Einsetzen von diesmal vier Kurven hat's nur 3 angezeigt. Da hat sich doch
eine Kurve genau unter einer anderen komplett versteckt! Tja: ausschlafen
ist alles!
Aber was hab ich 2012 für Daten abgespeichert? Dieselben wie 2010? Tsts.
Post by Claus Busch
...Dann könntest du diese Namen in eine Array schreiben und dann das Array
For i = LBound(myArr) To UBound(myArr)
With ActiveChart
.ChartType = xlLine
.SeriesCollection.NewSeries
.SeriesCollection(1).Values = _
"=" & ThisWorkbook.Name & "!y_" & myArr(i)
Den Carttyp braucht's wohl nur einmal. Aber danke speziell für die letzten 2
Zeilen, mit den Ausdruck hinter dem "=" hatte ich mich schwergetan.

Noch eine Sache: die Daten aus dem jeweils letzten Versuch werden sofort
wieder in das neu erstellte Chartobject eingesetzt. Es ist also eine Kurve
da, bevor ich meine Daten überhaupt angebe.
Kann man da vorher sowas wie ein "CLEAR" setzen? Die alten Daten bleiben
bei meinen letzten Versuchen auch zumindest in der Legende angezeigt!

Hans
Claus Busch
2015-01-30 14:27:39 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Noch eine Sache: die Daten aus dem jeweils letzten Versuch werden sofort
wieder in das neu erstellte Chartobject eingesetzt. Es ist also eine Kurve
da, bevor ich meine Daten überhaupt angebe.
Kann man da vorher sowas wie ein "CLEAR" setzen? Die alten Daten bleiben
bei meinen letzten Versuchen auch zumindest in der Legende angezeigt!
du müsstest die SeriesCollection löschen:
ActiveChart.SeriesCollection(1).Delete


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2015-01-31 19:06:54 UTC
Permalink
Hi Claus,

"Claus Busch" schrieb...
Post by Claus Busch
ActiveChart.SeriesCollection(1).Delete
Äh, vorweg: On Error Resume Next...
Danke, das hilft mir jetzt in doppelter Hinsicht: erst wie beabsichtigt,
Anfangs alte Werte loszuwerden, und dann...

ich hab jetzt alle Daten (ist ja jew. nur eine Spalte) auf ein gemeinsames
Blatt gebracht, weil die Zeitachse (Spalte B) ja nur einmal gebraucht wird.
Dadurch ist mir das mit mehreren Kurven vorher mißlungen.
Jetzt gebe ich den Datenbereich diagonal (C2---F690 zumBeispiel) nur einmal
ein.
Will ich jetzt eine Kurve dazutun oder entfernen, sollte das mit einem
Union- Datenfeld gehen (z.B. Range C2:D690 und Range F2:F690)
Da muß ich halt "ActiveChart.SeriesCollection(1).Delete" auch mal
zwischendurch nutzen!

Hätte nicht gedacht, daß ich damit soviel Zeit verbringen werde...

Hans

Lesen Sie weiter auf narkive:
Loading...