jaydotkay
Goto Top

Korrekte Schreibweise für Source bei Befehl Charts.SetSourceData, Änderung der Datenquelle

Hallo zusammen,

ich habe schon viele Hilfestellungen zu diesem Thema gelesen, aber keine funktioniert bei mir.

Ich möchte jenachdem wie viele Spalten die zugrundegelegten Daten für das Diagramm aufweisen, eine automatisierte Anpassung im Diagramm vornehmen, damit keine Leeren Balken drin sind.

Mein Code(ausschnitt) schaut so aus:

'Diagrammdaten festlegen -> funktioniert soweit, es wird ein Datenbereich über einen String definiert
Diagrammdaten = "=Einzelfahrzeuge!AL4;Einzelfahrzeuge!AN4:BK4;Einzelfahrzeuge!AL6;Einzelfahrzeuge!AN6:BK6;Einzelfahrzeuge!AL11:AL13;Einzelfahrzeuge!AN11:BK13"
ActiveWorkbook.Names.Add Name:="DatenDiagramm", RefersToLocal:=Diagrammdaten

'Diagramm anpassen -> funktioniert nicht (Fehler "Index außerhalb gültigen Bereichs"), d.h. obiger String ist falsch
With ActiveWorkbook.Sheets("Auswertung")
Charts("Diagramm 43").SetSourceData Source:=Range("DatenDiagramm")
End With

Habe schon sehr sehr sehr viele verschiedene Schreibweisen ausprobiert, aber keine hat funktioniert.

Hat jemand eine Idee?

Vielen Dank im Voraus!

VG
Jaydotkay

Content-Key: 242259

Url: https://administrator.de/contentid/242259

Printed on: April 18, 2024 at 16:04 o'clock

Member: colinardo
colinardo Jun 30, 2014, updated at Jul 01, 2014 at 09:29:52 (UTC)
Goto Top
Moin,
muss so lauten:
Charts("Diagramm 43").SetSourceData Source:=Range("Einzelfahrzeuge!AL4,Einzelfahrzeuge!AN4:BK4,Einzelfahrzeuge!AL6,Einzelfahrzeuge!AN6:BK6,Einzelfahrzeuge!AL11:AL13,Einzelfahrzeuge!AN11:BK13")  
Via VB müssen die einzelnen Bereiche im Range mit Komma voneinander getrennt werden.

Grüße Uwe
Member: jaydotkay
jaydotkay Jul 01, 2014 at 08:55:39 (UTC)
Goto Top
Moin Uwe,

danke für Deinen Vorschlag.

Leider funktioniert das bei mir so auch nicht. Hattest Du es laufen?

Wenn ich die Kommas durch Semikolon ersetze, funktioniert zumindest die Range-Methode (bspw. Range.Select). Komischerweise meldet er aber dann trotzdem bei der Source-Definition nach wie vor "Index außerhalb gültigen Bereichs".

Wenn ich nun den Range bzw. String manuell in den "Diagrammdatenbereich" (=Source...) kopiere, funktioniert es.

Anmerkung: Der Range entspricht dem Diagrammdatenbereich. Ich habe diesen aus dem fertigen Diagramm in das Skript kopiert.

Damit liegt es meines Erachtens doch nicht an der Formatierung des Strings. Sondern es funktioniert die SetSourceData-Methode nicht. Obwohl diese beim "Makro aufzeichnen" verwendet wird, ist sie sodann nicht ausführbar! - Ich verstehe die Welt nicht mehr!!

Kann das an den Verweisen bzw. aktivierten Namespaces liegen? Gibt es noch andere Möglichkeiten?

Viele Grüße
Jaydotkay
Member: colinardo
colinardo Jul 01, 2014 at 08:59:17 (UTC)
Goto Top
Zitat von @jaydotkay:
Leider funktioniert das bei mir so auch nicht. Hattest Du es laufen?
sicher sonst würde ich das hier nicht posten ...
schick mal dein File ... sonst muss ich hier die Kristallkugel bemühen (schicke dir ne PM).

Grüße Uwe
Member: colinardo
Solution colinardo Jul 01, 2014, updated at Jul 03, 2014 at 07:37:45 (UTC)
Goto Top
Hier eine Demo, falls du dein File nicht aus der Hand geben willst:
chart_change_source_242259.xlsm

Grüße Uwe
Member: jaydotkay
jaydotkay Jul 01, 2014 at 09:16:05 (UTC)
Goto Top
Genau.

Ich mache gerade eine Testdatei fertig (kann Dir leider nicht die eigentliche Datei schicken).

Gegefrage: Was ist eine PM? face-smile
Member: colinardo
colinardo Jul 01, 2014 at 09:17:44 (UTC)
Goto Top
Zitat von @jaydotkay:
Gegefrage: Was ist eine PM? face-smile
Persönliche Mitteilung über das Forensystem.
Member: jaydotkay
jaydotkay Jul 01, 2014 updated at 09:20:45 (UTC)
Goto Top
Hammer! Vielen Dank. Es funktioniert auch bei mir.

Muss mich erstmal damit beschäftigen, vielleicht kann ich meinen Code damit zum Laufen bringen...

Grüße
Jaydotkay

;)...
Member: colinardo
colinardo Jul 01, 2014 at 09:25:19 (UTC)
Goto Top
Habe das Demo-Sheet noch angepasst für beide Versionen, also Chart-Objekt in einem Tabellenblatt und als extra Diagrammblatt.
Member: jaydotkay
jaydotkay Jul 01, 2014 at 09:45:13 (UTC)
Goto Top
Ja, so ist es bei mir auch umgesetzt (Diagramm auf einem Blatt, Daten auf dem andern)

Hab das gerade aber versucht zu umgehen:

Ich habe die Codezeile von Deinem Tool in meinen Code (Modul) übernommen und die Range angepasst. Ebenso die Daten in das gleiche Abeitsblatt gelegt, aber er meckert immernoch dass er Range nicht ausführen kann.

Worksheets("Auswertung").ChartObjects("Diagramm 43").Chart.SetSourceData Source:=Range("AL4,AN4:BK4,AL6,AN6:BK6,AL11:AL13,AN11:BK13")

Deinen Sub als Tabbellencode ausgeführt ergibt einen "Anwendungs- oder Objektdefinierten Fehler".
Member: colinardo
colinardo Jul 01, 2014 updated at 09:59:47 (UTC)
Goto Top
Dann gibt es das Diagramm mit diesem Namen vermutlich nicht mehr.
Lass dir mal mit
Sub EnumCharts()
    For Each Chart In Worksheets("Auswertung").ChartObjects  
        Debug.Print Chart.Name
    Next
End Sub
alle Charts mit deren Namen im Direktbereich des VBA Editors ausgeben.

Oder dein Source-Range passt nicht zum verwendeten Diagrammtyp.

ansonsten schicke mir das Sheet mal, sonst nimmt das hier kein Ende mehr !
Member: jaydotkay
jaydotkay Jul 01, 2014 at 10:10:08 (UTC)
Goto Top
Bei mir führt er es nicht aus, bei Dir schon. Hab eine Datei fertig gemacht. Wie kann ich die hier hochladen?
Member: colinardo
colinardo Jul 01, 2014 at 10:11:48 (UTC)
Goto Top
Hatte dir meine Mailadresse schon via PM geschickt, schau im Forum in deine persönlichen Nachrichten ...
Member: jaydotkay
jaydotkay Jul 01, 2014 at 10:19:19 (UTC)
Goto Top
ist draußen
Member: colinardo
colinardo Jul 01, 2014 updated at 10:23:43 (UTC)
Goto Top
und welchen Bereich möchtest du jetzt final drin haben ? Hier läuft es mit deinem eingetragenen Bereich .."B2:AA2,B4:AA5"
Member: jaydotkay
jaydotkay Jul 01, 2014 at 10:25:55 (UTC)
Goto Top
es ist ein sehr vereinfachtes Beispiel, aber im Wesentlichen geht es darum, dass eine variierende Menge an Fahrzeugen vorhanden sein können (im Beispiel hier sind es 19 von maximal 25). Das Diagramm soll dann auch nur 19 Fahrzeuge bzw. Spalten beinhalten und eben nicht noch 6 leere Balken am Ende bspw.
Member: jaydotkay
jaydotkay Jul 01, 2014 at 10:28:49 (UTC)
Goto Top
Bei Dir läuft es?? Verdammt...

Habe die Verweise gecheckt und es sind alle Verweise gesetzt wie in Deinem Dokument auch inklusive zusätzlicher. Weiß nicht ob es daran liegen kann?
Member: jaydotkay
jaydotkay Jul 01, 2014 updated at 10:33:30 (UTC)
Goto Top
Gute Neuigkeiten. Es läuft bei mir nun wenn ich nur "B2:AF5" oder "B2:AA5 verwende. Denke er kann bei mir irgendwie die Kommas nicht verarbeiten oder nicht mehrere Datenreihen getrennt behandeln (?)
Member: jaydotkay
jaydotkay Jul 01, 2014 at 10:35:07 (UTC)
Goto Top
Wie müsste es aussehen, wenn die Daten auf einem anderen lägen? Könnstest du mir bitte noch Deine zweite Version schicken?
Member: colinardo
colinardo Jul 01, 2014 at 10:39:19 (UTC)
Goto Top
ist oben in dem ersten verlinkten File enthalten ... jetzt wart halt mal ab bin gerade anderweitig beschäftigt ...
Member: colinardo
Solution colinardo Jul 01, 2014, updated at Jul 03, 2014 at 07:37:34 (UTC)
Goto Top
Sheet ist per Mail raus, Der Code findet nun selbständig die leeren Spalten und passt das Diagramm entsprechend an.
Viel Erfolg noch...
Ciao
Member: jaydotkay
jaydotkay Jul 01, 2014 at 11:12:34 (UTC)
Goto Top
Habe es gerade auch hinbekommen. Merkwürdig ist, dass exakt der gleiche Code vorher nicht ging...

Wie auch immer.

Großes Dankeschön an Dich und lass Dich nicht stressen! ;)

Gruß
Jaydotkay
Member: colinardo
colinardo Jul 02, 2014 at 12:59:19 (UTC)
Goto Top
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
Grüße Uwe
Member: jaydotkay
jaydotkay Jul 03, 2014 at 07:37:18 (UTC)
Goto Top
Der Clou war, den Datenbereich (="strChartSource43", s.u.) als Variant zu deklarieren. Hier wollte mein VBA keinen String sehen. Ebenso muss ich Semikolon statt Kommas verwenden.

Mein Diagramm beinhaltet mehrere Datenreihen mit unterschiedlichen Diagrammtypen. Dies stellt also kein Problem dar.

Unten habe ich nochmal den funktionierenden Sub gepostet. Er ist sicherlich nicht so elegant wie Uwes Tool, ich hoffe aber er hilft anderen mit ähnlichen Problemen.

Grüße
Jaydotkay

"
Public Sub DiagrammAnpassung()

Dim strChartSource43 As Variant
Dim i As Integer
Dim intRow As Integer
Dim intColumnAnfang, intColumnEnde As Variant

i = 0

ActiveWorkbook.Activate

'Ermittle Anzahl Fahrzeuge
For Each strChartSource43 In Sheets("Einzelfahrzeuge").Range("FahrzeugeGeladen")
If strChartSource43 <> "" Or strChartSource43 <> 0 Then
i = i + 1
End If
Next

'Ermittle Koordinaten
intColumnEnde = Sheets("Einzelfahrzeuge").Range("Fahrzeug1").Column + i - 1
intRow = Sheets("Einzelfahrzeuge").Range("Diagramm43DatenBeginn").Row
intColumnEnde = Sheets("Einzelfahrzeuge").Cells(intRow, intColumnEnde).Value
intColumnAnfang = Sheets("Einzelfahrzeuge").Range("Diagramm43DatenBeginn").Value
intRow = Sheets("Einzelfahrzeuge").Range("Fahrzeug1").Row

strChartSource43 = "Einzelfahrzeuge!" & intColumnAnfang & intRow & ":" & intColumnEnde & intRow & _
";Einzelfahrzeuge!" & intColumnAnfang & intRow + 2 & ":" & intColumnEnde & intRow + 2 & _
";Einzelfahrzeuge!" & intColumnAnfang & intRow + 7 & ":" & intColumnEnde & intRow + 9

Sheets("Auswertung").Activate
Worksheets("Auswertung").ChartObjects("Diagramm 43").Chart.SetSourceData Source:=Range(strChartSource43)

End Sub
"