Microsoft Excel

Herbers Excel/VBA-Archiv

Diagramme mit VBA erstellen

Betrifft: Diagramme mit VBA erstellen von: Piotr
Geschrieben am: 08.09.2004 15:54:08

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
  


Betrifft: AW: Diagramme mit VBA erstellen von: andre
Geschrieben am: 08.09.2004 19:40:54

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




  


Betrifft: AW: Diagramme mit VBA erstellen von: piotr
Geschrieben am: 09.09.2004 15:36:23

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



  


Betrifft: AW: Diagramme mit VBA erstellen von: andre
Geschrieben am: 09.09.2004 16:32:22

Hallo Piotr,
funktioniert es wenn Du rechts die 83 hinschreibst?
Grüße, Andre


  


Betrifft: AW: Diagramme mit VBA erstellen von: Piotr
Geschrieben am: 09.09.2004 17:27:15

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


  


Betrifft: AW: Diagramme mit VBA erstellen von: Thomas Scher
Geschrieben am: 09.09.2004 19:33:16

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


  


Betrifft: AW: Diagramme mit VBA erstellen von: andre
Geschrieben am: 09.09.2004 20:13:33

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?


  


Betrifft: AW: Diagramme mit VBA erstellen von: Thomas Scher
Geschrieben am: 09.09.2004 20:31:16

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


  


Betrifft: AW: Diagramme mit VBA erstellen von: Piotr
Geschrieben am: 10.09.2004 09:26:43

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



  


Betrifft: AW: Diagramme mit VBA erstellen von: Piotr
Geschrieben am: 10.09.2004 14:18:26

Ü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


  


Betrifft: AW: Diagramme mit VBA erstellen von: andre
Geschrieben am: 12.09.2004 08:00:05

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


 

Beiträge aus den Excel-Beispielen zum Thema "Diagramme mit VBA erstellen"