Re: ChartObjects
23.06.2003 13:05:11
Michael
Hallo L.Vira,ich habe ein Macro (sh unten), das mir eine Datenbeschriftung in ein Diagramm einfügt. Das original Macro geht davon aus, dass nur 1 Diagramm in der Tabbele ist und die Daten bei A1 beginnen (Label x y). Im original Code wurde der Datenbereich mit Sheets(1).Range("A1").Select ausgewählt und das Diagramm über ActiveSheet.ChartObjects(1).Activate.
Da ich mehrere Diagramme und Datenbereiche auf einem Tabellenblatt habe versuche ich die absolute adressierung A1 und ChartObjects(1) in eine variable Adressierung umzuwandeln.
Deshalb brauche ich einen Verweis Daten auf Diagramm oder Diagramm auf Daten.
Starten wollte ich indem ich die oberste linke ecke des Datenbereichs aktiviere.
Zur Zeit starte ich im Code mit der Definition des Datenbereichs und müßte nun das zugehörige Diagramm definieren. Da dies, wie du schreibst, ggf aufwendig und mehrdeutig sein kann ist wahrscheinlich der andere Weg sinnvoller - also ich markiere das Diagramm und der zugehörige Datenbereich muß gefunden und activiert werden.
hier der Code:
'modifizierter Code
'variabel: beliebige Tabelle u Diagramm
'1. Datenbeschriftung erzeugen (falls nicht vorhanden)
'2. ändern in Labels
Sub Beschriftung()
'Startbereich u Bereichsdefinition
startzeile = ActiveCell.Row
startspalte = ActiveCell.Column
letztezeile = Cells(ActiveCell.Row, ActiveCell.Column).End(xlDown).Row
'Datenbeschriftung erzeugen
ActiveSheet.ChartObjects(1).Activate
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowValue, LegendKey:=False
'Datenbeschriftung ändern
Dim i As Integer
Dim z As Integer
Dim Label() As String
'variable Lage der Daten/Diagramme - linke obere Ecke ist Überschrift der Labels (L x y)
'orig.Code: Sheets(1).Range("A1").Select
'orig.Code: ActiveSheet.Range(Cells(ActiveCell.Row, ActiveCell.Column)).Select
ActiveSheet.Cells(startzeile, startspalte).Select
'orig.Code: z = Range("A1").CurrentRegion.Rows.Count
z = letztezeile - startzeile + 1
ReDim Label(z - 1)
For i = 2 To z
Label(i - 1) = Cells(i, 1).Value
Next i
ActiveChart.SeriesCollection(1).Formula = _
"=SERIES(" & Sheets(1).Name & "!R1C1," & Sheets(1).Name & _
"!R2C2:R" & z & "C2," & Sheets(1).Name & "!R2C3:R" & z & "C3,1)"
For i = 1 To z - 1
ActiveChart.SeriesCollection(1).Points(i).DataLabel.Select
Selection.Characters.Text = Label(i)
Next i
'orig.Code: Range("A1").Select
ActiveSheet.Cells(startzeile, startspalte).Select
End Sub
Danke
Michael