Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1148to1152
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

Loeschen SerieCollection Name Index

Loeschen SerieCollection Name Index
Andi
Hallo,
anbei eine Lösung wie man ein oder mehrere Datenreihen (Kriterium: Datenreihe Name) löschen kann.
Da ich im Netz mehr oder weniger nur brökchenweise etwas brauchbares gefunden habe, stelle ich meine Variante ins Net. Verbesserungen sind willkommmen.
Mit Chart Objekten zu arbeiten ist ziemlich aufwendig, wenn man nichts weis, da die unabhängig von VBA ein regelrechtes Eigenleben haben.
Anrregungen und Verbesserungen sind erwünscht.
Gruß Andi
Funtion Datenreihenloeschen()
arrA = Split("Reihenname1, Reihenname2, Reihenname3, Reihenname_nn", ",")
Set sheet1 = Activesheet
Set oChartReport = sheet1.ChartObjects(1).Chart
'Loeschen einer Reihe via VBA nur möglich, wenn jede Reihe mindestens einen Wert besitzt!
For i = 4 To 12
If sheet1.Cells(i, 15) = "" Then
sheet1.Cells(i, 15) = 0
End If
Next
'Der eigentliche Loeschalgorithmus für bestimmte Datenreihen
'Da bei jedem Loeschvorgang der Index der SeriesCollection unbahängig von VBA durch das 'Steuerelement ChartObjekt neu gesetzt wird,
'aber nur über den Index ein Chart Elememt geloescht werden kann, muß VBA nach dem Loeschen 'einer Datenreihe über eine Testschleife die gültigen und vorhandenen Indexe der übrigen
'Reihe initieren. Entspricht der neue Index dem Kriterium der zu löschenden Datenreihe, 'Datenreihe löschen. Der Algorithmus wiederholt sich gem. der Anzahl zu löschenden 'Datenreihen (Name)
found = False
For n = 0 To UBound(arrA())
On Error Resume Next
For i = oChartReport.SeriesCollection.Count To 1 Step -1
If i ungleich 0 Then
If InStr(oChartReport.SeriesCollection(i).Name, arrA(n)) istgroesser 0 Then
If Err.Number = 0 Then
t = i
found = True
Exit For
End If
End If
End If
Next
On Error GoTo 0
If found = True Then
oChartReport.SeriesCollection(t).Delete
found = False
End If
Next
Set oChartReport = Nothing
Set Sheet = Nothing
End Function

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Loeschen SerieCollection Name Index
30.03.2010 13:49:36
fcs
Hallo Andi,
hier eine etwas kürzere Fassung. Durch Tauschen der For-Next-Schleifen (Series außen, Namens-Array innen) erspart man sich einiges an Problemen.
Das Problem mit "Datenreihe ohne Werte kann nicht gelöscht werden" kann ich nicht nachvollziehen.
Gruß
Franz
Function Datenreihenloeschen()
Dim ArrA, sheet1 As Object, oChartReport As Chart
Dim i As Long, n As Long
On Error GoTo Fehler
ArrA = Array("Reihenname1", "Reihenname2", "Reihenname3", "Reihenname18")
Set sheet1 = ActiveSheet
Set oChartReport = sheet1.ChartObjects(1).Chart
For i = oChartReport.SeriesCollection.Count To 1 Step -1
For n = LBound(ArrA) To UBound(ArrA)
If LCase(oChartReport.SeriesCollection(i).Name) = LCase(ArrA(n)) Then
oChartReport.SeriesCollection(i).Delete
End If
Next
Next
Set oChartReport = Nothing
Set sheet1 = Nothing
Err.Clear
Datenreihenloeschen = True
Fehler:
With Err
Select Case .Number
Case 0 'Alles OK
Case 9999 'ggf. weitere Fehler-Nrn abfragen mit Resume-Aktionen
Case Else
MsgBox "Fehler Nr. : " & .Number & vbLf & .Description
Datenreihenloeschen = False
End Select
End With
End Function

Anzeige
AW: Loeschen SerieCollection Name Index
31.03.2010 16:43:31
Andi
Hi Franz,
Danke und zweites Danke für das Makebeauty.
Für die Function Datenreihenloeschen wird ein Booleanwert übergeben. Dient das letztendlich nur dem ErrHandler? Warum wird das getan? Ist das quasi indirekt ein "Exit Function" Anweisung?
Das darf in meinem Fall nicht sein!
Kurioser Weise sind die Indexe meiner Datenreihe nicht um den Wert "eins" aufsteigend.
Also nicht Index 1,2,3,4 sondern 3,4,5,10. Meine Schleife löscht die DR Index 5, das Chart Object vergibt implizit neue Indexe, übrig sollten sein 3,4,10, neu kommischerweise 3,4,5. Da jetzt der alte Index 5 den Index 10 ersetzt, muß die VBA Schleife den Index 5 nochmals löschen, weil diese Datenreihe dummerweise meinem Kriterium entspricht. Also muß ich die ganze Prozedur wieder von vorne Starten. Deshalb sind die For Next Schleifen bei mir vertauscht. Der Boolean "Found" und die Err Funktionalität benutze ich genau dafür, um diesen Fall abzufangen.
Gruß Andi
Anzeige
AW: Loeschen SerieCollection Name Index
31.03.2010 18:50:59
fcs
Hallo Andi,
die zuweisung eines Wertes dient hier in der Tat der Fehlerbehandlung. Abhängig vom Ergebnis kann man dann in der Aufrufeneden Prozedur Makro-Aktionen gezielt steuern.
Wenn du es nicht brauchst, dann kannst du es weglassen.
Warum du etwas ungewöhnliche Indizes bei den Reihen hast ?
Klar ist, dass nach dem Löschen jeder Reihe neu indiziert wird. Wenn du dann eine Reihe aus der Mitte bzw. nicht die letzte Reihe löscht, dann werden die verbleibenden Reihen neu indiziert, da die Lücke wieder gefüllt werden muss. Beim Vertauschen der beiden For-Schleifen stört das nicht mehr, da in der nächsten Schleife die Reihe mit der nächst kleineren Index Nummer bearbeitet wird, die von der Neu-Indizierung der Reihen nicht betroffen ist.
Gruß
Franz
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige