Anzeige
Archiv - Navigation
1860to1864
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

Diagramm per VBA erstellen

Diagramm per VBA erstellen
17.12.2021 12:19:10
Frank
Hallo, ich muss mich leider nochmals hier an das Forum mit einem Problem melden.
Ich hatte vor kurzem hier bereits Hilfe von einem User erhalten, leider kann ich meinen alten Thread nicht mehr finden.
Ich hatte einen Code erhalten um ein Diagramm per VBA-Code zu erstellen, leider gibt es einen Fehler in dem Code und kann den Fehler nicht finden:

Dim LC As Long
Const TB As String = "TabStromEG"
Private Sub Chart_Activate()
Dim LR As Long
With Sheets(TB)
LR = .Cells(.Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte A
LC = .Cells(1, .Columns.Count).End(xlToLeft).Column 'letzte Spalte der Zeile 1
If .AutoFilterMode Then .AutoFilterMode = False ' Autofilter ausschalten
.Cells(2, LC + 2).Resize(LR - 1, 1).FormulaR1C1 = _
"=IF(AND(RC6="""",RC7=""""),""X"","""")"
' I2:   =WENN(UND($F2="";$G2="");"X";"")
.Cells(1, LC + 2) = "#TMP#"
.Columns(LC + 2).AutoFilter Field:=1, Criteria1:="=" 'Nur Leere anzeigen
Me.PlotVisibleOnly = True ' Ausgeblendete Zeilen weglassen
Me.FullSeriesCollection(1).Values = "=" & TB & "!$F$2:$F$" & LR
Me.FullSeriesCollection(2).Values = "=" & TB & "!$G$2:$G$" & LR
End With
End Sub
Private Sub Chart_Deactivate()
Dim i As Integer, Spalte As Integer
With Sheets(TB)
For i = 1 To WorksheetFunction.CountIf(.Rows(1), "#Tmp#")
Spalte = WorksheetFunction.Match("#Tmp#", .Rows(1), 0)
.Columns(Spalte).Delete
Next
End With
Me.PlotVisibleOnly = False 'Standard
End Sub
Es scheitert an den zwei Zeilen aus dem vorherigen Code:

Me.FullSeriesCollection(1).Values = "=" & TB & "!$F$2:$F$" & LR
Me.FullSeriesCollection(2).Values = "=" & TB & "!$G$2:$G$" & LR
Wo liegt der Fehler?
Gruß Frank.

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagramm per VBA erstellen
17.12.2021 12:34:09
Beverly
Hi Frank,
der Fehler tritt auf, wenn das Diagramm keine Datenreihen hat. Du müsstest also erst prüfen, ob sie vorhanden sind - wenn nicht, dann zuerst 2 hinzufügen und anschließend den Wertebereich zuweisen.
Übrigens: den Wertebereich kann man auch so zuweisen:

Me.FullSeriesCollection(1).Values = Worksheets(TB).Range("$F$2:$F$" & LR)
Me.FullSeriesCollection(2).Values = Worksheets(TB).Range("$G$2:$G$" & LR)
Bis später
Karin

AW: Diagramm per VBA erstellen
17.12.2021 12:49:07
Frank
Vielen Dank, Karin.
Der Fehler tritt aber auch auf wenn Werte in der Tabelle vorhanden sind.
Ich habe mal zum Test auf ein anderes Diagramm verwiesen, in welchem die Wertebereiche zuvor manuell erstellt wurden - dort funktioniert der Code.
Aber eigentlich muss ich doch im Diagramm keine Datenreihen manuell definieren, da diese mit dem Code gegeben sind, oder verstehe ich das falsch?
Die weitere Frage wie ich die Werte im Diagramm mit anzeigen kann und in der X-Achse soll das Datum aus A2:A stehen, bisher sehe ich nur die Balken als Grafik.
LG Frank
Anzeige
AW: Diagramm per VBA erstellen
17.12.2021 14:42:29
Beverly
Hi Frank,
1. mit deinem Code erstellst du im Diagramm keine Datenreihen, sondern willst 2 bereits vorhandenen Datenreihen den Wertebereich zuweisen - und das geht nicht. Deshalb musst du erst prüfen, ob das Diagramm bereits Datenreihen hat - wenn nicht, musst du erst welche erstellen.
2. damit die Horizontalachse die richtige Beschriftung bekommt, musst du diese ebenfalls zuweisen.

If Me.FullSeriesCollection.Count = 0 Then
Me.SeriesCollection.NewSeries    '1.  neue Datenreihe erstellen
Me.SeriesCollection.NewSeries    '2.  neue Datenreihe erstellen
End If
Me.FullSeriesCollection(1).Values = Worksheets(TB).Range("$F$2:$F$" & LR)     'Wertebereich der 1. Datenreihe zuweisen
Me.FullSeriesCollection(1).XValues = Worksheets(TB).Range("$A$2:$A$" & LR)   'Achsenbeschriftungsbereich zuweisen
Me.FullSeriesCollection(2).Values = Worksheets(TB).Range("$G$2:$G$" & LR)    'Wertebereich der 2. Datenreihe zuweisen
Bei einem Rubrikendiagramm ist es ausreichend, wenn man den Achsenbeschriftungsbereich nur einer Datenreihe zuweist, da alle weiteren Datenreihen ausschließlich denselben Bereich nutzen.
Bis später
Karin

Anzeige
AW: Diagramm per VBA erstellen
17.12.2021 15:35:59
Frank
Vielen Dank Karin für die Erklärung!
Ich habe in der Tabelle1 B11 einen Wert für die zu anzeigende letzte Datensätze stehen (z.B. "3").
Wie kann dieses noch verknüpft werden, dass wenn in dieser Zelle eine 3 steht auch nur die letzten drei Datensätze angezeigt werden und nicht alle?
Zudem habe ich ein Textfeld im Diagramm, in diesem soll der Inhalt aus Tabelle1 B12 eingetragen werden, wie muss ich hier vorgehen?
LG Frank
AW: Diagramm per VBA erstellen
17.12.2021 15:55:03
Beverly
Hi Frank,
zu Frage 1:

Private Sub Chart_Activate()
Dim LR As Long
Dim lngAnzahl As Long
lngAnzahl = Worksheets("Tabelle1").Range("B11") - 1
With Sheets(TB)
LR = .Cells(.Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte A
LC = .Cells(1, .Columns.Count).End(xlToLeft).Column 'letzte Spalte der Zeile 1
If .AutoFilterMode Then .AutoFilterMode = False ' Autofilter ausschalten
.Cells(2, LC + 2).Resize(LR - 1, 1).FormulaR1C1 = _
"=IF(AND(RC6="""",RC7=""""),""X"","""")"
' I2:   =WENN(UND($F2="";$G2="");"X";"")
.Cells(1, LC + 2) = "#TMP#"
.Columns(LC + 2).AutoFilter Field:=1, Criteria1:="=" 'Nur Leere anzeigen
Me.PlotVisibleOnly = True ' Ausgeblendete Zeilen weglassen
If Me.FullSeriesCollection.Count = 0 Then
Me.SeriesCollection.NewSeries
Me.SeriesCollection.NewSeries
End If
Me.FullSeriesCollection(1).Values = Worksheets(TB).Range("$F$" & LR - lngAnzahl & ":$F$" & LR)
Me.FullSeriesCollection(2).Values = Worksheets(TB).Range("$G$" & LR - lngAnzahl & ":$G$" & LR)
End With
End Sub
Zu Frage 2: man kann das Textfeld mit der gewünschten Zelle verknüpfen, dann wird der Zellinhalt angezeigt. Markiere das Textfeld im Diagramm, setze den Cursor in die Bearbeitungsleiste, schreibe "=" (ohne Anführungszeichen), wechsle in Tabelle1, setze den Cursor in Zelle B12 und drücke Enter.
Bis später
Karin

Anzeige
AW: Diagramm per VBA erstellen
17.12.2021 16:26:59
Frank
Hallo Karin, vielen Dank für den zu Verfügung gestellten Code.
Leider stimmt die Anzahl der anzuzeigenden Variablen noch nicht, d.h. es werden immer eine falsche Anzahl von Datensätze angezeigt - zudem auch nicht die letzten sondern die ersten Datensätze. Ein Muster kann ich leider noch nicht erkennen um einen Fehler zu entdecken...
Antwort zu Frage 2 kannte ich bereits, ich dachte nur man könne das Textfeld auch per VBA füllen
LG Frank
AW: Diagramm per VBA erstellen
17.12.2021 16:34:11
Beverly
Hi Frank,
dann musst du schon mal deine Mappe zur Verfügung stellen - in meiner Mappe wird nämlich alles wie gewünscht dargestellt.
Bis später
Karin

Anzeige
AW: Diagramm per VBA erstellen
17.12.2021 18:03:23
Frank
Hallo Karin, ich denke das dein Code funktioniert kann es aber nicht zu 100% sagen.
Der Grund warum ist da die Diagrammansicht dermaßen zerspult wird wenn ich das Diagramm aufrufe.
U.a. werden die Säulen plötzlich gruppiert so das eine Säule hinter der ersten versteckt wird, daher dachte ich das die Anzahl der anzuzeigenden Datensätze nicht stimmt.
Wenn ich das Diagramm manuell wieder herrichte und das Diagramm erneut aufrufe ist wieder alles verstellt.
LG Frank.
AW: Diagramm per VBA erstellen
17.12.2021 18:18:21
Beverly
Hi Frank,
ich kann nur wiederholen, was ich in meinem vorhergehenden Beitrag geschrieben habe - stelle deine Mappe zur Verfügung.
Bis später
Karin

Anzeige
AW: Diagramm per VBA erstellen
17.12.2021 22:10:40
Frank
Hallo Karin, ich denke ich kann nun den Fehler reproduzieren:

Me.FullSeriesCollection(1).Values = Worksheets(TB).Range("$F$" & LR - lngAnzahl & ":$F$" & LR)
Me.FullSeriesCollection(1).XValues = Worksheets(TB).Range("$A$" & LR - lngAnzahl & ":$A$" & LR)
Me.FullSeriesCollection(2).Values = Worksheets(TB).Range("$G$" & LR - lngAnzahl & ":$G$" & LR)
Bei der Definition von IngAnzahl werden die ausgeblendeten Zeilen nicht berücksichtigt, welche im Code mit einem X gekennzeichnet werden.
D.h. wenn dazwischen 2 leere Zeilen kommen wird das Diagramm um zwei Datensätze reduziert angezeigt.
Wie kann hier Abhilfe geschaffen werden?
LG Frank.
Anzeige
AW: Diagramm per VBA erstellen
18.12.2021 00:04:50
Beverly
Hi Frank,
wenn du einen Rechtsklick auf das Diagramm machst und auf "Datenreihen-Diagrammtyp ändern" gehst wird angezeigt, dass bei beiden Datenreihen der Diagrammtyp "Gestapelte Säulen (100%)" steht - es werden also keine Säulen verdeckt sondern alle richtig dargestellt. Das Problem ist nur, dass du die Daten filterst und deshalb die Anzahl nicht richtig berechnet werden kann. Aber die Anzahl brauchst du überhaupt nicht, denn durch das Filtern werden diese Säulen automatisch ausgeblendet, da du diese Einstellung im Diagramm durch die Codezeile Me.PlotVisibleOnly = True vornimmst. Du kannst also den kompletten Bereich als Wertebereich zuweisen.

Private Sub Chart_Activate()
Dim LR As Long
With Sheets(TB)
LR = .Cells(.Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte A
LC = .Cells(1, .Columns.Count).End(xlToLeft).Column 'letzte Spalte der Zeile 1
If .AutoFilterMode Then .AutoFilterMode = False ' Autofilter ausschalten
.Cells(2, LC + 2).Resize(LR - 1, 1).FormulaR1C1 = "=IF(AND(RC6="""",RC7=""""),""X"","""")"
.Cells(1, LC + 2) = "#TMP#"
.Columns(LC + 2).AutoFilter Field:=1, Criteria1:="=" 'Nur Leere anzeigen
Me.PlotVisibleOnly = True ' Ausgeblendete Zeilen weglassen
If Me.FullSeriesCollection.Count = 0 Then
Me.SeriesCollection.NewSeries
Me.SeriesCollection.NewSeries
End If
Me.FullSeriesCollection(1).Values = Worksheets(TB).Range("$F$2:$F$" & LR)
Me.FullSeriesCollection(1).XValues = Worksheets(TB).Range("$A$2:$A$" & LR)
Me.FullSeriesCollection(2).Values = Worksheets(TB).Range("$G$2:$G$" & LR)
End With
With ActiveChart
'Diagramm formatieren
With .FullSeriesCollection(1)
.ApplyDataLabels
With .DataLabels
.Position = xlLabelPositionInsideBase
With .Format
With .Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent2
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0.6000000238
.Transparency = 0
.Solid
End With
With .TextFrame2.TextRange.Font
.BaselineOffset = 0
.Fill.Visible = msoTrue
.Fill.ForeColor.RGB = RGB(0, 0, 0)
.Fill.Transparency = 0
.Fill.Solid
.Size = 10
End With
With .Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 176, 80)
.Transparency = 0
.Weight = 1.5
End With
End With
End With
End With
With .FullSeriesCollection(2)
.ApplyDataLabels
With .DataLabels
.Position = xlLabelPositionInsideBase
With .Format
With .Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent2
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0.6000000238
.Transparency = 0
.Solid
End With
With .TextFrame2.TextRange.Font
.BaselineOffset = 0
.Fill.Visible = msoTrue
.Fill.ForeColor.RGB = RGB(0, 0, 0)
.Fill.Transparency = 0
.Fill.Solid
.Size = 10
End With
With .Line
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 80)
.Transparency = 0
.Weight = 1.5
End With
End With
End With
End With
End With
End Sub
Ich habe aus deinem Code außerdem jegliches Select entfernt - ist unnötig wenn man mit With-Anweisungen arbeitet.
Bis später
Karin

Anzeige
AW: Diagramm per VBA erstellen
18.12.2021 08:58:41
Frank
Hallo Karin, vielen Dank für deine Erklärung!

Aber die Anzahl brauchst du überhaupt nicht, denn durch das Filtern werden diese Säulen automatisch ausgeblendet
Ich möchte aber die Anzahl der anzuzeigenden Säulen selber bestimmen bzw. eingrenzen können.
Ich möchte z.B. bei 300 Datensätzen sagen können das er mir du die letzten 10 Datensätze im Diagramm anzeigen soll.
Deshalb benötige ich schon die vorherige Formel mit "Anzahl" = Zelle B11, allerdings darf er mir dann nicht die leeren Zeilen dazurechnen sondern soll nur die angezeigten Datensätze in Betracht ziehen - ist das irgendwie möglich (was mir sehr wichtig wäre)?
LG Frank.
Anzeige
AW: Diagramm per VBA erstellen
18.12.2021 10:27:18
Beverly
Hi Frank,
sorry, hatte ich nicht mehr dran gedacht - aber ich antworte in vielen Threads und kann mir nicht den Inhalt aller Beiträge merken. ;-)

Private Sub Chart_Activate()
Dim LR As Long
Dim lngAnzahl As Long
Dim lngLauf As Long
Dim lngZeile As Long
Dim blnAlle As Boolean
lngAnzahl = Worksheets("Einstellungen").Range("B11")
With Sheets(TB)
LR = .Cells(.Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte A
LC = .Cells(1, .Columns.Count).End(xlToLeft).Column 'letzte Spalte der Zeile 1
If .AutoFilterMode Then .AutoFilterMode = False ' Autofilter ausschalten
.Cells(2, LC + 2).Resize(LR - 1, 1).FormulaR1C1 = "=IF(AND(RC6="""",RC7=""""),""X"","""")"
.Cells(1, LC + 2) = "#TMP#"
.Columns(LC + 2).AutoFilter Field:=1, Criteria1:="=" 'Nur Leere anzeigen
If lngAnzahl > .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count + 1 Then
lngZeile = 2
blnAlle = True
Else
For lngZeile = LR To 2 Step -1
If .Rows(lngZeile).RowHeight > 0 Then lngLauf = lngLauf + 1
If lngLauf = lngAnzahl Then Exit For
Next lngZeile
End If
Me.PlotVisibleOnly = True ' Ausgeblendete Zeilen weglassen
If Me.FullSeriesCollection.Count = 0 Then
Me.SeriesCollection.NewSeries
Me.SeriesCollection.NewSeries
End If
Me.FullSeriesCollection(1).Values = Worksheets(TB).Range("$F$" & lngZeile & ":$F$" & LR) '.SpecialCells(xlCellTypeVisible)
Me.FullSeriesCollection(1).XValues = Worksheets(TB).Range("$A$" & lngZeile & ":$A$" & LR) '.SpecialCells(xlCellTypeVisible)
Me.FullSeriesCollection(2).Values = Worksheets(TB).Range("$G$" & lngZeile & ":$G$" & LR) '.SpecialCells(xlCellTypeVisible)
End With
With Me
'Ansichtseinstellungen vom Diagramm wiederherstellen
With .FullSeriesCollection(1)
.ApplyDataLabels
With .DataLabels
.Position = xlLabelPositionInsideBase
With .Format
With .Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent2
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0.6000000238
.Transparency = 0
.Solid
End With
With .TextFrame2.TextRange.Font
.BaselineOffset = 0
.Fill.Visible = msoTrue
.Fill.ForeColor.RGB = RGB(0, 0, 0)
.Fill.Transparency = 0
.Fill.Solid
.Size = 10
End With
With .Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 176, 80)
.Transparency = 0
.Weight = 1.5
End With
End With
End With
End With
With .FullSeriesCollection(2)
.ApplyDataLabels
With .DataLabels
.Position = xlLabelPositionInsideBase
With .Format
With .Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent2
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0.6000000238
.Transparency = 0
.Solid
End With
With .TextFrame2.TextRange.Font
.BaselineOffset = 0
.Fill.Visible = msoTrue
.Fill.ForeColor.RGB = RGB(0, 0, 0)
.Fill.Transparency = 0
.Fill.Solid
.Size = 10
End With
With .Line
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 80)
.Transparency = 0
.Weight = 1.5
End With
End With
End With
End With
End With
Me.Refresh
If blnAlle Then MsgBox "Die Anzahl der Datensätze ist größer" & vbLf & _
"als die Anzahl der gefilterten Daten." & vbLf & _
"Es werden alle gefilterten Daten angezeigt."
End Sub
Bis später
Karin

Anzeige
AW: Diagramm per VBA erstellen
18.12.2021 10:41:38
Frank
Hallo Karin, vielen vielen Dank!!
Du hast meinen Tag gerettet - ohne deine Hilfe hätte ich es wohl so nicht hinbekommen!
LG Frank
AW: Diagramm per VBA erstellen
19.12.2021 11:45:29
Frank
Hallo Karin, eine Frage hat sich doch noch ergeben:
Wenn ich die Anzahl der Datensätze in der TextBox z.B. von 20 auf 5 verringere während das Diagramm geöffnet ist wird das Diagramm erst aktualisiert wenn ein anderes Blatt geöffnet und anschließend das Diagramm erneut geöffnet wird.
Gibt es eine Lösung, damit sich das geöffnete Diagramm sofort aktualisiert?
LG Frank
AW: Diagramm per VBA erstellen
19.12.2021 12:33:42
Beverly
Hi Frank,
welche TextBox meinst du - das leere Shape in der linken oberen Ecke im Diagramm? Was hat das mit der Anzahl zu tun? Der Code nimmt doch die Anzahl aus Zelle B11 in Blatt "Einstellungen" und nicht aus dem Shape - zumindest hat in deiner bereitgestellten Mappe dieses Shape absolut nichts damit zu tun und eine andere "TextBox" finde ich da nicht.
Bis später
Karin

AW: Diagramm per VBA erstellen
19.12.2021 12:39:00
Frank
Hallo Karin,
der Wert aus Zelle B11 (welcher auch im Diagramm im Textfeld angezeigt wird) wird im Formular über eine TextBox verändert.
In dieser trage ich dann die gewünschte Anzahl der Datensätze ein und verändere so meine Darstellung.
Funktioniert auch alles soweit ganz gut, nur das ich bisher bei dem geöffneten Diagramm nach einer Änderung der TextBox zuerst eine andere Tabelle öffnen muß und anschließend wieder das Diagramm damit sich dieses aktualisiert.
Das Textfeld im Diagramm aktualisiert sich merkwürdigerweise gleich wenn sich das Diagramm initialisiert, nur die Ansicht des Diagramm nicht...
LG Frank
AW: Diagramm per VBA erstellen
19.12.2021 14:17:17
Beverly
Hi Frank,
wie bereits geschrieben: in der Mappe die du bereitgestellt hattest, gibt es nur ein leeres Shape im Diagramm, in dem absolut nichts angezeigt wird und kein Formular mit einem Textfeld. Wenn ich etwas anpassen soll, musst du schon die richtige Mappe hochladen - ich kann ja nicht einfach auf Teufel komm raus irgendetwas programmieren, wenn ich nicht weiß, um was es sich konkret handelt.
Bis später
Karin

AW: Diagramm per VBA erstellen
19.12.2021 17:09:54
Beverly
Hi Frank,
es wäre schön gewesen, wenn du den Code temporär so geändert hättest, dass Excel beim Start nicht gleich ausgeblendet wird oder zumindest darauf hingewiesen hättest.
Du musst den Code aus dem Chart_Activate-Ereignis in ein Standardmodul auslagern, sodass er von mehreren Positionen aus aufgerufen werden kann - also vom Activate-Ereignis aus und von den Button in deiner UserForm. Dazu nusst du im Code natürlich Me ersetzen durch Charts("DiaStromEG").
Außerdem würde ich an deiner Stelle beim Start direkt das Diagramm anzeigen, indem der ToggleButton2 auf True gesetzt wird.
https://www.herber.de/bbs/user/149904.xlsm
Noch ein Hinweis: weshalb lädst du die Mappe nicht gleich im Format xlsm hoch? Dann erspart man sich das Umbenennen...
Bis später
Karin

AW: Diagramm per VBA erstellen
19.12.2021 19:48:22
Frank
Hallo Karin, vielen Dank für deine Mühe und deine Erklärungen!
Eine kurze Frage noch:
Wenn die Daten aus der Tabelle gelöscht werden und neue Daten angelegt werden stimmt das Aussehen der Balkenfüllung nicht mehr.

'Diagramm formatieren
With .FullSeriesCollection(1)
.ApplyDataLabels
With .DataLabels
.Position = xlLabelPositionInsideBase
With .Format
With .Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent2
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0.6000000238
.Transparency = 0
.Solid
End With
Eigentlich müsste das Format der Füllung einfarbig sein mit einem bestimmten Farbton.
Allerdings werden die Balken nach dem Löschen und erneutes anlegen von Datensätze in einem anderen Farbton angezeigt, der Modus steht dann auf Automatisch und nicht mehr einfarbig: Welche Formatierung fehlt dann im Formatierungscode (der Makrorecorder hat mir auch nichts anderes aufgezeigt)?
LG Frank
AW: Diagramm per VBA erstellen
19.12.2021 20:07:37
Beverly
Hi Frank,
das kann ich leider nicht nachvollziehen. Ich habe jetzt mal die Daten gelöscht und neue Daten in die Spalten A, F und G eingetragen und anschließend das Diagramm aktiviert - die Säulen (nicht Balken !!!) haben nachwievor dieselbe Farbe.
Bis später
Karin

AW: Diagramm per VBA erstellen
19.12.2021 20:11:48
Frank
Hallo Karin, das liegt daran das die Füllung der Säulen noch nie formatiert wurden (habe ich erst gerade gesehen).
Den ersten Block habe ich im Code ergänzt und funktioniert (Ist die Darstellung, Einrückungen des Codes so richtig?)

