Anzeige
Archiv - Navigation
1616to1620
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Letztes Shape ansteuern

Letztes Shape ansteuern
28.03.2018 14:33:27
Alfred
Hallo alle zusammen,
mit meinen Messungen erhalte ich mehrere Tausend Daten, die ich auswerte und sortiere.
Anschließend sollen zusammenhängende Messungen visualisiert werden. Jeweils zusammenhängende Datenblöcke sind vom nächsten Datenblock durch ein Leerzeichen getrennt. Ich habe (mit Tipps aus dem Forum) ein makro geschrieben, dass diese Blöcke automatisch ausliest und als Grafik visualisiert.
Es sind jedoch im schlimmsten/besten Fall mehrere hundert Datenblöcke und ich würde gerne die neu erstelle Grafik in etwa neben den entsprechenden Datenblock platzieren. Derzeit werden sie alle aufeinander gestapelt. Die letzte Grafik ganz oben.
https://www.herber.de/bbs/user/120736.jpg
Mein derzeitiger Code sieht so aus:
Sub Makro1()
Application.ScreenUpdating = False
Sheets(Sheets.Count).Select
'Deklarationsbereich
Dim Zähler As Long
Dim iZeile As Long
jZeile = 3
iZeile = ActiveSheet.UsedRange.Rows.Count
For Each ar In Range("E:F").SpecialCells(2).Areas                 'ar ist ein Range
'    ar.Select
'    Selection.Copy
'    ar.Offset(0, 10).Select
'    ActiveSheet.Paste
ar.Offset(0, 5).Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=ar
ActiveSheet.Shapes(Shapes.Count).IncrementLeft 3
ActiveSheet.Shapes(Shapes.Count).IncrementTop -150.75
Next ar
Application.ScreenUpdating = True
MsgBox ("Ihre Daten wurden visualisiert.")
End Sub
Der Teil mit Shapes(Shapes.Count) war einfach nur ein Versuch. Hat aber leider nicht geklappt. Meine konkreten Fragen:
1. Wie kann ich das letzte erzeugte Shape ansteuern.
2. Wie kann ich automatisch, das auf höhe der zugehörigen Range platzieren.
Brauche keinen fertigen Code. Ein paar Hilfestellungen wären schon hilfreich.
Vielen Dank schon mal.
Grüße Alfred

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Vorschlag
28.03.2018 14:46:42
Beverly
Hi Alfred,
vielleicht so:
Sub Makro1()
Application.ScreenUpdating = False
Dim ar As Range
For Each ar In Range("E:F").SpecialCells(2).Areas
With ActiveSheet.Shapes.AddChart(0, 0, 0, 0).Chart
.ChartType = xlXYScatterSmooth
.SetSourceData Source:=ar
With .Parent
.Top = ar.Cells(1).Top
.Left = ar.Cells(1).Offset(0, 5).Left
.Height = ar.Height
.Width = Range("K1:O1").Width
End With
End With
Next ar
Application.ScreenUpdating = True
MsgBox ("Ihre Daten wurden visualisiert.")
End Sub


Anzeige
AW: Vorschlag
28.03.2018 14:55:52
Alfred
Wow, vielen Dank @Beverly. Ich möchte den Code aber nicht einfach nur kopieren, deshalb hätte ich ein zwei Fragen, wenn das okay ist.
With ActiveSheet.Shapes.AddChart(0, 0, 0, 0).Chart 'Wofür steht die 0,0,0,0 und .Chart?
With .Parent 'Habe nach parent mal unter F1 geschaut.Kannst du das vielleicht kurz erklären?
Ich denke, dass ich den Rest verstehe.
AW: Vorschlag
28.03.2018 16:03:20
Beverly
Ein ins Tabellenblatt eingebettetes Diagramm befindet sich innerhalb eines Diagrammobjektes (Container = Shape), welchem man 4 Werte vorgeben muss: .Shapes.AddChart(Position Links, Position oben, Breite, Höhe) - im Beispiel wird also ein Diagrammobjekt mit der Position 0/0 und der Größe 0/0 erstellt, welchem später die eigentliche Position und Größe zugewiesen wird. Diese Vorgehensweise umgeht weitgehend das Problem, dass ein Diagrammobjekt aufgrund grafischer Probleme innerhalb von Excel häufig falsch positioniert wird, wenn die Werte direkt beim Erstellen des Diagrammobjektes im Code vorgegeben werden.
Der Zusatz .Chart ist dazu da, um sogleich auf das eigentliche Diagramm zu verweisen, da der Diagrammtyp und die Datenquelle nur dem Diagramm selbst und nicht dem Diagrammobjekt (Container) zugewiesen werden können.
.Parent bedeutet, dass man sich wieder auf das übergeordnete Diagrammobjekt (Container) bezieht, in dem sich das Diagramm befindet, da vorher mit .Chart das Diagramm direkt angesprochen wurde und Position und Größe sich nur dem Diagrammobjekt (Container) und nicht dem Diagramm darin zuweisen lassen.


Anzeige
AW: Vorschlag
28.03.2018 15:18:25
Alfred
Okay, ich habe es gerade mal ausprobiert und leider funktioniert es nicht ganz so wie es soll. In meinem Testdokument hat es geklappt. Im originalen leider nicht.
So sieht es derzeit aus. Er sollte aber die eine Spalte als X und die andere als Y-Achsenwerte auswählen.
https://www.herber.de/bbs/user/120738.jpg
Was mache ich falsch?
AW: Vorschlag
28.03.2018 15:24:50
Alfred
Okay, ich habe es gerade mal ausprobiert und leider funktioniert es nicht ganz so wie es soll. In meinem Testdokument hat es geklappt. Im originalen leider nicht.
So sieht es derzeit aus. Er sollte aber die eine Spalte als X und die andere als Y-Achsenwerte auswählen.
https://www.herber.de/bbs/user/120738.jpg
Was mache ich falsch?
Anzeige
AW: Vorschlag
28.03.2018 16:43:02
Alfred
Hallo Beverly,
vielen Dank für die neue Antwort. Habe es gerade getestet. Leider hat sich nichts geändert.
Ich habe das Problem nochmal anschaulich in einem neuen Thread erläutert. Wenn du Zeit und Lust hättest, könntest du ja da mal reinschauen?
Wenn man die Spalten mit den Grafiken löscht und das Makro erneut laufen lässt, funktioniert es komischerweise.
Weshalb ein neuer Thread?
28.03.2018 18:06:33
Beverly
Dann hast du in deinem Originaldokument kurz vorher ein Diagramm erstellt, bei dem du andere Bedingungen angegeben hast und eigentlich sollte dein Ursprungscode dann dasselbe Problem gehabt haben...
Ergänze den Code einfach wie folgt:
            .SetSourceData Source:=ar, PlotBy:=xlColumns


Anzeige
AW: Weshalb ein neuer Thread?
29.03.2018 10:54:36
Alfred
Erstelle vorher keine anderen Diagramme.
.setsorucedata habe ich schon drin.
Vielen Dank trotzdem.
AW: Weshalb ein neuer Thread?
29.03.2018 14:34:23
Beverly
Ich meinte damit nicht unmittelbar vorher sondern irgendwann einmal, denn Excel merkt sich die zuletzt verwendeten Einstellungen.
Ja, du hast .SetSourceData breits im Code, denn andernfalls würde überhaupt kein Diagramm erstellt, ABER du hast nicht die Egänzung PlotBy:=xlColumns wie in meinem Beitrag und genau darin liegt das Problem, denn der Zusatz bedeutet, dass die Daten in Spaltenanordnung vorliegen, andernfalls werden die Daten aus Reihenanordnung erstellt, was eine falsche Diagrammdarstellung ergibt...


Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige