Herbers Excel-Forum - das Archiv

Kartendiagramm per VBA erstellen und formatieren

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Frame Label
nach unten


Betrifft: Kartendiagramm per VBA erstellen und formatieren
von: Peter

Geschrieben am: 24.09.2019 17:42:24

Hi Zusammen,
ich bin noch recht neu im Umgang mit VBA und versuche noch viel über den Makro-Rekorder zu arbeiten und den Code dann anzupassen. Bisher hat das auch ganz gut geklappt allerdings bin ich nun bei folgenden Problem angekommen.
Ich möchte per Makro ein Kartendiagramm erstellen und formatieren. Das erstellen klappt auch allerdings gibt es bei der Formatierung ein paar Schritte die einfach nicht klappen. Auch mit Google-Recherche konnte ich leider keine passenden Lösungen finden und hoffe nun auf eure Hilfe.
Folgende Sachen klappen nicht:
- Der Hintergrund des Diagrammbereich soll durchsichtig sein
- der Rahmen des Diagrammbereich soll entfernt werden
Hier mein Code für das Diagramm:

Public Sub Kartendiagramm_BL()
Dim wks As Worksheet
Set wks = Worksheets("Diagramme")
wks.Range("N5:O21").Select
'da der Code: ActiveChart.SetSourceData Source:=Range("...")  _
nicht geht habe ich  es notgezwungen über Select gelöst. In den Bereich _
befinden sich in Spalte N die Bundesländer und in Spalte O dazugehörige Werte.
wks.Shapes.AddChart2(494, xlRegionMap).Name = "Kartendiagramm"
wks.Shapes("Kartendiagramm").Select
wks.ChartObjects("Kartendiagramm").Activate
ActiveChart.SetElement (msoElementChartTitleNone)
ActiveChart.Legend.IncludeInLayout = False
ActiveChart.FullSeriesCollection(1).ApplyDataLabels
Application.CutCopyMode = False
ActiveChart.FullSeriesCollection(1).Name = " "
With wks.Shapes("Kartendiagramm")
.Top = 370
.Left = 730
End With
ActiveChart.ChartArea.FOrmat.Fill.Visible = msoFalse
ActiveSheet.Shapes("Kartendiagramm").Fill.Visible = msoFalse
'soll den Hintergrund durchsichtig machen aber funktioniert hier nicht 
ActiveSheet.Shapes("Kartendiagramm").Line.Visible = msoFalse
'soll den Rahmen entfernen aber führt dazu, dass in den _
Formatierungseigenschaften unter Rahmen: "keine Linie" steht. Aber es wird _
trotzdem eine Linie noch angezeigt.
With ActiveChart.FullSeriesCollection(1)
.FOrmat.Line.ForeColor.RGB = RGB(0, 0, 0)
.SeriesColorMaxGradientStop.StopColor.RGB = 411284
.SeriesColorMaxGradientStop.StopColor.TintAndShade = 0
.SeriesColorMaxGradientStop.StopColor.Transparency = 0
.SeriesColorMinGradientStop.StopColor.RGB = RGB(255, 255, 255)
.SeriesColorMinGradientStop.StopColor.TintAndShade = 0
.SeriesColorMinGradientStop.StopColor.Transparency = 0
End With
End Sub
Hat jemand eine Idee wo der Fehler ist und wie man den Diagrammbereich für dieses Diagramm korrekt anspricht, um den Hintergrund und Rahmen zu entfernen?
Danke

Betrifft: AW: Kartendiagramm per VBA erstellen und formatieren
von: fcs

Geschrieben am: 25.09.2019 14:49:52
Hallo Peter,
merkwürdiger Weise funktioniert es unter VBA nur, wenn man mit der Transparenz arbeitet und diese für die Solid-Form auf 1 (=100%) setzt.
Zur einfacheren Programmierung hab ich eine Variable deklariert, die das Chart-Objekt repräsentiert.
LG
Franz
Public Sub Kartendiagramm_BL()
Dim wks As Worksheet
Dim objChart As Chart
Set wks = Worksheets("Diagramme")
wks.Range("N5:O21").Select
'da der Code: ActiveChart.SetSourceData Source:=Range("...") _
nicht geht habe ich  es notgezwungen über Select gelöst. In den Bereich _
befinden sich in Spalte N die Bundesländer und in Spalte O dazugehörige Werte.
wks.Shapes.AddChart2(494, xlRegionMap).Name = "Kartendiagramm"
Set objChart = wks.ChartObjects("Kartendiagramm").Chart
'    wks.ChartObjects("Kartendiagramm").Activate
objChart.SetElement (msoElementChartTitleNone)
objChart.Legend.IncludeInLayout = False
objChart.FullSeriesCollection(1).ApplyDataLabels
objChart.FullSeriesCollection(1).Name = " "
With wks.Shapes("Kartendiagramm")
.Top = 370
.Left = 730
End With
With objChart.ChartArea.Format.Fill 'soll den Hintergrund durchsichtig machen
.Solid
.ForeColor.RGB = VBA.RGB(255, 255, 255) 'weiß
.Transparency = 1
End With
With objChart.ChartArea.Format.Line 'soll den Rahmen entfernen
.Style = msoLineSingle
.Transparency = 1
End With
With objChart.FullSeriesCollection(1)
.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
.SeriesColorMaxGradientStop.StopColor.RGB = 411284
.SeriesColorMaxGradientStop.StopColor.TintAndShade = 0
.SeriesColorMaxGradientStop.StopColor.Transparency = 0
.SeriesColorMinGradientStop.StopColor.RGB = RGB(255, 255, 255)
.SeriesColorMinGradientStop.StopColor.TintAndShade = 0
.SeriesColorMinGradientStop.StopColor.Transparency = 0
End With
End Sub

Betrifft: AW: Kartendiagramm per VBA erstellen und formatieren
von: Peter
Geschrieben am: 26.09.2019 15:56:54
Hi Franz,
super vielen Dank für den Tipp.
Funktioniert wunderbar.
VG
Peter

Betrifft: AW: Kartendiagramm per VBA erstellen und formatieren
von: Peter
Geschrieben am: 26.09.2019 16:55:56
noch eine Frage: Ich habe nun versucht auf diese Weise die Schriftart der Legend auf weiß zu ändern.

With objChart.Legend.LegendEntries(1).FOrmat.TextFrame2.TextRange.Font
.Fill.ForeColor.RGB = VBA.RGB(255, 255, 255)
.Fill.Transparency = 0
.Fill.Solid
End With
Wenn ich in die Eigenschaften der Legende schaue, dann ist die Farbe auch geändert, aber im Diagramm ist das nicht sichtbar und die Farbe ist weiterhin eine andere. Muss da noch etwas hinzugefügt werden oder ist es erneut der falsche Weg?
Danke

Excel-Beispiele zum Thema "Kartendiagramm per VBA erstellen und formatieren"
Bei falscher Eingabe alten Wert wiederherstellen Automatisch Sicherungsdatei erstellen
Eigene Menüleiste mit Untermenüs erstellen Arbeitsmappen-History erstellen
Per VBA einen Verweis zu einer *.DLL erstellen Startansicht wiederherstellen
Aus AddIn neue Arbeitsmappe mit Code erstellen Benutzerdefinierte Funktion durch Code erstellen und löschen
Faxbestellung auf Grundlage einer Artikelliste erstellen Seitenumbruch ermitteln und Übertrag erstellen