Anzeige
Archiv - Navigation
1348to1352
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

VBA-Problem bei Diagrammerstellung und -anpassung

VBA-Problem bei Diagrammerstellung und -anpassung
20.02.2014 18:52:40
n8liner
Hallo
Mit Excel VBA habe ich ein "kleines" Problem. Per Makro will ich ein Kreisdiagramm in einer Zelle erstellen und automatisch an die Größe der Zelle anpassen. Nun das Problem:
Wenn ich das Makro im Debug-Modus in Einzelschritten durchlaufe, wird dass Diagramm richtig gezeichnet und positioniert.
Starte ich das Makro normal, so werden die Größen und die Position nicht angepasst.
Was läuft da schief?
Hier das Makro:
Sub Tortendiagramm()
' Tortendiagramm erstellen
Dim breite As Double            'breite der Zielzelle (in points )
Dim hoehe As Double             'höhe der Zielzelle (in points)
Dim pos_links As Double         'Zellposition Zielzelle links (in Points) - basis ist zelle 1,  _
spalte 1
Dim pos_oben As Double          'Zellpostion Zielzelle oben (in points ) - basis ist zelle 1,  _
spalte 1
Dim chartname                   'Chartname
Dim co As ChartObject           ' für Chart-Bearbeitung benötigt
Dim wertbereich As String       'Bereich, der Diagrammwerte enthält
Dim ziel_sp As Integer          'spaltennr. der Zeller, in der das diagramm erstellt werden  _
soll
Dim ziel_zl As Integer          'Zeilennr. der Zelle, in der das diagramm erstellt werden soll
Dim xl_version As Integer       'excel-Version
ziel_sp = 3                     'Zielspalte für das Diagramm
ziel_zl = 3                     'Zielzeile für das Diagramm
xl_version = 2013
wertbereich = "B1:B2"            'Werte für Kreisdiagramm
If Application.ActiveSheet.ChartObjects.Count > 0 Then Application.ActiveSheet.ChartObjects. _
Delete
' Zellgröße und Zell-Position bestimmen (Pixel)
pos_links = Cells(ziel_zl, ziel_sp).Left + 1
pos_oben = Cells(ziel_zl, ziel_sp).Top + 1
breite = Cells(ziel_zl, ziel_sp).Width - 2
hoehe = Cells(ziel_zl, ziel_sp).Height - 2
'Tortendiagramm erstellen (Befehle abhängig von Excel-Version; Annahme 2010 oder 2013
If xl_version = 2013 Then
ActiveSheet.Shapes.AddChart2(251, xlPie, pos_links, pos_oben, breite, hoehe).Select
Else          'wenn nicht 2013 dann 2010 oder 2007
ActiveSheet.Shapes.AddChart2(xlPie, pos_links, pos_oben, breite, hoehe).Select
End If
ActiveChart.SetSourceData Source:=Range(wertbereich)
'Namen des Charts
chartname = Mid(ActiveChart.Name, Len(ActiveSheet.Name) + 2)
'shape ohne Rahmen
ActiveSheet.Shapes(chartname).Line.Visible = msoFalse
' neues Diagram aktivieren
ActiveSheet.ChartObjects(chartname).Activate
'Chart ohne Legende und Titel
With ActiveChart
If .HasTitle Then .ChartTitle.Delete
If .HasLegend Then .Legend.Delete
End With
'Diagramm auf max. mögliche Zell-Größe und in der Zelle zentrieren
    With ActiveChart.PlotArea
.Top = -10
.Height = hoehe - 4
.Width = hoehe - 4
.Left = (.Parent.ChartArea.Width - .Width) / 2
.Top = (.Height - hoehe + 0.5) / 2
End With
ende:
' Diagrammnamen in Zelle eintragen
Cells(ziel_zl + 2, ziel_sp).Value = chartname
End Sub
Datei: https://www.herber.de/bbs/user/89372.xlsm

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Problem bei Diagrammerstellung und -anpassung
20.02.2014 19:21:22
Beverly
Hi,
Sub Tortendiagramm()
' Tortendiagramm erstellen
Dim breite As Double            'breite der Zielzelle (in points )
Dim hoehe As Double             'höhe der Zielzelle (in points)
Dim pos_links As Double         'Zellposition Zielzelle links (in Points) - basis ist zelle  _
1, spalte 1
Dim pos_oben As Double          'Zellpostion Zielzelle oben (in points ) - basis ist zelle 1, _
spalte 1
Dim wertbereich As String       'Bereich, der Diagrammwerte enthält
Dim ziel_sp As Integer          'spaltennr. der Zeller, in der das diagramm erstellt werden  _
soll
Dim ziel_zl As Integer          'Zeilennr. der Zelle, in der das diagramm erstellt werden  _
soll
ziel_sp = 3                     'Zielspalte für das Diagramm
ziel_zl = 3                     'Zielzeile für das Diagramm
wertbereich = "B1:B2"            'Werte für Kreisdiagramm
If Application.ActiveSheet.ChartObjects.Count > 0 Then Application.ActiveSheet.ChartObjects. _
Delete
' Zellgröße und Zell-Position bestimmen (Pixel)
pos_links = Cells(ziel_zl, ziel_sp).Left + 1
pos_oben = Cells(ziel_zl, ziel_sp).Top + 1
breite = Cells(ziel_zl, ziel_sp).Width - 2
hoehe = Cells(ziel_zl, ziel_sp).Height - 2
'Tortendiagramm erstellen (Befehle abhängig von Excel-Version; Annahme 2010 oder 2013
Dim chrDia As Shape
If Val(Application.Version) > 14 Then
Set chrDia = ActiveSheet.Shapes.AddChart2(251, xlPie, 0, 0, 0, 0)
Else          'wenn nicht 2013 dann 2010 oder 2007
Set chrDia = ActiveSheet.Shapes.AddChart(0, 0, 0, 0)
End If
With chrDia
.Left = pos_links
.Top = pos_oben
.Width = breite
.Height = hoehe
.Line.Visible = msoFalse
End With
With chrDia.Chart
.ChartType = xlPie
.SetSourceData Source:=Range(wertbereich), PlotBy:=xlColumns
If .HasTitle Then .ChartTitle.Delete
If .HasLegend Then .Legend.Delete
With .PlotArea
.Top = -10             '.Top - .Parent.ChartArea.Top
.Height = hoehe - 4
.Width = hoehe - 4
.Left = (.Parent.ChartArea.Width - .Width) / 2
.Top = (.Height - hoehe + 0.5) / 2
End With
End With
' Diagrammnamen in Zelle eintragen
Cells(ziel_zl + 2, ziel_sp).Value = chrDia.Name
End Sub
Excelversion 2013 kann ich leider nicht testen, nur 2010.


Anzeige
AW: VBA-Problem bei Diagrammerstellung und -anpassung
21.02.2014 09:17:59
n8liner
Hi Karin,
danke für die prompte Antwort. Aber leider tritt bei mir das gleiche Phänomen auf. Im Debugmodus / Einzelschritt funktioniert Deine Version. Das Diagramm wird an die Zellgröße angepasst und positioniert. Wenn ich es dann unterbrechungsfrei ausführe, dann wird die Größe und Position nicht richtig angepasst.

AW: VBA-Problem bei Diagrammerstellung und -anpassung
21.02.2014 09:28:52
Beverly
Hi,
welche Bit-Version von Excel verwendest du?
Vielleicht hilft, wenn du vor die letzte End With-Zeile noch .Refresh setzt.


Anzeige
AW: VBA-Problem bei Diagrammerstellung und -anpassung
24.02.2014 09:26:59
n8liner
Hi,
.refresh hat keine Auswirkung.
Ich verwende die 32-Bit Version

AW: VBA-Problem bei Diagrammerstellung und -anpassung
21.02.2014 09:21:41
n8liner
Hi Karin,
danke für die prompte Antwort. Aber leider tritt bei mir das gleiche Phänomen auf. Im Debugmodus / Einzelschritt funktioniert Deine Version. Das Diagramm wird an die Zellgröße angepasst und positioniert. Wenn ich es dann unterbrechungsfrei ausführe, dann wird die Größe und Position nicht richtig angepasst.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige