Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1160to1164
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
Inhaltsverzeichnis

Diagramm Lage festlegen

Diagramm Lage festlegen
Johannes
Hallo Zusammen,
folgendes Problem: ich habe mit Diagrammen meine liebe Not. In der Auswertung müssen die Spalten in denen die Daten für das Diagramm stehen jedesmal neu angelegt werden. Das führt im Diagramm dazu, dass überall #Bezug steht.
Also habe ich überlegt das Diagramm erst zu löschen und dann ein neues anzulegen. Das Problem ist jedoch, dass beim Löschen der Code:
ActiveSheet.ChartObjects("Diagramm 72").Activate
einen Fehler bringt, weil das neu angelegte Diagramm anders heißt.
Frage 1: wie kann ich das Diagramm entfernen, ohne den Namen zu kennen bzw wie kann ich erst den Namen auslesen, um den in eine Variable zu übergeben die ich anstelle des Ausdrucks
("Diagramm 72")
verwenden kann?
Zweite Frage: Beim Anlegen des neuen Diagramms kommen diese Zeilen
ActiveSheet.Shapes("Diagramm 68").IncrementLeft 182.25
ActiveSheet.Shapes("Diagramm 68").IncrementTop -144.75
ActiveSheet.Shapes("Diagramm 68").ScaleWidth 0.9, msoFalse, _
msoScaleFromBottomRight

die wiederum zum Fehler wegen des Namens führen. Wie können diese Angaben hierin untergebracht werden?
Charts.Add
ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
ActiveChart.SetSourceData Source:=Sheets("Rohdaten").Range("K2")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).XValues = "=Rohdaten!R2C4:R120C4"
ActiveChart.SeriesCollection(1).Values = "=Rohdaten!R2C5:R120C5"
ActiveChart.SeriesCollection(1).Name = "=""Soll"""
ActiveChart.SeriesCollection(2).XValues = "=Rohdaten!R2C4:R120C4"
ActiveChart.SeriesCollection(2).Values = "=Rohdaten!R2C6:R120C6"
ActiveChart.SeriesCollection(2).Name = "=""Ist"""
ActiveChart.Location Where:=xlLocationAsObject, Name:="Rohdaten"

Herzlichen Dank schon jetzt für Eure Hilfe
Gruß
Johannes

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

Betreff
Benutzer
Anzeige
AW: Diagramm Lage festlegen
24.06.2010 16:48:25
fcs
Hallo Johannes,
wenn es immer nur das eine Diagrammobjekt im Blatt gibt geht es etwa wie folgt. Man arbeitet dann mit der Zählnummer statt mit den Namen.
Gruß
Franz
Sub aaTest()
Dim wks As Worksheet, oChart As Chart, Zeile As Long, oShape As Shape
Set wks = Sheets("Rohdaten")
'vorhandenes Diagramm löschen
If wks.ChartObjects.Count > 0 Then wks.ChartObjects(1).Delete
With wks
'letzte zeile mit Daten in Spalte 4 (D)
Zeile = .Cells(.Rows.Count, 4).End(xlUp).Row
End With
'Diagramm erstellen
Charts.Add
Set oChart = ActiveSheet
With oChart
.ChartType = xlXYScatterSmoothNoMarkers
.SetSourceData Source:=wks.Range("K2")
.SeriesCollection.NewSeries
.SeriesCollection.NewSeries
.SeriesCollection(1).XValues = "='" & wks.Name & "'!R2C4:R" & Zeile & "C4"
.SeriesCollection(1).Values = "='" & wks.Name & "'!R2C5:R" & Zeile & "C5"
.SeriesCollection(1).Name = "=""Soll"""
.SeriesCollection(2).XValues = "='" & wks.Name & "'!R2C4:R" & Zeile & "C4"
.SeriesCollection(2).Values = "='" & wks.Name & "'!R2C6:R" & Zeile & "C6"
.SeriesCollection(2).Name = "=""Ist"""
.Location Where:=xlLocationAsObject, Name:=wks.Name
End With
'Diagramm positionieren relativ zu Zelle G2
Set oShape = wks.Shapes(wks.ChartObjects(wks.ChartObjects.Count).Name)
With oShape
.Left = wks.Range("G2").Left
.Top = wks.Range("G2").Top
.ScaleWidth 0.9, msoFalse, msoScaleFromTopLeft
End With
End Sub

Anzeige
AW: Diagramm Lage festlegen
24.06.2010 17:51:44
dan
Hallo Johannes,
ich habe nicht ganz verstanden, was Du brauchst, aber habe Dir trotzdem etwas Code geschrieben :-). Hoffentlich findest Du etwas brauchbares dadrinn.
Gruss dan, cz.
Option Explicit
Public Sub Main()
Dim ch As Object
On Error GoTo errMain
' Set ch = AddNewChart(Sheets("Rohdaten").Range("K2"), xlXYScatterSmoothNoMarkers,  _
xlLocationAutomatic, "Rohdaten")
Set ch = AddNewChart(Sheets("Rohdaten").Range("K2"), xlXYScatterSmoothNoMarkers,  _
xlLocationAsObject, "Rohdaten")
If (DeleteChart(chartToDelete:=ch)) Then
MsgBox "Geloescht...", vbInformation
End If
Exit Sub
errMain:
MsgBox Err.Description, vbCritical
End Sub

Private Function AddNewChart(chartSourceRange As Range, chartType As XlChartType, chartLocation  _
As XlChartLocation, workSheetName As String) As Object
Set AddNewChart = Nothing
Dim newChart As Object
Set newChart = Charts.Add ' by default as new graph-sheet
With newChart
.chartType = chartType
.SetSourceData Source:=chartSourceRange
.SeriesCollection.NewSeries
.SeriesCollection.NewSeries
.SeriesCollection(1).XValues = "=Rohdaten!R2C4:R120C4"
.SeriesCollection(1).Values = "=Rohdaten!R2C5:R120C5"
.SeriesCollection(1).Name = "=""Soll"""
.SeriesCollection(2).XValues = "=Rohdaten!R2C4:R120C4"
.SeriesCollection(2).Values = "=Rohdaten!R2C6:R120C6"
.SeriesCollection(2).Name = "=""Ist"""
End With
If (chartLocation = xlLocationAsObject) Then
Set AddNewChart = newChart.Location(Where:=chartLocation, Name:=workSheetName) ' Location  _
method returns chart-object on work-sheet
Else
Set AddNewChart = newChart ' graph-sheet
End If
End Function

Private Function DeleteChart(chartToDelete As Object) As Boolean
DeleteChart = False
If (chartToDelete Is Nothing) Then
Err.Raise vbObjectError + 500, "DeleteChart", "Chart to delete is 'Nothing'"
End If
If (MsgBox("Do you want to delete chart with name :'" + chartToDelete.Name + "'?", vbYesNo, " _
Delete chart")  vbYes) Then
Exit Function
End If
' wir versuchen den chart zu loeschen,
' und da ich keine eigenschaft fand, die sagt wo der chart gerade liegt,
' koennte es in der chart-sheets collection liegen, oder aber als chart-object auf einem der  _
work-sheets
' erstmals die chart-sheets collection
Dim chartItem As Object, index As Integer
index = 1
For Each chartItem In Charts
If (Strings.StrComp(chartItem.Name, chartToDelete.Name) = 0) Then
Charts(index).Delete
DeleteChart = True ' chart war als chart-sheet gefunden und geloescht
Exit Function
End If
index = index + 1
Next chartItem
' dann alle work-sheets und deren chart-object collections
Dim workSheetObject As Worksheet, chart_Object As ChartObject
For Each workSheetObject In ThisWorkbook.Worksheets
index = 1
For Each chart_Object In workSheetObject.ChartObjects
If (Strings.StrComp(chart_Object.Chart.Name, chartToDelete.Name) = 0) Then
workSheetObject.ChartObjects(index).Delete
DeleteChart = True ' chart war als chart-object gefunden und geloescht
Exit Function
End If
index = index + 1
Next chart_Object
Next workSheetObject
End Function

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige