Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Diagramme mit VBA erstellen

Forumthread: Diagramme mit VBA erstellen

Diagramme mit VBA erstellen
08.09.2004 15:54:08
Piotr
Hallo Zusammen,
ich habe noch eine Bitte. Ich habe viele sheets mit je einer Tabbelle (x und y-Werte). Mit Diagramm einfügen und dem Diagramm-Assistenen kann man ein Punkt(XY)-Diagramm erstellen, dann wieder ein weiteres Diagramm manuell hinzufügen und so weiter.
Das Makro dazu sieht so aus:

Sub M_Diagramm()
' M_Diagramm Makro
' Makro am 08.09.2004 von Piotr aufgezeichnet
Sheets("N80").Select
Charts.Add
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=Sheets("N80").Range("C25")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = "='N80'!R3C3:R4C3"
ActiveChart.SeriesCollection(1).Values = "='N80'!R3C4:R4C4"
ActiveChart.SeriesCollection(1).Name = "='N80'!R1C2:R1C4"
ActiveChart.SeriesCollection(2).XValues = "='N81'!R3C3:R4C3"
ActiveChart.SeriesCollection(2).Values = "='N81'!R3C4:R4C4"
ActiveChart.SeriesCollection(2).Name = "='N81'!R1C2:R1C4"
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Test Diagramm"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Test-Diagramm"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "1/t"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "ln OIT"
End With
Charts.Add
End Sub

Meine Frage: kann man diese Prozedur mit VB automatisieren in dem man das Macro verändert und irgendwo an einer Stelle eine Schleife einfügt?
Vielen Dank im voraus
Piotr
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagramme mit VBA erstellen
08.09.2004 19:40:54
andre
Hallo Pjotr,
klar geht das:

Sub M_Diagramm()
' M_Diagramm Makro
' Makro am 08.09.2004 von Piotr aufgezeichnet
For i=80 to 90 step 2 'ein Diagramm holt Daten aus 2 Blättern, z.b. 80+81, 82+83 ...
Sheets("N" & i).Select
Charts.Add
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=Sheets("N" & i).Range("C25")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = "='N" & i & "'!R3C3:R4C3"
ActiveChart.SeriesCollection(1).Values = "='N" & i & "'!R3C4:R4C4"
ActiveChart.SeriesCollection(1).Name = "='N" & i & "'!R1C2:R1C4"
ActiveChart.SeriesCollection(2).XValues = "='N" & i+1 & "'!R3C3:R4C3"
ActiveChart.SeriesCollection(2).Values = "='N" & i+1 & "'!R3C4:R4C4"
ActiveChart.SeriesCollection(2).Name = "='N" & i+1 & "'!R1C2:R1C4"
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Test Diagramm"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Test-Diagramm"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "1/t"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "ln OIT"
End With
Charts.Add
End Sub

Anzeige
AW: Diagramme mit VBA erstellen
09.09.2004 15:36:23
piotr
Hallo Andre
leider funktioniert das nur bis zu der 1 Zeile der Schleife, ab da nicht mehr. Der Name wird einfach nicht erkannt. z.B N83 wird nicht erkannt. Bitte nochmals um Hilfe
Gruß, Piotr
Sub nicht_bearbeiten()
'
' nicht_bearbeiten Makro
' Makro am 09.09.2004 von Piotr aufgezeichnet
'
'
Sheets("N80").Select
Charts.Add
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=Sheets("N80").Range("D21"), PlotBy:= _
xlRows
ActiveChart.SeriesCollection(1).XValues = "='N80'!R3C3:R4C3"
ActiveChart.SeriesCollection(1).Values = "='N80'!R3C4:R4C4"
ActiveChart.SeriesCollection(1).Name = "='N80'!R1C2:R1C4"

ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).XValues = "='N81'!R3C3:R4C3"
ActiveChart.SeriesCollection(2).Values = "='N81'!R3C4:R4C4"
ActiveChart.SeriesCollection(2).Name = "='N81'!R1C2:R1C4"

For i = 83 To 85 Step 1
ActiveChart.SeriesCollection.NewSeries
Sheets("N" & i).Select
ActiveChart.SeriesCollection(i - 79).XValues = "='N" & i & "'!R3C3:R4C3"
ActiveChart.SeriesCollection(i - 79).Values = "='N" & i & "'!R3C4:R4C4"
ActiveChart.SeriesCollection(i - 79).Name = "='N" & i & "'!R1C2:R1C4"
Next i

Anzeige
AW: Diagramme mit VBA erstellen
09.09.2004 16:32:22
andre
Hallo Piotr,
funktioniert es wenn Du rechts die 83 hinschreibst?
Grüße, Andre
AW: Diagramme mit VBA erstellen
09.09.2004 17:27:15
Piotr
Wenn ich per Hand eingebe dann ja.
Die z.B 83 wird einfach in diese Form
"='N" & i & "'!R3C3:R4C3"
nicht übernommen. Hier hält die Schleife an.
Sie müsste normalerweise in dem Ablauf der Schleife so aussehen:
"='N83'!R3C3:R4C3"
Gruß, Piotr
Anzeige
AW: Diagramme mit VBA erstellen
09.09.2004 19:33:16
Thomas Scher
Hallo zusammen,
ist es nicht so das I ein Integer ist ???
Ich vermisse den dim Befehl
dim i as Integer
for i = 88 to 92 step 2
Vielleicht ist es das ???
Gruß
Thomas
AW: Diagramme mit VBA erstellen
09.09.2004 20:13:33
andre
Hallo Thomas,
Pjotr hat die 83 ja drin - sonst würde das Makro auch schon bei for ... abbrechen.
Dass die 83 hier "='N" & i & "'!R3C3:R4C3" nicht reingeht glaube ich nicht.
Man kann ja auch mal zusätzliche Zeilen Programmieren, Excel hat sich zuweilen eng wenn die Bereiche erst dann zusammengesetzt werden, wenn sie gebraucht werden:
For i = 83 To 85 Step 1
ActiveChart.SeriesCollection.NewSeries
Sheets("N" & i).Select
Kette="='N" & i & "'!R3C3:R4C3"
ActiveChart.SeriesCollection(i - 79).XValues = Kette
Kette="='N" & i & "'!R3C4:R4C4"
ActiveChart.SeriesCollection(i - 79).Values = Kette
Kette="='N" & i & "'!R1C2:R1C4"
ActiveChart.SeriesCollection(i - 79).Name = Kette
Next i
Es wird eventuell auch daran liegen, dass 83-79=4 ist und zuvor die 3. Datenreihe fehlt?
Anzeige
AW: Diagramme mit VBA erstellen
09.09.2004 20:31:16
Thomas Scher
Hallo Andre ,
ich habe mir gerade eine Excel Tab gemacht mit einfachen Zahlen !!
Das Macro läuft. Es gibt nur ein Problem mit dem namen des Diagramms, da es immer gleich lautet habe ich zum Test so Gemacht
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Test Diagramm" & i
Dann noch dieses hier :
ActiveChart.SeriesCollection(2).XValues = "='N" & i + 1 & "'!R3C3:R4C3"
Ich habe nur bis Sheet 88 gemacht und da er + 1 macht ist kein Sheet mehr da...
Komisch wie gesagt er geht bei mir ..
gruß
Thomas
Anzeige
AW: Diagramme mit VBA erstellen
10.09.2004 09:26:43
Piotr
Guten Morgen Zusammen,
danke, dass Ihr Euch mit meinem Problem beschäftigt. Doch irgendwie bin ich zu blöd. Es funktioniert nicht. . Manuell die dritte Gerade einzufügen aus dem Sheet N82 ist kein Problem, nur diese "verflixte" Schleife. Was mache ich falsch? Anbei nochmal mein modifiziertes Makro:

Sub Diagramm_erstellen()
' Makro am 09.09.2004 von Piotr aufgezeichnet
Sheets("N80").Select
Charts.Add
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=Sheets("N80").Range("D21"), PlotBy:= _
xlRows
ActiveChart.SeriesCollection(1).XValues = "='N80'!R3C3:R4C3"
ActiveChart.SeriesCollection(1).Values = "='N80'!R3C4:R4C4"
ActiveChart.SeriesCollection(1).Name = "='N80'!R1C2:R1C4"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).XValues = "='N81'!R3C3:R4C3"
ActiveChart.SeriesCollection(2).Values = "='N81'!R3C4:R4C4"
ActiveChart.SeriesCollection(2).Name = "='N81'!R1C2:R1C4"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(3).XValues = "='N82'!R3C3:R4C3"
ActiveChart.SeriesCollection(3).Values = "='N82'!R3C4:R4C4"
ActiveChart.SeriesCollection(3).Name = "='N82'!R1C2:R1C4"
' PIOTR: Bis hierhin gib es keine Probleme
For i = 83 To 85
'PIOTR: Dies habe ich nur eingeführt, um zu schauen, ob der Sheetname erkannt wird.
Sheets("tabelle1").Select
Cells(1, 1) = Sheets("N" & i).Name
'PIOTR: Das funktioniert soweit auch ganz gut
'PIOTR: Ab hier gibt es Probleme !
ActiveChart.SeriesCollection(i - 79).XValues = "='N" & i & "'!R3C3:R4C3"
ActiveChart.SeriesCollection(i - 79).Values = "='N" & i + 1 & "'!R3C3:R4C3"
ActiveChart.SeriesCollection(i - 79).Name = "='N" & i + 1 & "'!R3C3:R4C3"
Next i
ActiveChart.Location Where:=xlLocationAsNewSheet
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "N 80"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "x-achse"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "y-achse"
End With
Charts.Add
End Sub

Anzeige
AW: Diagramme mit VBA erstellen
10.09.2004 14:18:26
Piotr
Übrigens
in dieser Zeile sagt der Debugger: Laufzeitfehler 91: "Objektvariable oder with Blockvariable nicht festgelegt"
ActiveChart.SeriesCollection(4).XValues = "='N" & i & "'!R3C3:R4C3"
Vielleicht hilft dass weiter
Gruß, Piotr
AW: Diagramme mit VBA erstellen
12.09.2004 08:00:05
andre
Hallo Pjotr,
lege mal in die Zeile For i... einen Haltepunkt (F9) und gehe von da an den code im Einzelschritt (F8) durch. Wenn Der Fehler kommt, ändere i-79 in den entsprechenden Wert, zuerst 4, und drücke weiter (F8). Wenn der Fehler wieder kommt ändere dann den hinteren Teil in ...N83.... Wenn der Fehler wieder kommt liegt es nicht an der Schleife.
Grüße, Andre
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Diagramme mit VBA automatisieren


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen. Wähle Einfügen > Modul, um ein neues Modul zu erstellen.

  2. Code einfügen: Kopiere den folgenden Code in das Modul:

    Sub Diagramm_erstellen()
       Sheets("N80").Select
       Charts.Add
       ActiveChart.ChartType = xlXYScatterSmooth
       ActiveChart.SetSourceData Source:=Sheets("N80").Range("D21"), PlotBy:= xlRows
       ActiveChart.SeriesCollection(1).XValues = "='N80'!R3C3:R4C3"
       ActiveChart.SeriesCollection(1).Values = "='N80'!R3C4:R4C4"
       ActiveChart.SeriesCollection(1).Name = "='N80'!R1C2:R1C4"
       ActiveChart.SeriesCollection.NewSeries
       ActiveChart.SeriesCollection(2).XValues = "='N81'!R3C3:R4C3"
       ActiveChart.SeriesCollection(2).Values = "='N81'!R3C4:R4C4"
       ActiveChart.SeriesCollection(2).Name = "='N81'!R1C2:R1C4"
    
       For i = 83 To 85
           ActiveChart.SeriesCollection.NewSeries
           ActiveChart.SeriesCollection(i - 79).XValues = "='N" & i & "'!R3C3:R4C3"
           ActiveChart.SeriesCollection(i - 79).Values = "='N" & i & "'!R3C4:R4C4"
           ActiveChart.SeriesCollection(i - 79).Name = "='N" & i & "'!R1C2:R1C4"
       Next i
    
       With ActiveChart
           .HasTitle = True
           .ChartTitle.Characters.Text = "Test-Diagramm"
           .Axes(xlCategory, xlPrimary).HasTitle = True
           .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "x-achse"
           .Axes(xlValue, xlPrimary).HasTitle = True
           .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "y-achse"
       End With
    End Sub
  3. Ausführen: Schließe den VBA-Editor und kehre zu Excel zurück. Drücke ALT + F8, wähle Diagramm_erstellen und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Laufzeitfehler 91: Dieser Fehler tritt auf, wenn eine Objektvariable nicht festgelegt wurde. Stelle sicher, dass die entsprechenden Worksheets existieren und korrekt benannt sind.

  • Diagrammname wird nicht erkannt: Wenn ein Sheetname nicht erkannt wird, überprüfe, ob das Sheet tatsächlich existiert. Du kannst auch den Code anpassen, um den Namen vor der Verwendung zu überprüfen.

  • Fehler bei Schleifen: Wenn die Schleife nicht richtig funktioniert, könnte es daran liegen, dass nicht alle Referenzen korrekt gesetzt sind. Verwende Debug.Print in der Schleife, um die Werte zu überprüfen.


Alternative Methoden

  • Excel Makro Diagramm erstellen: Du kannst auch ein Makro verwenden, um Diagramme automatisch zu erstellen. Dies ist besonders nützlich, wenn du viele Daten hast.

  • Excel Diagramm automatisch erstellen: Verwende die Charts.Add-Methode in Kombination mit Schleifen, um mehrere Diagramme in einem Schritt zu erstellen.

  • VBA Grafik erstellen: Anstelle von Diagrammen kannst du auch Grafiken mit VBA erstellen, indem du die Formen und Linienobjekte in Excel verwendest.


Praktische Beispiele

Hier sind einige Beispiele, wie du VBA verwenden kannst, um Diagramme zu erstellen:

  1. XY-Diagramm erstellen: Verwende den oben angegebenen Code, um ein XY-Diagramm zu erstellen, das Daten aus mehreren Sheets zusammenführt.

  2. Dynamische Datenquelle: Passe den Code an, um Daten aus variablen Quellen zu beziehen, z.B. durch das Einlesen von Benutzereingaben.

  3. Diagrammformatierung: Experimentiere mit verschiedenen Diagrammformatierungen, z.B. durch das Hinzufügen von Legenden, Datenbeschriftungen oder Anpassungen der Achsentitel.


Tipps für Profis

  • Optimierung des Codes: Verwende With...End With, um den Code effizienter zu gestalten und die Lesbarkeit zu erhöhen.

  • Fehlerbehandlung: Integriere Fehlerbehandlungsroutinen, um den Code robuster zu machen. Dies kann durch On Error Resume Next und If...Then-Anweisungen erfolgen.

  • Modularer Code: Teile deinen Code in mehrere Subroutinen auf, um ihn wartbarer und übersichtlicher zu gestalten.


FAQ: Häufige Fragen

1. Wie kann ich ein VBA Diagramm erstellen?
Du kannst ein Diagramm mit dem VBA-Befehl Charts.Add erstellen und die Datenquellen mit SetSourceData festlegen.

2. Gibt es eine Möglichkeit, mehrere Diagramme auf einmal zu erstellen?
Ja, indem du eine Schleife in deinem VBA-Code verwendest, kannst du mehrere Diagramme automatisch generieren.

3. Welche Excel-Version benötige ich?
Der bereitgestellte Code funktioniert in den meisten modernen Excel-Versionen, einschließlich Excel 2010 und neuer.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige