Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1912to1916
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

Diagramm exportieren

Diagramm exportieren
19.12.2022 17:18:32
Miguel
Servus,
ich habe ein Problem beim exportieren eines Diagramms in jpg, um es in UserForm031.Image001 zu laden.
Die Größe von UserForm031.Image001 ist variabel und wird vorher so dimensioniert, dass abhängig von der Bildschirmauflösung der zur Verfügung stehende Platz ausgenutzt wird. Das funktioniert.
Danach erstelle ich das Diagramm mit der Höhe und Breite wie UserForm031.Image001. Das funktioniert auch. In der Tabelle wird das Diagramm in Höhe und Breite wie gewünscht angezeigt.
With ActiveSheet.ChartObjects.Add(10, 10, UserForm031.Image001.Width, UserForm031.Image001.Height)
Beim laden ins UserForm wird das Diagramm zwar in der Höhe korrekt angezeigt, aber in der Breite ist es rechts abgeschnitten und wird zentriert in UserForm031.Image001 angezeigt mit breitem Rand links und rechts. In der jpg Datei ist es ebenfalls abgeschnitten.
ActiveSheet.ChartObjects(1).Chart.Export Filename:=ThisWorkbook.Path & "\Diagram.jpg", FilterName:="JPG"
UserForm031.Image001.Picture = LoadPicture(ThisWorkbook.Path & "\Diagram.jpg")
Bevor ich meinen ganzen Code hochlade: Ist da ein Problem bekannt? Ich kann doch gar nicht definieren, welches Stück vom Diagramm ich laden möchte und was abgeschnitten werden soll, oder? Es ist mir ein Rätsel und ich bin für jede Hilfe dankbar.
Excel Version ist übrigens 2000 bzw. 9.0
Viele Grüße
Miguel

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagramm exportieren
19.12.2022 19:06:49
AlterDresdner
Hallo Miguel,
es gibt die EIgenschaft PictureSIzeMode (der Userform), die standardmäßig auf ...Clip eingestellt ist. Ändere diese EIgenschaft auf ....Zoom und alles wird gut.
Gruß der ALteDresdner
AW: Diagramm exportieren
19.12.2022 19:49:49
Miguel
Servus,
leider nein, leider gar nicht...
Erstmal danke für die Rückmeldung. PictureSizeMode ist mir durchaus bekannt, aber daran liegt es nicht. Es soll ja auch nicht gezoomt werden. Das Diagramm ist genau so groß wie das Image. Wie schon geschrieben ist beim Diagramm selbst noch alles in Ordnung, aber bei der Erstellung der jpg Datei stimmt das Seitenverhältnis dann nicht mehr.
Noch andere Ideen?
Danke und Gruß
Miguel
Anzeige
AW: Diagramm exportieren
20.12.2022 10:30:26
Beverly
Hi Miguel,
hast du es mal mit dem Dateiformat BMP anstelle JPG versucht?
Bis später
Karin

AW: Diagramm exportieren
20.12.2022 16:06:41
Miguel
Servus Karin,
ich hatte auf eine Antwort von Dir gehofft. Vielen Dank dafür und all Deine anderen Beiträge zum Thema, die mich überhaupt erst soweit gebracht haben, dass ich nun vor diesem Problem stehe.
Jetzt ja ;-)
Laufzeitfehler '1004'
Das Bild ist zu groß und wird abgeschnitten.
Offensichtlich tut er das auch bei JPG, nur ohne Fehlermeldung.
Zu groß wofür? Arbeitsspeicher? Kann eigentlich nicht sein, denn ich hab es auch auf anderen (besseren) Systemen getestet, aber noch nicht in anderen Excel Versionen.
Kleiner machen und zoomen will ich unbedingt vermeiden, das wird unschön. Ich überlege, ob ich zwei (oder mehr) Bilder vom Diagramm machen könnte und diese nebeneinander lege. Kann man mit Crop den Ausschnitt vom Diagramm, den er exportiert, beeinflussen?
Danke und Gruß
Miguel
Anzeige
AW: Diagramm exportieren
20.12.2022 16:22:55
Beverly
Hi Miguel,
das Problem könnte möglicherweise mit der Zwischenablage zu tun haben. Ergänze mal deinen Code nach dem Diagramm-Export durch diese Codezeile:

ActiveSheet.Range("A1").Copy
Dadurch wird die Zwischenablage reduziert.
Bis später
Karin

AW: Diagramm exportieren
20.12.2022 17:32:18
Miguel
Das ändert leider nichts.
Danke und Gruß
Miguel
AW: Diagramm exportieren
20.12.2022 19:25:03
Beverly
Wie breit ist das Diagramm denn? Hast du vielleicht einen Druckbereich festgelegt und das Diagramm ist breiter als 1 Seite? Versuche es mal wenn du das Diagramm schmaler machst.
Bis später
Karin

Anzeige
AW: Diagramm exportieren
21.12.2022 13:41:40
Miguel
Servus Karin,
der Druckbereich scheint es zu sein. Zumindest passt die Stelle, an der das Diagramm abgeschnitten ist, zu der, an der die Seite umbricht.
Da die Datei nur aus UserForms besteht und die Tabelle, auf der das Diagramm erstellt wird, immer im Hintergrund ist, waren die Druckeinstellungen noch komplett jungfräulich und ich hätte das nie in Zusammenhang gebracht.
Die Breite des Diagramms ist die Bildschirmbreite minus eines Streifens mit Steuerelementen. Auf kleinen Bildschirmen passts, aber auf großen tritt das Problem auf. Ich hätte jetzt erwartet, wenn ich den Druckbereich vergößere, in dem ich den Rand kleiner mache, oder auf Querformat umstelle oder die Papiergröße verändere, so daß das Diagramm in der Druckvorschau auf eine Seite passt, daß dann auch das Image breiter wird. Tut's aber nicht, sondern bleibt immer gleich. Deshalb bin ich mir noch nicht ganz sicher, ob es wirklich der Druckbereich ist.
Ich habe jetzt die Breite des Image auf 900 Pixel beschränkt, so daß der Platz auf großen Bildschirmen nicht mehr maximal ausgenutzt wird. Damit kann ich leben, sofern das so mit allen mir zur Verfügung stehenden Bildschirmauflösungen passt, was ich erst noch testen muß.
Ich bedanke mich recht herzlich für Deine Hilfe, kündige hiermit aber schon mal an, daß ich für ein anderes Problem gerne nochmal Deine Hilfe in Anspruch nehmen würde, nämlich Daten vom Array direkt ins Diagramm.
Danke, viele Grüße und bis später ;-)
Miguel
Anzeige
AW: Diagramm exportieren
21.12.2022 14:01:27
Beverly
Hi Miguel,
was die Veränderung des Druckbereichs betrifft: hast du mal getestet, wie die Seite tatsächlich mit dem veränderten Rand gedruckt wird, also nicht nur in der Druckvorschau aussieht? Der Druckbereich steht in engem Zusammenhang mit dem verwendeten Drucker und wenn dieser die eingestellten Druckbereichsmaße nicht verarbeiten kann, hilft die Veränderung eben auch nicht.
Es gäbe vielleicht noch andere Lösungen, die du testen könntest:
- verringere die Diagrammbreite vor dem Export und setze sie nach dem Laden ins UserForm auf die Originalbreite zurück.
- oder lege den Druckbereich von Hand so fest, dass die Zellen mit den Steuerelementen auf einer anderen Seite liegen als das Diagramm selbst
- oder benutze ein Diagrammblatt anstelle eines eingebetteten Diagrammobjektes
Da dieses Problem kein internes Diagrammproblem ist - dieser Fehler tritt auch in anderen Fällen auf - kann ich da leider auch nur vermuten.
Bis später
Karin

Anzeige
AW: Diagramm exportieren
23.12.2022 21:29:05
Miguel
Servus Karin,
nach zwei weiteren Tagen des testens und probierens bin ich weiter denn je von einer Lösung entfernt...
Ich habe alle Deiner Vorschläge und noch viel mehr ausprobiert, aber das Ergebnis ist immer dasselbe: Die jpg wird nicht so breit wie sie sein soll und mittlerweile glaube ich auch nicht mehr, dass es mit dem Druckbereich zusammenhägt. Das Diagramm passt auf eine Seite, die jpg ist trotzdem abgeschnitten.
Die Hoffnung, dass es mit einer Begrenzung auf 900 Pixel getan wäre, hatte sich leider auch schon beim ersten anderen Rechner zerschlagen. Und ein Speicherproblem kann es demnach auch nicht sein, denn der zweite Rechner hat einen wesentlich größeren Arbeitsspeicher als der, auf dem es zuvor funktioniert hat. Auch auf verschiedenen Betriebssystemen hab ich getestet. Auf dem selben Recher war es im XP ausgefüllt, im 7 abgeschnitten.
Ich hab jetzt mal eine Datei erstellt, die auf das wesentliche reduziert ist, denn im Original ist alles dynamisch, Daten kommen aus arrays usw. was das testen sehr umständlich machte. Ich wurde auch das Gefühl nicht los, dass die zu geringe Breite vielleicht von irgendwo anders im Code herrührt, denn es gibt in derselben Datei schon mal einen export auf die gleiche Weise, aber da funktioniert es immer, weil das Format annähernd quadratisch ist.
Jetzt hab ich die Daten in der Tabelle, den Code auf ein Minimum reduziert, alles so einfach wie möglich, das Ergebnis ist wieder dasselbe: Auf kleinen Bildschirmen geht's, auf breiten wird das Diagramm abgeschnitten. Ich versuche mal die reduzierte Datei und zwei Screenschots hochzuladen. Vielleicht magst Du Dir es mal ansehen.
Danke und Gruß
Miguel
https://www.herber.de/bbs/user/156920.xls
Userbild
Userbild
Anzeige
AW: Diagramm exportieren
24.12.2022 00:10:29
Beverly
Hi Miguel,
bei mir wird das Diagramm komplett angezeigt - ich benutze einen breiten Bildschirm. Allerdings muss ich dazu sagen, dass ich Excel2016 verwende.
Ich habe deinen Code mal ein wenig vereinfacht und auch die Variablen so dimensioniert wie man sie dimensionieren sollte:

Sub Test()
Dim lngLastRow As Long
Dim dblXValuesMaximum As Double
Dim dblXValuesMinimum As Double
Dim dblYValuesMaximum As Double
Dim dblYValuesMinimum As Double
UserForm001.Height = Application.Height
UserForm001.Width = Application.Width
UserForm001.Frame001.Width = UserForm001.OptionButton001.Width + 12
UserForm001.Image001.Height = UserForm001.Height - 76
UserForm001.Image001.Width = UserForm001.Width - UserForm001.Image001.Left - UserForm001.Frame001.Width - 28
UserForm001.Frame001.Left = UserForm001.Image001.Left + UserForm001.Image001.Width + 12
UserForm001.Frame001.Top = UserForm001.Image001.Top - 5
UserForm001.CommandButton001.Left = (UserForm001.Width - 136) / 2
UserForm001.CommandButton001.Top = UserForm001.Height - 52
lngLastRow = Columns(1).Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
dblXValuesMaximum = Application.WorksheetFunction.Max(Range(Cells(1, 2), Cells(lngLastRow, 2)))
dblXValuesMaximum = Application.WorksheetFunction.RoundUp(dblXValuesMaximum, 1)
dblXValuesMinimum = Application.WorksheetFunction.Min(Range(Cells(1, 2), Cells(lngLastRow, 2)))
dblXValuesMinimum = Application.WorksheetFunction.RoundDown(dblXValuesMinimum, 1)
dblYValuesMaximum = Application.WorksheetFunction.Max(Range(Cells(1, 1), Cells(lngLastRow, 1)))
dblYValuesMaximum = Application.WorksheetFunction.RoundUp(dblYValuesMaximum, 1)
dblYValuesMinimum = Application.WorksheetFunction.Min(Range(Cells(1, 1), Cells(lngLastRow, 1)))
dblYValuesMinimum = Application.WorksheetFunction.RoundDown(dblYValuesMinimum, 1)
With ActiveSheet.ChartObjects.Add(10, 10, UserForm001.Image001.Width, UserForm001.Image001.Height)
.Name = "Diagram"
With .Chart
.ChartType = xlXYScatterLinesNoMarkers
.ChartArea.Border.LineStyle = xlNone
With .SeriesCollection.NewSeries
.Border.ColorIndex = 1
.Border.Weight = xlMedium
.XValues = Range(Cells(1, 2), Cells(lngLastRow, 2))
.Values = Range(Cells(1, 1), Cells(lngLastRow, 1))
End With
.Axes(xlCategory).MinimumScale = dblXValuesMinimum
.Axes(xlCategory).MaximumScale = dblXValuesMaximum
.Axes(xlCategory).Border.ColorIndex = 16
.Axes(xlCategory).TickLabels.Font.ColorIndex = 16
.Axes(xlValue).MinimumScale = dblYValuesMinimum
.Axes(xlValue).MaximumScale = dblYValuesMaximum
.Axes(xlValue).Border.ColorIndex = 16
.Axes(xlValue).TickLabels.Font.ColorIndex = 16
.Axes(xlValue).MajorGridlines.Delete
.PlotArea.Border.LineStyle = xlNone
.PlotArea.Interior.ColorIndex = xlNone
.Legend.Delete
End With
End With
ActiveSheet.ChartObjects(1).Chart.Export Filename:=ThisWorkbook.Path & "\Diagram.jpg", FilterName:="JPG"
UserForm001.Image001.Picture = LoadPicture(ThisWorkbook.Path & "\Diagram.jpg")
Kill ThisWorkbook.Path & "\Diagram.jpg"
ActiveSheet.ChartObjects("Diagram").Delete
UserForm001.Left = Application.Left + Application.Width / 2 - UserForm001.Width / 2
UserForm001.Top = Application.Top + Application.Height / 2 - UserForm001.Height / 2
UserForm001.Show
End Sub
Bis später
Karin

Anzeige
AW: Diagramm exportieren
24.12.2022 11:16:02
Miguel
Guten Morgen, Karin.
Danke für Deine Bemühungen. Zwischenzeitlich konnte ich es auch mit 2016 testen und da funktioniert es (natürlich). Bringt mir aber leider nix. Also ist es wohl ein Problem der Version. Die einzige Möglichkeit, die ich jetzt noch sehe, wäre zwei Durchläufe zu machen. Nach dem ersten auslesen wie breit die jpg tatsächlich ist und beim zweiten dann genau mit diesen Maßen das Diagramm nochmal neu erstellen, so dass es unverzerrt, ungezoomt und ohne Rand so groß wie eben möglich im UserForm dargestellt wird.
Dann wäre da noch die Frage, die Daten fürs Diagramm direkt aus dem Array zu ziehen. Ich fürchte, dass auch das nicht mit 2000 geht. Ich hab jetzt den Umweg genommen, vom Array in die Tabelle zu schreiben und das als Quelle für's Diagramm zu nehmen und dann die Daten in der Tabelle wieder löschen. Funktioniert, ist aber nicht schön.
Hättest Du einen funktionierenden Code vom Array ins Diagramm, so dass ich mal testen kann, ob es grundsätzlich mit meiner Version geht, bevor ich meine Datei wieder groß umbaue?
Danke und Gruß
Miguel
Anzeige
AW: Diagramm exportieren
24.12.2022 14:38:35
Beverly
Hi Miguel,
wie sieht denn dein Code aus, der die Daten ins Array einliest?
Frage: ich hatte noch den Vorschlag gemacht, das Diagramm in einem Diagrammblatt zu erstellen und nicht als eingebettetes Diagrammobjekt im Tabellenblatt - tritt der Fehler dann auch auf?
M.E. musst du nicht die Breite des jpg ermitteln sondern das Diagramm genau so breit und hoch wie das Image im UserForm erstellen - hast du es so schon mal getestet?
Bis später
Karin

AW: Diagramm exportieren
27.12.2022 11:34:38
Miguel
Servus Karin,
Frage: ich hatte noch den Vorschlag gemacht, das Diagramm in einem Diagrammblatt zu erstellen und nicht als eingebettetes Diagrammobjekt im Tabellenblatt - tritt der Fehler dann auch auf?
Ja, hab es gerade nochmal probiert. Wie alles andere auch ändert es nichts an der Größe der jpg.
M.E. musst du nicht die Breite des jpg ermitteln sondern das Diagramm genau so breit und hoch wie das Image im UserForm erstellen - hast du es so schon mal getestet?
Mach ich doch:

With ActiveSheet.ChartObjects.Add(10, 10, UserForm031.Image001.Width, UserForm031.Image001.Height)
Nur wird die jpg bei breiten Bildschirmen nicht so breit, dass es das Image ausfüllt.
Ich habe jetzt folgenden Programmablauf:
Ich dimensioniere UserForm031 und UserForm031.Image001 an die Bildschirmauflösung angepasst. Dann erstelle ich ein auf diese Größe angepasstes Dummy Diagramm, nur um zu sehen wie groß die jpg wird. Ist die zu klein, um UserForm031.Image001 auszufüllen, wird alles nochmal neu dimensioniert an die Größe der jpg angepasst. Und dann erstelle ich das auf diese Größe passende eigentliche Diagramm.
Das habe ich jetzt auf allen Rechnern, allen Betriebssystemen und allen Excel Versionen, die mir zur Verfügung stehen, getestet und es funktioniert. Bei Excel 2000 und breiten Bildschirmen ist die UserForm dann eben nicht ganz so groß wie sie von der Bildschirmauflösung sein könnte, in allen anderen Fällen schon. Damit kann ich leben, Thema erledigt.
Die Daten aus dem Array direkt ins Diagramm zu bekommen, funktioniert auch...grundsätzlich. Leider sind die Arrays in den meisten Fällen zu lang, so daß es zu folgenden Fehlern kommt:
Laufzeitfehler 1004: Die XValues-Eigenschaft des Series-Objektes kann nicht festgelegt werden.
Laufzeitfehler 1004: Die Values-Eigenschaft des Series-Objektes kann nicht festgelegt werden.

Durch Reduzierung der Nachkommastellen, konnte ich es ein bißchen verbessern, aber nicht für alle Fälle ausreichend. Da es sich um ein XY-Diagramm handelt, überlege ich jetzt, das Array auf mehrere Series aufzuteilen und diese im Diagramm aneinanderzuhängen. Ich will aber keine feste Größe, wie viele Punkte eine Series haben soll und wann eine neue beginnt, weil das ganze bestimmt auch wieder von Version, Arbeitsspeicher und was weiß ich noch alles abhängig ist, sondern das Array, das ins Diagramm eingelesen wird, so lange Reihe für Reihe größer machen, bis der Fehler auftritt. Allerdings hab ich noch keine Idee, wie ich den Fehler abfangen soll. Und die Anzahl der Series ist bestimmt auch endlich.
Wahrscheinlich ist es sicherer - auf alle Fäle einfacher - doch den Weg über die Tabelle zu gehen. Zu lange dauert es jedenfalls nicht.
Danke für Deine Hilfe und Deine Geduld
Miguel
Anzeige
AW: Diagramm exportieren
27.12.2022 14:22:13
Beverly
Hi Miguel,
betrifft alle älteren Excel-Versionen (vor 2007):
- nicht die Anzahl an Feldern des Arrays (also Anzahl an Datenpunkten) führt zu dem Laufzeitfehler, sonden er kommt dann, wenn die Länge der Datenreihenformel mehr als 255 Zeichen beträgst - und das ist bei Dezimalzahlen sehr häufig der Fall. Es ist also nicht die Anzahl an Datenpunkten je Datenreihe (das können durchaus mehr als 255 sein) sondern hängt eben davon ab wie die Datenreihenformel aufgebaut ist - und dabei wird JEDES enthaltene Zeichen gezählt, auch die Trenner zwischen den einzelnen Werten. Es kann deshalb z.B. auch zu Problemen führen, wenn man zwar den Wertebereich aus dem Tabellenblatt nimmt, der Zellbereich aber diskontinuierlich ist, also aus Zellen besteht, die nicht einen zusammenhängenden Bereich bilden, weil in diesem Fall für jeden Teilbereich immer der Tabellenname vorangesetzt wird.
Generell gesehen ist es also immer günstiger, einen zusammenhängenden Zellbereich statt einer direkten Wertezuweisung per Array zu verwenden, weil in diesem diese Beschränkung nicht besteht.
- die Anzahl an Datenreihen ist auf 255 begrenzt
Die o.g. Beschränkungen gibt es in den neueren Excel-Versionen nicht mehr.
Bis später
Karin

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige