online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon Grafikmakro vom 29.08.2019, 09:17 Options

Erstellung einer Grafik via Makro

Hallo Excel - Gurus ;-)

folgendes Problem:
Ich würde gerne in Excel ein Makro haben, womit ich ein Diagramm auf Knopfdruck erzeugen kann. Ich habe mir bereits ein Makro aufgenommen, Problem ist aber das das aufgenommene Makro immer nur für ein Tabellenblatt gültig ist.

In meiner Excelarbeitsmappe ist ein Blankoformular enthalten. Dieses Blankoformular wird durch ein Makro kopiert (das war ja noch nicht so schwer zu schreiben :-)) und kann dann mit Daten gefüllt werden. Nun soll es möglich sein immer für das kopierte neue Blankoformular mit neuen Daten ein dazugehöriges Diagramm zu erstellen. Die Datenbereiche die in dem Diagramm dargestellt werden sollen sind auch immer die selben (I29 bis AF29 undI32 bis AF32).

Ist es möglich dieses via Makro zu erzeugen?? Ich bin mit meinem Wissen am Ende.

Vielen Dank für eure Bemühungen...

Gruß Matthias


Antwort schreiben

Antwort 1 von Hajo_Zi vom 29.08.2019, 12:16 Options

Hallo Matthias,

im Code steht bestimmt irgend wo Dein Tabellennamen ersetze das doch durch ActiveSheet .
Ich lehne es z.B. ab über das Internet auf fremde Rechner zu schauen. Vielleicht solltest Du deinen Code posten?

Gruß Hajo

Antwort 2 von Grafikmakro vom 29.08.2019, 13:53 Options

Hallo Hajo,

der Code für das aufgezeichnete Makro ist wie folgt:

Sub Grafik_erstellen()
'
' Grafik_erstellen Makro
' Makro am 29.08.2007 von THA6M3 aufgezeichnet
'

'
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Blanko").Range("A1:AF27"), PlotBy _
:=xlRows
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = "=Blanko!R4C9:R4C32"
ActiveChart.SeriesCollection(1).Values = "=Blanko!R29C9:R29C32"
ActiveChart.SeriesCollection(1).Name = "=""Plan"""
ActiveChart.SeriesCollection(2).XValues = "=Blanko!R4C9:R4C32"
ActiveChart.SeriesCollection(2).Values = "=Blanko!R32C9:R32C32"
ActiveChart.SeriesCollection(2).Name = "=""Ist"""
ActiveChart.Location Where:=xlLocationAsObject, Name:="Blanko"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Soll-Ist Vergleich"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Stunden"
End With
End Sub

Hab deinen Tip mit ActiveSheet schon ausprobiert, hat nur nicht richtig geklappt. Vielleicht hab ich ja was oder einen zu verändernden Namen übersehen?? Also die Arbeitsmappe heißt "Tool_Layout_Aktuell" und das betreffende Tabellenblatt "Blanko".
Bin dankbar für deine Hilfe, wenns jetzt auch noch klappt vereinfacht es mir die zukünftige Arbeit um einiges.

Vielen Dank für deine Bemühungen :-)
Matthias

Antwort 3 von Beverly vom 29.08.2019, 19:03 Options

Hi Matthias,

versuche es mal so

Sub Grafik_erstellen()
    Dim chDiagramm As ChartObject
    Set chDiagramm = ActiveSheet.ChartObjects.Add(100, 100, 450, 300)
    With chDiagramm.Chart
        .ChartType = xlColumnClustered
        .SetSourceData Source:=ActiveSheet.Range("A1:A1"), PlotBy:=xlRows
        .SeriesCollection(1).XValues = "=" & ActiveSheet.Name & "!R4C9:R4C32"
        .SeriesCollection(1).Values = "=" & ActiveSheet.Name & "!R29C9:R29C32"
        .SeriesCollection(1).Name = "=""Plan"""
        .SeriesCollection.NewSeries
        .SeriesCollection(2).XValues = "=" & ActiveSheet.Name & "!R4C9:R4C32"
        .SeriesCollection(2).Values = "=" & ActiveSheet.Name & "!R32C9:R32C32"
        .SeriesCollection(2).Name = "=""Ist"""
        .HasTitle = True
        .ChartTitle.Characters.Text = "Soll-Ist Vergleich"
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Stunden"
    End With
    chDiagramm.Name = ActiveSheet.Name
End Sub


Bis später,
Karin

Antwort 4 von Grafikmakro vom 30.08.2019, 11:44 Options

Hallo Katrin,

vielen Dank für deine Idee. Leider klappt das immer noch nicht so wie gedacht. Es wird zwar ein Diagramm erzeugt, aber sobald das Tabellenblatt kopiert wird, erscheint wieder eine Fehlermeldung das sich die Daten außerhalb eines gültigen Bereiches befinden. Das Diagramm wird dann geladen aber ohne Dateninhalt. Er bezeiht sich also noch nicht auf das "AktiveSheet" denke ich mal.

Danke für deine Bemühungen, vielleicht fällt dir/euch ja noch was ein.

Schönen Gruß
Matthias

Antwort 5 von Beverly vom 30.08.2019, 18:07 Options

Hi Mathias,

wenn dein kopiertes Tabellenblatt Leerzeichen im Namen enthält, muss noch ein Apostroph gesetzt werden. Du musst die zu übergebendes Formel also nach diesem Prinzip schreiben

"='" & ActiveSheet.Name & "'!R4C9:R4C32"


Bis später,
Karin

Antwort 6 von Grafikmakro vom 04.09.2019, 09:25 Options

Hallo Karin,

vielen lieben Dank für deine Hilfe... Makro funktioniert nun einwandfrei, lag tatsächlich an einem Leerzeichen ;-)

Liebe Grüße
Matthias

Ähnliche Themen

Makro um eine Grafik auszutauschen
struux  30.03.2007 - 56 Hits - 4 Antworten

Makro: Zeile einfügen
10Deluxe  19.06.2007 - 110 Hits - 7 Antworten

via Makro Arbeitsmappen verknüpfen
Günter03  30.08.2007 - 33 Hits - 2 Antworten

Grafik ein,- und ausblenden via Formel (wenn > dann)
rednaxelA  06.06.2008 - 20 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026