Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
964to968
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
964to968
964to968
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Erstellen von vielen Diagrammen mittels VBA

Erstellen von vielen Diagrammen mittels VBA
02.04.2008 09:17:00
vielen
Hi,
ich versuche geade ein VBA-Makro zu erstellen welches mir
  • aus einer Tabelle mit n spalten sämtliche Inhalte der Spalte A (Größenachse X) jeweils gegen alle anderen vorhanden Spalten (bis n; alles Werteachse Y) ausgibt

  • ein XY-Diagramm verwendet

  • die Diagramme alle gleich formatiert (Schriftgröße, Gitternetzlinien, etc)

  • Größe/Skalierung sowie Platzierung der Diagramme, so dass auf eine DIN A4-Seite(Portrait) immer 5 Diagramme untereinander dargestellt werden

  • Hier soweit der vorhandene Code:
    
    Sub GrafikenErstellen()
    Dim wks As Worksheet, wks2 As Worksheet
    Dim cht As Chart
    Dim iRow As Integer
    Dim r1 As Range, r2 As Range, myMultiAreaRange As Range
    Set wks = ActiveSheet
    iCol = 2
    Do Until IsEmpty(wks.Cells(1, iCol))
    Set cht = Charts.Add
    With cht
    .ChartType = xlXYScatterLinesNoMarkers
    ' Baustelle 1: Immer Spalte A vs Spalte iCol plotten
    ' Lösung union, multirange? --> myMultiAreaRange = Union(r1, r2) 
    .SetSourceData _
    Source:=wks.Range(wks.Cells(1, 1), wks.Cells(200, iCol)), _
    PlotBy:=xlColumns
    .HasTitle = True
    .ChartTitle.Characters.Text = wks.Cells(1, iCol).Value
    .Axes(xlCategory, xlPrimary).HasTitle = False
    .Axes(xlValue, xlPrimary).HasTitle = False
    .Axes(xlValue).HasMajorGridlines = False
    .HasLegend = False
    .Axes(xlCategory).HasMajorGridlines = True
    .Axes(xlCategory).HasMinorGridlines = True
    .Axes(xlCategory).MinorGridlines.Select
    With Selection.Border
    .ColorIndex = 36
    .Weight = xlHairline
    .LineStyle = xlContinuous
    End With
    .Location Where:=xlLocationAsObject, Name:="Tabelle2"
    '.Location Where:=xlLocationAsNewSheet
    Set wks2 = ActiveSheet
    ' Baustelle 2: Platzieren und Skalierung der Diagramme 
    'ActiveSheet.Shapes(cht).IncrementLeft -33#
    End With
    iCol = iCol + 1
    Loop
    End Sub
    


    Probleme habe ich hier vorallem mit den beiden ausgezeichneten Baustellen.
    Bausstelle 1: Zur Zeit wird immer der komplette Range von Spalte_A:Spalte_iCol angezeigt, sprich, bei Spalte iCol gibt es dann auch iCol dargestellter Reihen. Hier soll aber wie gesagt nur Spalte A gegen Spalte B oder Spalte C oder ... Spalte iCol geplottet werden.
    Bausstelle 2: Die Platzierung und Skalierung der Diagramme funktioniert leider noch überhaupt nicht.
    Besten Dank
    Steph

    2
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Erstellen von vielen Diagrammen mittels VBA
    02.04.2008 15:29:00
    vielen
    Ha, ich habs
    Baustelle 1 ist gelöst:
    
    Dim r1 As Range, r2 As Range, MultiRange As Range
    Set wks = ActiveSheet
    Set r1 = wks.Range(wks.Cells(1, 1), wks.Cells(200, 1))
    iCol = 2
    Do Until IsEmpty(wks.Cells(1, iCol))
    Set r2 = wks.Range(wks.Cells(1, iCol), wks.Cells(200, iCol))
    Set MultiRange = Union(r1, r2)
    Set cht = Charts.Add
    With cht
    .ChartType = xlXYScatterLinesNoMarkers
    .SetSourceData _
    Source:=MultiRange, _
    PlotBy:=xlColumns
    .HasTitle = True
    


    Baustelle 2 ist auch gelöst:

    
    iRow = 1
    iCol = 2
    Do Until IsEmpty(wks.Cells(1, iCol))
    Set r2 = wks.Range(wks.Cells(1, iCol), wks.Cells(200, iCol))
    Set MultiRange = Union(r1, r2)
    'Set cht = Charts.Add
    Set ChtObj = wks2.ChartObjects.Add(Cells(iRow, 1).Left, Cells(iRow + 1, 1).Top, 400, 120)
    With ChtObj.Chart
    End With
    iCol = iCol + 1
    iRow = iRow + 10
    Loop
    


    Damit gehts!

    Anzeige
    AW: Erstellen von vielen Diagrammen mittels VBA
    02.04.2008 15:36:00
    vielen
    Hallo, @Steph,
    ohne besonders auf die Struktur Deiner Programmierung einzugehen, hier ein Lösungsvorschlag für Deine "Baustellen":
    
    Sub GrafikenErstellen()
    Dim wks As Worksheet, wks2 As Worksheet
    Dim cht As Chart
    Dim iRow As Long, iCol As Integer
    Dim r1 As Range, r2 As Range, myMultiAreaRange As Range
    Dim shp As Shape
    Dim X0 As Long, Y0 As Long, wDiagr As Integer, hDiagr As Integer
    Set wks = ActiveSheet
    iCol = 2
    hDiagr = 100
    wDiagr = 200
    Set r1 = wks.Range("A1:A200")
    Do Until IsEmpty(wks.Cells(1, iCol))
    Set cht = Charts.Add
    With cht
    .ChartType = xlXYScatterLinesNoMarkers
    Set r2 = wks.Range(wks.Cells(1, iCol), wks.Cells(200, iCol))
    .SetSourceData _
    Source:=wks.Range(r1.Address & "," & r2.Address), _
    PlotBy:=xlColumns
    .HasTitle = True
    .ChartTitle.Characters.Text = wks.Cells(1, iCol).Value
    .Axes(xlCategory, xlPrimary).HasTitle = False
    .Axes(xlValue, xlPrimary).HasTitle = False
    .Axes(xlValue).HasMajorGridlines = False
    .HasLegend = False
    With .Axes(xlCategory)
    .HasMajorGridlines = True
    .HasMinorGridlines = True
    With .MinorGridlines.Border
    .ColorIndex = 36
    .Weight = xlHairline
    .LineStyle = xlContinuous
    End With
    End With
    .Location Where:=xlLocationAsObject, Name:="Tabelle2"
    Set wks2 = ActiveSheet
    End With
    Set shp = Worksheets("Tabelle2").Shapes(iCol - 1)
    With shp
    .Top = (iCol - 2) * hDiagr
    .Left = 25
    .Height = hDiagr
    .Width = wDiagr
    End With
    iCol = iCol + 1
    Loop
    End Sub
    


    Zur Baustelle 1:
    Es wird das RangeObjekt r1 gesetzt: Set r1 = wks.Range("A1:A200". In der DO-Schleife wird das RangeObjekt r2 in abhängikeit von der Spalte gebildet. Dei Adressen beider werden in der RANGE-Angabe zur Datenquelle angegeben, so dass die notweendigen Daten für den Charttyp XYScatter vorhanden sind.
    Zur Baustelle 2:
    Hier wird ein Sgape-Object definiert, das dann so gesetzt werden kann, dass die Diagramme nach Wunsch ausgerichtet werden können. Für die DINA4-Seitenanpassing sind die Werte wDiagr und hDiagr (Weite und Höhe des Diagrammfensters) durch probieren anzupassen. Wenn Di jewils fünf Diagramme auf eine Seite bekommen möchtest, dann hängen die Werte auch von der Gestaltung und Verfügbarkeit der Ränder einer Seite ab.
    Empfehlung u.a: durch Set objVar = .... eingerichtete Objekte sollten durch Set objVar = Nothing wieder entfernt werden (Speicheplatz Freigabe).
    Ich hoffe dass diese Gedanken Dich zu eienr Lösung führen können.
    Gruß,
    Uwe

    Anzeige

    302 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige