Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

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

Frage Entwicklung VB for Applications

Mitglied: jaydotkay

jaydotkay (Level 1) - Jetzt verbinden

30.06.2014, aktualisiert 03.07.2014, 2010 Aufrufe, 23 Kommentare

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
Mitglied: colinardo
30.06.2014, aktualisiert 01.07.2014
Moin,
muss so lauten:
01.
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
Bitte warten ..
Mitglied: jaydotkay
01.07.2014 um 10:55 Uhr
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
Bitte warten ..
Mitglied: colinardo
01.07.2014 um 10:59 Uhr
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
Bitte warten ..
Mitglied: colinardo
LÖSUNG 01.07.2014, aktualisiert 03.07.2014
Hier eine Demo, falls du dein File nicht aus der Hand geben willst:
chart_change_source_242259.xlsm

Grüße Uwe
Bitte warten ..
Mitglied: jaydotkay
01.07.2014 um 11:16 Uhr
Genau.

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

Gegefrage: Was ist eine PM?
Bitte warten ..
Mitglied: colinardo
01.07.2014 um 11:17 Uhr
Zitat von jaydotkay:
Gegefrage: Was ist eine PM?
Persönliche Mitteilung über das Forensystem.
Bitte warten ..
Mitglied: jaydotkay
01.07.2014, aktualisiert um 11:20 Uhr
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

;)...
Bitte warten ..
Mitglied: colinardo
01.07.2014 um 11:25 Uhr
Habe das Demo-Sheet noch angepasst für beide Versionen, also Chart-Objekt in einem Tabellenblatt und als extra Diagrammblatt.
Bitte warten ..
Mitglied: jaydotkay
01.07.2014 um 11:45 Uhr
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".
Bitte warten ..
Mitglied: colinardo
01.07.2014, aktualisiert um 11:59 Uhr
Dann gibt es das Diagramm mit diesem Namen vermutlich nicht mehr.
Lass dir mal mit
01.
Sub EnumCharts() 
02.
    For Each Chart In Worksheets("Auswertung").ChartObjects 
03.
        Debug.Print Chart.Name 
04.
    Next 
05.
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 !
Bitte warten ..
Mitglied: jaydotkay
01.07.2014 um 12:10 Uhr
Bei mir führt er es nicht aus, bei Dir schon. Hab eine Datei fertig gemacht. Wie kann ich die hier hochladen?
Bitte warten ..
Mitglied: colinardo
01.07.2014 um 12:11 Uhr
Hatte dir meine Mailadresse schon via PM geschickt, schau im Forum in deine persönlichen Nachrichten ...
Bitte warten ..
Mitglied: jaydotkay
01.07.2014 um 12:19 Uhr
ist draußen
Bitte warten ..
Mitglied: colinardo
01.07.2014, aktualisiert um 12:23 Uhr
und welchen Bereich möchtest du jetzt final drin haben ? Hier läuft es mit deinem eingetragenen Bereich .."B2:AA2,B4:AA5"
Bitte warten ..
Mitglied: jaydotkay
01.07.2014 um 12:25 Uhr
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.
Bitte warten ..
Mitglied: jaydotkay
01.07.2014 um 12:28 Uhr
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?
Bitte warten ..
Mitglied: jaydotkay
01.07.2014, aktualisiert um 12:33 Uhr
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 (?)
Bitte warten ..
Mitglied: jaydotkay
01.07.2014 um 12:35 Uhr
Wie müsste es aussehen, wenn die Daten auf einem anderen lägen? Könnstest du mir bitte noch Deine zweite Version schicken?
Bitte warten ..
Mitglied: colinardo
01.07.2014 um 12:39 Uhr
ist oben in dem ersten verlinkten File enthalten ... jetzt wart halt mal ab bin gerade anderweitig beschäftigt ...
Bitte warten ..
Mitglied: colinardo
LÖSUNG 01.07.2014, aktualisiert 03.07.2014
Sheet ist per Mail raus, Der Code findet nun selbständig die leeren Spalten und passt das Diagramm entsprechend an.
Viel Erfolg noch...
Ciao
Bitte warten ..
Mitglied: jaydotkay
01.07.2014 um 13:12 Uhr
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
Bitte warten ..
Mitglied: colinardo
02.07.2014 um 14:59 Uhr
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
Grüße Uwe
Bitte warten ..
Mitglied: jaydotkay
03.07.2014 um 09:37 Uhr
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
"
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...