Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Frame
BildScreenshot zu Frame Frame-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen

Kartendiagramm per VBA erstellen und formatieren


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


Beiträge aus dem Excel-Forum zum Thema "Kartendiagramm per VBA erstellen und formatieren"