Supportnet / Forum / Tabellenkalkulation
Erstellung einer Grafik via Makro
Frage
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 1 von Hajo_Zi
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
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
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
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
Hi Matthias,
versuche es mal so
Bis später,
Karin
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
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
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
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
Bis später,
Karin
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
Hallo Karin,
vielen lieben Dank für deine Hilfe... Makro funktioniert nun einwandfrei, lag tatsächlich an einem Leerzeichen ;-)
Liebe Grüße
Matthias
vielen lieben Dank für deine Hilfe... Makro funktioniert nun einwandfrei, lag tatsächlich an einem Leerzeichen ;-)
Liebe Grüße
Matthias