Microsoft Excel

Herbers Excel/VBA-Archiv

860to864: makro verallgemeinern

Betrifft: makro verallgemeinern von: humesit
Geschrieben am: 11.04.2007 14:24:04

hallo

ahbe ein makro aufgenommen, dass beim erstellen von diagrammen hilft. es ist in der persönlichenarbeitsmappe gespeichert.
leider sthet im code der dateiname ("Summary Report 1")aus der tabelle, aus der ich das aufgenommen habe.
wie kann ich denn das makro einfach auf eine beliebige tabelle beziehen aus der ich es aufgerufen habe?

ActiveChart.SetSourceData Source:=Sheets("Summary Report 1"). _
Range(ywerte.Address), PlotBy:=xlColumns

mfg christian

  


Betrifft: AW: makro verallgemeinern von: Ceci
Geschrieben am: 11.04.2007 14:35:44

Hallo Christian,

versuche

ActiveChart.SetSourceData Source:=ActiveSheet _
Range(ywerte.Address), PlotBy:=xlColumns

mfg ceci


  


Betrifft: AW: makro verallgemeinern von: humesit
Geschrieben am: 11.04.2007 14:53:09

funtkioniert leider nicht...


  


Betrifft: AW: makro verallgemeinern von: humesit
Geschrieben am: 11.04.2007 14:55:58

also jetzt mit frage ist noch offen... mal schaun was passiert


  


Betrifft: AW: makro verallgemeinern von: Ceci
Geschrieben am: 11.04.2007 14:57:53

Hallo,
ich weiß nicht ob du bemerkt hast, dass ich einen Punkt vergessen habe. Es muss so aussehen:

ActiveChart.SetSourceData Source:=Activesheet._
Range(ywerte.Address), PlotBy:=xlColumns

mfg Ceci


  


Betrifft: AW: makro verallgemeinern von: humesit
Geschrieben am: 11.04.2007 15:18:08

ja hab ich bemerkt und gleich ausgebessert. leider hilft mir die online hilfe hier nicht weiter....:
hab nochmal den ganzen code (ohne die variablendekl) zugefügt.

Charts.Add
ActiveChart.ChartType = xlColumnClustered
'ywerte
ActiveChart.SetSourceData Source:=Sheets("Summary Report 1"). _
Range(ywerte.Address), PlotBy:=xlColumns
'xwerte
ActiveChart.SeriesCollection(1).XValues = xwerte
ActiveChart.Location Where:=xlLocationAsNewSheet


  


Betrifft: AW: makro verallgemeinern von: Ceci
Geschrieben am: 12.04.2007 06:43:32

Hallo Christian,

ich habe hier mal meinen Code für die Diagrammerstellung für dich:
Sub Diagramm_Gesamt_erstellen()
Dim WSDia           As Worksheet
Dim chtChart        As Chart
Dim ChtChartArea    As ChartArea
Dim ChtAxis         As Axis
Dim Jahr            As String
Dim ch              As ChartObject

Set WSDia = Worksheets("Diagramm_Gesamt") 'Hier: set wsdia=ActivesSheet

'im Vorfeld ein evtl. vorhandenes Diagramm löschen!
On Error Resume Next
Application.DisplayAlerts = False

For Each ch In Sheets("Diagramm_Gesamt").ChartObjects
    ch.Delete
Next ch
Application.DisplayAlerts = True

'Diagramm einfügen
WSDia.ChartObjects.Add Left:=0, Top:=265, Width:=355, Height:=170
WSDia.ChartObjects(1).Name = "Dia_Gesamt"

'Datentyp und Range bestimmen
Set chtChart = WSDia.ChartObjects(1).Chart
chtChart.ChartType = xlXYScatter
chtChart.SetSourceData Source:=WSDia.Range("B13:E13")

'Legende "Reihe 1" löschen
ActiveSheet.ChartObjects("Dia_Gesamt").Activate
    ActiveChart.Legend.Select
    Selection.Delete

'Farben im Diagramm
Set ChtChartArea = chtChart.ChartArea
With ChtChartArea
    .Border.ColorIndex = RGB(192, 192, 192)
    .Interior.Color = RGB(255, 255, 128)
    .Font.Name = "Arial"
End With
Set ChtChartArea = Nothing

'Achsenformatierung
'ActiveSheet.ChartObjects.Activate
ActiveSheet.ChartObjects("Dia_Gesamt").Activate
ActiveChart.Axes(xlValue).Select
With ActiveChart.Axes(xlValue)
        .MinimumScale = 1
        .MaximumScale = 4
        .MinorUnit = 0.1
        .Crosses = xlCustom
        .CrossesAt = 0
        .ReversePlotOrder = True
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
    End With

'Achsenbeschriftung
Set ChtAxis = chtChart.Axes(xlCategory) 'y-Achse
On Error Resume Next
With ChtAxis
    .HasTitle = True
    .CategoryNames = WSDia.Range("B12:E12")
    .HasMajorGridlines = False
    .HasMinorGridlines = True
    .AxisTitle.Text = "Quartale/ quarters"
    .AxisTitle.Font.Bold = True
    .AxisTitle.Font.Underline = True
    .AxisTitle.Font.Size = "12"
End With

Set ChtAxis = chtChart.Axes(xlValue) 'x-Achse
With ChtAxis
    .HasTitle = True
    .AxisTitle.Text = "Benotung/ grading"
End With

End Sub



  


Betrifft: aufgenommenes makro verallgemeinern von: humesit
Geschrieben am: 12.04.2007 14:31:48

würde den code nur ungern komplett umändern...ausserdem hab ich dieses problem bei mehren Makros, dass ich das makro gerne auf beliebige dateien anwenden würde?
active sheet ist laut meinem kompendium der richtige befehl, so wie du es erst vorgeschlagen hast,aber er funzt nicht...


  


Betrifft: AW: aufgenommenes makro verallgemeinern von: Ceci
Geschrieben am: 13.04.2007 07:27:03

Sorry, dann kann ich dir auch nicht weiterhelfen, bei mir funzt es so...

mfg Ceci


  

Betrifft: AW: makro verallgemeinern von: Gerd L
Geschrieben am: 14.04.2007 14:39:29

Hallo Christian,

das Problem mit dem Sheet ist, dass nach dem Chart.add das eingefügte Diagrammblatt das aktive Blatt
ist. Die beiden Range für die Achsenwerte wirst selbst hinkriegen. Oder?

Sub test2()
Dim sh As Object

Set sh = ActiveWorkbook.ActiveSheet
Charts.Add

With ActiveChart
.ChartType = xlColumnClustered
'ywerte
.SetSourceData Source:=sh.Range("A1:A4"), PlotBy:=xlColumns
'xwerte
.SeriesCollection(1).XValues = sh.Range("B1:B3")
.Location Where:=xlLocationAsNewSheet
End With

End Sub



Gruß
Gerd