lade bitte eine Beispieldatei mit 2 Tabellen und einem Chart hoch. Die Struktur der Daten muss mit dem Original übereinstimmen, vertrauliche Inhalte sollen mit "xyz" oder ähnlichem ersetzt sein.
mfg
Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28 • rob70
Hallo Fennek, danke für das Interesse. Anbei die besagte Datei, beschränkt auf zwei Beispiele. Ein nutzloser Makroversuch ist auch noch mit gespeichert. Ich hoffe, das ist kein Problem, sonst speichere ich die Datei noch einmal ohne.
die Zahlen für MTF (danke, ich werde den Fehler meinerseits "MFT" ausbessern) stehen in den Spalten 2, 4, 6... der Tabelle. Als Hintergrundinformation: Es geht um die Beurteilung der Güte von Fotoobjektiven: Bei jeder Blende 1.4 - 2 - 2.8 - ... werden zwei Messungen in verschiedenen Bereichen des Kamera-Sensors gemacht. In der 1. Spalte stehen die Messwerte zur Blende f/1.4 für die Auflösungsmessung, in der zweiten Spalte auch noch zur Blende f/1.4 die der MTF50 Messung. Danach geht es entsprechend weiter. Der Grund, warum ich die Tabelle so "ungeschickt" vorgehe, ist dass ich die ganzen Messungen von Hand eintragen muss und zwar aus einer Auswertung sowohl für Spalte 1 als auch 2. Für das Diagramm ist's unpraktisch und würde sich durch das Kopieren in eine andere Tabelle natürlich verbessern lassen. Wenn allerdings das Ganze durch ein Makro auch klappt wäre das wieder überflüssig. Ich empfinde es übrigens als ziemlichen Mangel an Excel, dass man die Diagramme nicht einfach auf neue Tabellen übertragen kann (so ähnlich wie z.B. Formatierungen) oder dass ich die Tabelle samt Diagramm kopieren kann und dann die Bezüge gleich für die Kopie passen (oder habe ich das bisher einfach alles übersehen bzw. nicht gefunden?).
wenn ich ein gutes Gedächtnis hätte, wäre ich weitergegangen. Ich konnte mich erinnern, so etwas schon einmal gemacht zu haben, aber nicht wie kompliziert das ist.
Der Ansatz:
Einen Beispiel-Chart mit allen Formatierungen zu erstellen, dieses Muster zu kopieren und den Daten-Range zu wechseln.
Hier ein erster Code:
Code:
Const Vorlage = "Chart 41"
Sub T1() Dim Cht As ChartObject Dim Vorlage_Chart As ChartObject Dim WS As Worksheet: Set WS = ActiveSheet Dim Ser As Series 'Dim Poi As Point Dim Ar(6, 2) As Variant
WS.ChartObjects(Vorlage).Copy WS.Paste Set Vorlage_Chart = WS.ChartObjects(WS.ChartObjects.Count)
Set Cht = WS.ChartObjects("Chart 8") '<<<< anpassen >>>>>>>>>>
With Cht.Chart For Each Ser In .SeriesCollection s = s + 1 Ar(s, 1) = Ser.Name Ar(s, 2) = Replace(Ser.Formula, "$4", "$5") '<<<< anpassen >>>>>>>>>>> Next Ser For i = 1 To .SeriesCollection.Count .SeriesCollection(i).Formula = Ar(i, 2) Next i End With End Sub
Das Auslesen der relevanten Zeilen ist eher einfach, das Ersetzen dürfte noch etwas Arbeit sein.
Den Code vom der Beispiel-Datei ins Original zu übertragen, ist nicht trivial, da xl die Chart-Nr. hochzählt.
mfg
(das doppelte Auslesen mit "For Each" und "for i = 1 to" war leider nicht zu umgehen)
(mal sehen, ob ich morgen noch Lust für dieses Thema habe)
Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28 • rob70
18.12.2017, 19:44 (Dieser Beitrag wurde zuletzt bearbeitet: 18.12.2017, 19:53 von Wastl.)
Hi,
will auch meinen Senf dazu geben.
Vor Jahren hab Powerpoints erstellen dürfen mit über 100 Seiten und so Diagrammen monatlich. Jeder kann sich die Arbeit vorstellen.
Ich hatte in Excel nur ein Diagramm, dessen Daten ich aus 60 Tabellenblättern per Indirekt ausgelsen habe Von diesem Diagramm habe ich ein Bild gemacht und in Powerpoint reingeschoben. Dann die Quelle verändert, nächstes Bild. So haben alle Diagramme die genau gleich Größe, nur die Werte ändern sich. Hier sieht es ähnlich aus. Und die Arbeit ist nur einmal von Nöten zum formatieren, danach kann man sich komplett auf die Daten konzentrieren.
Excel kann das seit 2007 mit 'als Bild kopieren', davor in früheren Excelversionen musstest du in den Tiefen nach dem Kamerasymbol suchen bzw es gleich mit vba machen Der Vorteil vom Bild in Powerpoint is eine kleinere Dateigröße, als wenn du die Exceldatei 100x einbindest
und es manipuliert auch niemand dran rum an den werten.
Nur mal so als Idee Die Beispiel.xlsm ist nicht wirklich übersichtlich zum anguggen bzw. anderen Leuten zu zeigen^^
@Fennek
Zitat:Den Code vom der Beispiel-Datei ins Original zu übertragen, ist nicht trivial, da xl die Chart-Nr. hochzählt.
Excel zählt die Shape-Nummer hoch. Alles was nicht in die Tabellen passt, Pfeile, Bilder, Textboxen oder Diagramme sind ein shape und können mit VBA von einer Form in die andere gebracht werden (teilweise) und jedes dieser Shapes bekommt eine ID, die sich in der Reihenfolge des Anlegens hochzählt.
Mit VBA lassen sich diese Shapes auch ausblenden, dann sind sie nicht sichtbar, aber immer noch vorhanden. Keine Ahnung, zu was das gut sein soll. Aber, je mehr shapes in einer Datei enthalten sind, desto langsamer wird die Datei zum bearbeiten. Auch da weiß ich den Grund nicht, aber es ist wichtig zu wissen…
Darum rate ich ab von der Diagrammkopiererei
Folgende(r) 1 Nutzer sagt Danke an Wastl für diesen Beitrag:1 Nutzer sagt Danke an Wastl für diesen Beitrag 28 • rob70
wenn ich ein gutes Gedächtnis hätte, wäre ich weitergegangen. Ich konnte mich erinnern, so etwas schon einmal gemacht zu haben, aber nicht wie kompliziert das ist.
Der Ansatz:
Einen Beispiel-Chart mit allen Formatierungen zu erstellen, dieses Muster zu kopieren und den Daten-Range zu wechseln.
Hier ein erster Code:
Code:
Const Vorlage = "Chart 41"
Sub T1() Dim Cht As ChartObject Dim Vorlage_Chart As ChartObject Dim WS As Worksheet: Set WS = ActiveSheet Dim Ser As Series 'Dim Poi As Point Dim Ar(6, 2) As Variant
WS.ChartObjects(Vorlage).Copy WS.Paste Set Vorlage_Chart = WS.ChartObjects(WS.ChartObjects.Count)
Set Cht = WS.ChartObjects("Chart 8") '<<<< anpassen >>>>>>>>>>
With Cht.Chart For Each Ser In .SeriesCollection s = s + 1 Ar(s, 1) = Ser.Name Ar(s, 2) = Replace(Ser.Formula, "$4", "$5") '<<<< anpassen >>>>>>>>>>> Next Ser For i = 1 To .SeriesCollection.Count .SeriesCollection(i).Formula = Ar(i, 2) Next i End With End Sub
Das Auslesen der relevanten Zeilen ist eher einfach, das Ersetzen dürfte noch etwas Arbeit sein.
Den Code vom der Beispiel-Datei ins Original zu übertragen, ist nicht trivial, da xl die Chart-Nr. hochzählt.
mfg
(das doppelte Auslesen mit "For Each" und "for i = 1 to" war leider nicht zu umgehen)
(mal sehen, ob ich morgen noch Lust für dieses Thema habe)
Danke schon einmal für das viele Hirnschmalz, was hier hinein geflossen ist. Aber auch, wenn ich den Code weitgehend lesen kann, fehlt mir doch die Übung als dass ich glaube, ihn zum Laufen zu bringen. Wenn ich es richtig verstehe, ist daran noch mehr zu tun (außer das Musterchart auszuwählen).
Mir würde im Prinzip auch schon viel weniger reichen:
Es würde mir genügen, wenn ich z.B. die Zelle mit dem Titel (der einzelnen kleinen, zu einem Objektiv gehörigen Tabelle, z.B. "Auto Revuenon 1.4/50 MC") aktiviere und dann das Makro für die Anpassung von einem einzelnen Diagramm starte. Von dort aus sind immer alle relativen Bezüge gleich und damit müssten doch eigentlich die Zellen schnell ausgelesen und entsprechend dem Diagramm untergeschoben werden können, oder?
Dabei wäre es mir auch egal, ob ich vorher das Diagramm schon kopiert habe und das Makro nur noch darauf zugreift oder ob das Makro auch das Diagramm noch kopiert.
Es scheint mir für den Zweck fast zu aufwendig, Code zu bekommen, der gleich die ganze Tabelle in einem Rutsch richtig formatiert (nehme ich aber natürlich auch gerne).
18.12.2017, 20:45 (Dieser Beitrag wurde zuletzt bearbeitet: 18.12.2017, 21:42 von rob70.)
(18.12.2017, 19:44)Wastl schrieb: [...] Von diesem Diagramm habe ich ein Bild gemacht und in Powerpoint reingeschoben. Dann die Quelle verändert, nächstes Bild. So haben alle Diagramme die genau gleich Größe, nur die Werte ändern sich. Hier sieht es ähnlich aus. Und die Arbeit ist nur einmal von Nöten zum formatieren, danach kann man sich komplett auf die Daten konzentrieren.
Excel kann das seit 2007 mit 'als Bild kopieren', davor in früheren Excelversionen musstest du in den Tiefen nach dem Kamerasymbol suchen bzw es gleich mit vba machen Der Vorteil vom Bild in Powerpoint is eine kleinere Dateigröße, als wenn du die Exceldatei 100x einbindest
und es manipuliert auch niemand dran rum an den werten.
Nur mal so als Idee Die Beispiel.xlsm ist nicht wirklich übersichtlich zum anguggen bzw. anderen Leuten zu zeigen^^
Die Ergebnisse werde ich in eine Webseite einbinden. Vermutlich arbeite ich dann einfach mit Screenshots. Trotzdem möchte ich auch später noch in der Lage sein, die Tabelle zu ergänzen oder evtl. anders zu formatieren.
Wenn die Idee von Fennek nichts wird, denke ich drüber nach. Ich habe das schon richtig verstanden, dass ich sozusagen für jede Tabelle eine eigene Datei machen, in der ich die Daten entsprechend ändere. Später muss ich dann in PowerPoint nur eine neue Quell-Datei angeben und schon wird's entsprechend angepasst und dann neu gespeichert, oder?
hier ist der Code der in Tabelle 1 beliebig viele Charts anlegt.
Code:
Const Vorlage = "Chart 41" Sub alle_Blocks() Dim Ar As Range For Each Ar In Columns(1).SpecialCells(2).Areas If Ar.Cells(1).Row > 10 Then T1 (Ar.Cells(1).Row) End If Next Ar End Sub
Sub T1(ByVal r As Integer) Dim Cht As ChartObject Dim Vorlage_Chart As ChartObject Dim WS As Worksheet: Set WS = ActiveSheet Dim Ser As Series Dim Ar(6, 2) As Variant
WS.ChartObjects(Vorlage).Copy WS.Paste
Set Cht = WS.ChartObjects(WS.ChartObjects.Count) Cht.Activate With ActiveChart .ChartTitle.Text = Cells(r, 1) End With With Cht .Top = Cells(r, "T").Top .Left = Cells(r, "T").Left End With With Cht.Chart For Each Ser In .SeriesCollection s = s + 1 Ar(s, 1) = Ser.Name If InStr(1, Ser.Formula, "Center") > 0 Then Ar(s, 2) = Replace(Ser.Formula, "$4", "$" & r + 1) If InStr(1, Ser.Formula, "Thirds") > 0 Then Ar(s, 2) = Replace(Ser.Formula, "$4", "$" & r + 6) If InStr(1, Ser.Formula, "Corner") > 0 Then Ar(s, 2) = Replace(Ser.Formula, "$4", "$" & r + 11) Next Ser For i = 1 To .SeriesCollection.Count .SeriesCollection(i).Formula = Ar(i, 2) Next i End With Set Cht = Nothing End Sub
Die Sub "alle_Blocks" wird gestartet und ruft dann die Erstellung, Plazierung und Anpassen der Daten auf.
mfg
(mit kleinen Äderungen, insbesondere dem Beispilechart, sollte es auh in Tabelle 2 laufen)
Es ist möglich mit einem weiteren Makro die Charts in Bilder zu wandeln und nach PP zu exportieren, bzw zu speichern
Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28 • rob70