Excel VBA Diagramm Datenbereich unterschiedlich, wenn Makro durchläuft oder gestoppt wird
Moin!
Ich komme diesmal mit einem Schönheitsfehler, der technisch aber trotzdem ein Problem ist:
Ich fahre in Excel eine Auswertung über Umsätze in verschiedenen Geschäftsbereichen. Es entsteht dabei eine Tabelle, die etwa so aussieht:
Daraus soll ein Diagramm entstehen, das nur die Monatswerte, nicht aber die Spalten mit den Jahressummen anzeigt.
Der Code dazu sieht wie folgt aus:
Ich befinde mich in einer If-Abfrage innerhalb eines with-Block und die Variablen sind korrekt gefüllt.
Wenn das Makro nun über diese Zeile geht, gibt es die Meldung "Methode Range für Objekt _global fehlgeschlagen". Drücke ich F5, wird der Code anstandslos ausgeführt und das Diagramm sieht aus, wie ich es haben will und das durchgehend für zehn Tabellenblätter (for-Schleife)
Wenn ich "on error resume next" einsetze, erscheint zwar die Fehlermeldung nicht, aber die Anweisung wird auch nicht ausgeführt.
Wenn ich zum Testen einen Stop-Punkt setze und beim Stop F5 drücke, macht er wieder, was er soll.
Kann mir jemand erklären, warum der Code unterschiedlich ausgeführt wird, je nachdem, ob der durchläuft oder zwischendurch pausiert?
Viel wichtiger wäre aber: es gibt zu der "Methode Range für Objekt _global fehlgeschlagen"-Meldung zig Antworten, die unbefriedigendste ist von MS, die sagen, dass das ein gewünschtes Verhalten ist. Demzufolge soll ich den Code zuerst beenden und dann wieder neu aufnehmen. Kann mir das jemand übersetzen?
Interessant ist auch: wenn ich den Code anhalte und mit der Maus über das erste ".Name" gehe, erscheint dort ebenfalls die Fehlermeldung, die Adresse bzw. das Worksheet kann anscheinend nicht aufgelöst werden. Gehe ich mit der Maus über eins der weiteren ".Name", erscheint wie erwartet der Tabellenblattname.
Wenn ich die Source vorher in eine Variable schreibe, passiert genau das Gleiche. Fülle ich allerdings String-Variablen, wird alles korrekt aufgelöst. Leider kann ich damit dann nicht die Source zusammensetzen.
Hat da jemand eine brauchbare Idee zu?
Ich komme diesmal mit einem Schönheitsfehler, der technisch aber trotzdem ein Problem ist:
Ich fahre in Excel eine Auswertung über Umsätze in verschiedenen Geschäftsbereichen. Es entsteht dabei eine Tabelle, die etwa so aussieht:
Daraus soll ein Diagramm entstehen, das nur die Monatswerte, nicht aber die Spalten mit den Jahressummen anzeigt.
Der Code dazu sieht wie folgt aus:
ActiveChart.SetSourceData Source:=.Range(.Name & "!" & DiaBlock_1_Start.Address & ":" & DiaBlock_1_Ende.Address & "," & .Name & "!" & DiaBlock_2_Start.Address & ":" & DiaBlock_2_Ende.Address & "," & .Name & "!" & DiaBlock_3_Start.Address & ":" & DiaBlock_3_Ende.Address & "," & .Name & "!" & DiaBlock_4_Start.Address & ":" & DiaBlock_4_Ende.Address), PlotBy:=xlRows
Ich befinde mich in einer If-Abfrage innerhalb eines with-Block und die Variablen sind korrekt gefüllt.
Wenn das Makro nun über diese Zeile geht, gibt es die Meldung "Methode Range für Objekt _global fehlgeschlagen". Drücke ich F5, wird der Code anstandslos ausgeführt und das Diagramm sieht aus, wie ich es haben will und das durchgehend für zehn Tabellenblätter (for-Schleife)
Wenn ich "on error resume next" einsetze, erscheint zwar die Fehlermeldung nicht, aber die Anweisung wird auch nicht ausgeführt.
Wenn ich zum Testen einen Stop-Punkt setze und beim Stop F5 drücke, macht er wieder, was er soll.
Kann mir jemand erklären, warum der Code unterschiedlich ausgeführt wird, je nachdem, ob der durchläuft oder zwischendurch pausiert?
Viel wichtiger wäre aber: es gibt zu der "Methode Range für Objekt _global fehlgeschlagen"-Meldung zig Antworten, die unbefriedigendste ist von MS, die sagen, dass das ein gewünschtes Verhalten ist. Demzufolge soll ich den Code zuerst beenden und dann wieder neu aufnehmen. Kann mir das jemand übersetzen?
Interessant ist auch: wenn ich den Code anhalte und mit der Maus über das erste ".Name" gehe, erscheint dort ebenfalls die Fehlermeldung, die Adresse bzw. das Worksheet kann anscheinend nicht aufgelöst werden. Gehe ich mit der Maus über eins der weiteren ".Name", erscheint wie erwartet der Tabellenblattname.
Wenn ich die Source vorher in eine Variable schreibe, passiert genau das Gleiche. Fülle ich allerdings String-Variablen, wird alles korrekt aufgelöst. Leider kann ich damit dann nicht die Source zusammensetzen.
Hat da jemand eine brauchbare Idee zu?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 459089
Url: https://administrator.de/contentid/459089
Ausgedruckt am: 24.11.2024 um 15:11 Uhr
5 Kommentare
Neuester Kommentar
Hi,
vielleicht würde es uns helfen, wenn Du hier den kompletten With-Block zeigst. Dann könnten wir auch nachvollziehen, auf was sich ".Range" und ".Name" beziehen.
E.
vielleicht würde es uns helfen, wenn Du hier den kompletten With-Block zeigst. Dann könnten wir auch nachvollziehen, auf was sich ".Range" und ".Name" beziehen.
Wenn ich die Source vorher in eine Variable schreibe, passiert genau das Gleiche. Fülle ich allerdings String-Variablen, wird alles korrekt aufgelöst.
Diese Aussage kann ich jetzt nicht ganz nachvollziehen. Könntest Du das mal an konkreten Code-Zeilen verdeutlichen?E.
Ich habe das jetzt nicht auf inhaltliche Richtigkeit geprüft.
Aber rein von der Syntax her scheint mir das schon falsch.
Parameter für "Range" soll also sein:
.Name & "!" & DiaBlock_1_Start.Address & ":" & DiaBlock_1_Ende.Address & ";" & .Name & "!" & DiaBlock_2_Start.Address & ":" & DiaBlock_2_Ende.Address
Ich würde sagen, statt ";" muss das ein Komma sein. Dann käme z.B. heraus
"Blatt1!$A$1:$D$10,Blatt1!$H$1:$J$10"
Aber rein von der Syntax her scheint mir das schon falsch.
ActiveChart.SetSourceData Source:=.Range(.Name & "!" & DiaBlock_1_Start.Address & ":" & DiaBlock_1_Ende.Address & ";" & .Name & "!" & DiaBlock_2_Start.Address & ":" & DiaBlock_2_Ende.Address), PlotBy:=xlRows
Parameter für "Range" soll also sein:
.Name & "!" & DiaBlock_1_Start.Address & ":" & DiaBlock_1_Ende.Address & ";" & .Name & "!" & DiaBlock_2_Start.Address & ":" & DiaBlock_2_Ende.Address
Ich würde sagen, statt ";" muss das ein Komma sein. Dann käme z.B. heraus
"Blatt1!$A$1:$D$10,Blatt1!$H$1:$J$10"