'Diagramm formatieren
With .FullSeriesCollection(1)
With .Format.Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent2
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0.6000000238
.Transparency = 0
.Solid
End With
.ApplyDataLabels
With .DataLabels
.Position = xlLabelPositionInsideBase
With .Format
With .Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent2
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0.6000000238
.Transparency = 0
.Solid
End With
With .TextFrame2.TextRange.Font
.BaselineOffset = 0
.Fill.Visible = msoTrue
.Fill.ForeColor.RGB = RGB(0, 0, 0)
.Fill.Transparency = 0
.Fill.Solid
.Size = 10
End With
With .Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 176, 80)
.Transparency = 0
.Weight = 1.5
End With
End With
End With
End With

AW: Diagramm per VBA erstellen
19.12.2021 20:30:00
Beverly
Hi Frank,
der Code ist 1 Tab zu weit eingerückt - also With und End With müssten an der selben Position wie die Zeile .ApplyDataLabels beginnen.
Die jeweils nächste innere Einrückung versetzt man immer um 1 Tab nach rechts, sodass man - wenn man den Cursor genau vor das W von With setzt und mit den Pfeiltasten nach unten geht - genau vor dem E von End With zu stehen kommt. Auf diese Weise kann man gut prüfen, ob man alle geöffneten Anweisungen auch mit dem richtigen Befehl wieder geschlossen hat.
Bis später
Karin

AW: Diagramm per VBA erstellen
19.12.2021 20:46:54
Frank
Vielen Dank für die Unterstützung und die klasse Erklärungen!!
LG Frank
AW: Diagramm per VBA erstellen
19.12.2021 16:32:18
Frank
Hallo Karin,
ich habe mir inzwischen als Laie folgendermaßen beholfen, das ich zuerst überprüfe ob das Diagramm aktiv ist:
a) Wenn Ja dann setzte die Tabelle auf aktiv, setzte den neuen Wert und setze wieder das Diagramm aktiv
b) Wenn Nein dann setzte den neuen Wert
Würde so funktionieren, ich weiß aber nicht ob es eine bessere Idee gibt.
LG Frank

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige