Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1820to1824
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: Diagrammbereich erweitern

VBA: Diagrammbereich erweitern
20.03.2021 23:06:16
Max
Hallo liebe Excel- und VBA-Experten,
ich möchte mittels VBA den Diagrammbereich meines Diagramms angeben.
Die funktionierende Makro-Aufzeichnung ergibt:
Sub DiaErweit_MakroAufz()
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.SetSourceData Source:=Range( _
"Tabelle1!$B$3:$B$17,Tabelle1!$AK$3:$AW$17")
End Sub
Ich möchte nun ohne Angabe eines Sheetnamens oder Diagrammnamens den gleichen Bereich angeben:
Sub DiaErweit_wksTCells()
Dim wksT As Worksheet
Set wksT = Worksheets(1)
With wksT.ChartObjects(1).Chart
.SetSourceData Source:=Range( _
wksT.Range(wksT.Cells(2, 3), wksT.Cells(2, 17)), _
wksT.Range(wksT.Cells(37, 3), wksT.Cells(49, 17))), PlotBy:=xlRows
End With
End Sub
Allerdings wird damit ein ganz falscher Diagrammbereich angewählt, was ich mir nun seit Stunden nicht erklären kann.
Hier die Tabelle:
https://www.herber.de/bbs/user/144979.xlsm
Viele Grüße und vielen Dank im Voraus.
Max

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Diagrammbereich erweitern
20.03.2021 23:19:45
ralf_b
Zeile und Spalte vertauscht und der Bereich ist ein Text

.SetSourceData Source:=Range(wksT.Range(wksT.Cells(3, 2), wksT.Cells(17, 2)).Address & "," & _
wksT.Range(wksT.Cells(3, "AK"), wksT.Cells(17, "AW")).Address), PlotBy:=xlRows


AW: VBA: Diagrammbereich erweitern
20.03.2021 23:57:29
Max
Hallo Ralf,
damit hast du meinen Abend gerettet! Auf den Fehler wäre ich sehr lange nicht selber gestoßen.
Dass du den Spalteneintrag mit Buchstaben ersetzt hast, hat es auch nochmal sehr gut deutlich gemacht und auch dein Texthinweis war sehr gut.
Vielen Dank und einen schönen Abend wünsche ich! :)
Viele Grüße
Max

Anzeige
gern, danke für die rückmeldung owt
21.03.2021 00:07:31
ralf_b

AW: VBA: Diagrammbereich erweitern
21.03.2021 07:58:57
Beverly
Hi Max,
das hat nichts damit zu tun dass Ralf den Spaltenbuchstaben anstelle der Spaltennummer verwendet hat sondern 1. mit deinem Vertauschen von Spalten- und Zeilennummer und 2. damit, dass es sich um einen nicht zusammenhängenden Zellbereich handelt. In dem Fall muss man mittels Union-Befehl den Bereich erst zusammensetzen - z.B. so:
Sub DiaErweit_wksTCells()
Dim wksT As Worksheet
Dim rngBereich As Range
Set wksT = Worksheets(1)
With wksT
Set rngBereich = Union(.Range(.Cells(3, 2), .Cells(17, 2)), _
.Range(.Cells(3, 37), .Cells(17, 49))) '

Beverly's Excel - Inn

Anzeige
AW: VBA: Diagrammbereich erweitern
21.03.2021 12:17:54
Max
Hallo Beverly,
danke auch für deine Antwort.
zu 1.: Ja, das stimmt. Es hat aber meinen Fehler nochmal gut veranschaulicht.
zu 2.: Aber es ist nur der Bereich der Graphnamen getrennt vom Bereich der Daten und mit Ralf's Angabe hat es auch geklappt. Wo liegt der Vorteil von Union?
Viele Grüße
Max

AW: VBA: Diagrammbereich erweitern
21.03.2021 14:35:34
Beverly
Hi Max,
du könntest in Ralf's Zeile problemlos anstelle Spaltenbuchstaben auch die Spaltennummer schreiben:
.SetSourceData Source:=Range(wksT.Range(wksT.Cells(3, 2), wksT.Cells(17, 2)).Address & "," & _
wksT.Range(wksT.Cells(3, 37), wksT.Cells(17, 49)).Address), PlotBy:=xlRows
Der Knackpunkt ist hier also nicht der Spaltenbuchstabe sondern Range(...).Address
Excel legt Zelladressen intern immer in der Form Zeilennummer/Spaltennummer ab. Wenn nun Spaltenbuchstaben oder Range(...).Address verwendet wird, muss Excel diese erst in Zeilennummer/Spaltennummer umrechnen - das ist unnötig, wenn man den Union-Befehlt verwendet.
Diagramme sind häufig sehr sensibel bei der Bereichszuweisung, insbesondere wenn es sich um von einander getrennte Zellbereiche für die Werte der Horizontalachse und die der Daten handelt. Theoretisch kannst du deinen Ursprungscode (natürlich bei korrekter Verwendung von Zeilen- und Spaltennummer) für die Bereichszuweisung verwenden, aber nur wenn sich keine (Leer-)Spalten zwischen dem Achsenbereich und dem Bereich mit den Daten befinden. Deshalb ergibt dein ursprünglicher Code ein falsches Bild, denn als Achsenbeschriftungsbereich werden die Spalten B:AH angenommen. Verwendet man jedoch den Union-Befehl, weiß Excel eindeutig, dass sich der Achsenbeschriftungsbereich nur auf Spalte B begrenzt.
Es gibt also 2 Gründe, den Union-Befehl zu verwenden:
1. Zuweisung kann über Zeilennummer/Spaltennummer erfolgen
2. korrekte Übergabe des Bereichs mit den Werten für die Horizontalachse bei diskontinuierlichem Zellbereich

Beverly's Excel - Inn

Anzeige
AW: VBA: Diagrammbereich erweitern
21.03.2021 16:30:59
Max
Hallo Beverly,
vielen Dank für die ausführliche Antwort und die Zeit, die du dafür gebraucht hast :)
Viele Grüße
Max

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige