AW: Diagrammgröße per VBA ändern
20.02.2010 13:46:05
fcs
Hallo Ben,
wenn man Diagramme unter Excel 2007 und älteren Versionen nutzen möchte, dann muss man in Excel 2007 auf den neuen "Schnickschnack" verzichten.
Du solltest Beverly's Tipp beherzigen und die Diagramme ein-/ausblenden. Das Makro müsste dann ggf. jeweils nur den Sichtbar-Status und den Datenbereich des Diagramms anpassen. Das funktioniert meines Wissens unter allen Versionen.
Wenn du die Diagramme immer neu erstellst, dann müssen bestimmte Anweisungen abhängig von der Excel-Version ausgeführt werden.
Schaut dann etwa wie folgt aus. Funktioniert z.B unter Excel 2007 und Excel 97.
Gruß
Franz
Sub Torte02()
Dim oChart As Chart, rngChart As Range, wks As Worksheet
Dim oShape As Shape, oSerie As Series
Set wks = Worksheets("Tabelle1")
With wks
'ggf. vorhandenes Diagramm löschen
If .ChartObjects.Count > 0 Then .ChartObjects(1).Delete
'Datenbereich des Diagramms
Set rngChart = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(0, 1))
If Val(Left(Application.Version, 2)) >= 12 Then
' Diagramm in Excel 2007 erstellen
'ggf. vorhandenes Diagramm löschen
Set oShape = .Shapes.AddChart
Set oChart = oShape.Chart
Else
' Diagramm in Excel 97-2003 erstellen
Charts.Add
ActiveChart.Location Where:=xlLocationAsObject, Name:=.Name
Set oChart = .ChartObjects(.ChartObjects.Count).Chart
Set oShape = .Shapes(.Shapes.Count)
End If
End With
'Diagramm-Typ
oChart.ChartType = xlPie
'Diagramm-Daten
oChart.SetSourceData Source:=Range("'" & wks.Name & "'!" & rngChart.Address), _
PlotBy:=xlColumns
'Position und Größe des Diagramms
With oShape
.Top = wks.Range("B4").Top
.Left = wks.Range("B4").Left
.Width = 500
.Height = 300
End With
With oChart
'Diagramm-/Achsentitel
.HasTitle = True
With .ChartTitle
.Text = "Test-Diagramm"
.Characters.Font.Size = 16
End With
'Zeichenfläche
If Val(Left(Application.Version, 2)) >= 12 Then
'Keine Anpassungen für Excel 2007
Else
.PlotArea.Fill.BackColor.SchemeColor = xlColorIndexNone
.PlotArea.Border.LineStyl = xlLineStyleNone
End If
End With
'Werte-Beschriftung
Set oSerie = oChart.SeriesCollection(1)
With oSerie
.ApplyDataLabels Type:=xlDataLabelsShowPercent
'Position der Beschriftung
If Val(Left(Application.Version, 2)) >= 12 Then
'Keine Anpassungen für Excel 2007
Else
.DataLabels.Position = xlLabelPositionInsideEnd
End If
With .DataLabels.Font
.Name = "Garamond"
.FontStyle = "Standard"
.Size = 16
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.Background = xlAutomatic
End With
End With
End Sub