Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
456to460
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
456to460
456to460
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Probleme mit VBA (Grafik erstellen)
19.07.2004 14:58:41
Andy
Hallo,
ich habe ein Problem mit dem erstellen einer gif.datei eines bestimmten Bereiches. In der folgenden Datei ist der Code als Makro enthalten und soll in dem gleichen Verzeichnis wie die Datei eine Bilddatei 1_aufstellung.gif erstellen.
https://www.herber.de/bbs/user/8686.xls (ca.130kB)
Mit dem Makro funktioniert das soweit nur bekomme ich einen viel zu großen Bereich in meiner Grafik angezeigt. Nur der graue Bereich soll als Gif gespeichert werden. Der Bereich im Makro ist meines Wissen auch richtig definiert. Am Anfang des Code steht noch ein Befehl für den Blattschutz aufheben und am Ende um diesem wieder einzuschalten.
Ich hoffe dass jemand meinen Fehler findet.
Gruß
Andy

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Probleme mit VBA (Grafik erstellen)
19.07.2004 15:59:43
Philipp
Hallo Andy
Der Code kommt mir bekannt vor... ;-)
Ich hab' den Code mehrmals ausgeführt. Bei mir ist es tatsächlich so, dass ca. bei jeder fünften Ausführung das Bild zu gross wird, also ein bisschen mehr als der graue Bereich als Bild exportiert wird. Die Ursache konnte ich so auf die Schnelle nicht erkennen.
Versuch mal diesen Code:

Sub Bild_erstellen()
ActiveWorkbook.Unprotect
Dim chtPicture As Chart
Dim strSheetName As String
Application.ScreenUpdating = False
strSheetName = ActiveSheet.Name
ActiveSheet.Range("A1").Select       'NEU
ActiveSheet.Range("A1:BC69").CopyPicture Appearance:=xlScreen, Format:=xlPicture
Set chtPicture = Charts.Add
chtPicture.Paste
Application.ScreenUpdating = True    'NEU
Application.ScreenUpdating = False   'NEU
chtPicture.Export ActiveWorkbook.Path & "\" & strSheetName & ".jpg"
Application.DisplayAlerts = False
chtPicture.Delete
Application.DisplayAlerts = True
Set chtPicture = Nothing
Application.ScreenUpdating = True
ActiveWorkbook.Protect Structure:=True, Windows:=False
End Sub

Die drei mit 'NEU' markierten Zeilen habe ich neu hinzugefügt. Bei neue Zeile "ActiveSheet.Range("A1").Select" stellt sicher, dass vor dem Kopieren des Zellbereiches als Bild eine Zelle selektiert ist (und nicht eine CheckBox oder dergleichen). Mit ScreenUpdating = True/False wird explizit eine Bildschirmaktualisierung ausgelöst, damit das mit Paste eingefügte Bild tatsächlich auf dem Diagrammblatt angezeigt wird.
Nach Einfügen dieser Codezeilen konnte ich keine Probleme mehr feststellen. Kann allerdings auch Zufall sein.
Gruss
Philipp
¦¦¦ xlam - Excel and more!
¦¦¦ http://195.186.84.74/index.htm
Anzeige
AW: Probleme mit VBA (Grafik erstellen)
19.07.2004 16:01:47
Nepumuk
Hallo Andy,
du exportierst das ganze Diagrammblatt. Das ist natürlich größer wie dein Bild. Du musst einen Diagrammbereich definieren der der Größe des Bildes entspricht. Das geht so:


Sub Bild_erstellen()
  ActiveWorkbook.Unprotect
  Dim myChartObject As ChartObject, int_with As Integer, int_hight As Integer
  Dim chtPicture As Chart
  Dim strSheetName As String
  Application.ScreenUpdating = False
  strSheetName = ActiveSheet.Name
  ActiveSheet.Range("A1:BC69").CopyPicture Appearance:=xlScreen, Format:=xlPicture
  int_with = Range("A1:BC69").Width - 36
  int_hight = Range("A1:BC69").Height - 30
  Set chtPicture = Charts.Add
  Set myChartObject = ActiveChart.ChartObjects.Add(0, 0, int_with, int_hight)
  With myChartObject.Chart
    .Paste
    .Export ActiveWorkbook.Path & "\" & strSheetName & ".jpg"
  End With
  Application.DisplayAlerts = False
  chtPicture.Delete
  Application.DisplayAlerts = True
  Set chtPicture = Nothing
  Application.ScreenUpdating = True
  ActiveWorkbook.Protect Structure:=True, Windows:=False
End Sub


Gruß
Nepumuk
Anzeige
Danke!
Andy
Zuerstmal danke Euch beiden.
Mit der überarbeiteten Version von Philipp bin ich leider nicht weiter gekommen, die Version hat bei mir keinen Unterschied bewirkt...vielleicht liegt es ja auch an meiner Excel 2000 Version, ich kann leider nicht prüfen, ob das Problem in den neueren Versionen nicht vorkommt. Ich habe jetzt mal den code von Nepumuk eingesetzt und ein bißchen an den folgenden zwei Zeilen rumexperimentiert:
int_with = Range("A1:BC69").Width - 36 ---&gt hier hab ich jetzt einen Wert -120
int_hight = Range("A1:BC69").Height - 30 ---&gt und hier -110
Das Ergebnis ist auf jeden Fall zufriedenstellend.
Gruß
Andy
PS: Danke nochmal für Eure Mühe
Anzeige

296 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige