Supportnet Computer
Planet of Tech

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

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

Antwort 3 von Beverly

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

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

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

Hallo Karin,

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

Liebe Grüße
Matthias

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: