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

Laufzeitfehler 9

Laufzeitfehler 9
23.12.2015 17:16:27
Fri
Hallo Zusammen,
ich brauche Eure Hilfe ....
Mit Hilfe dieses Forums habe ich für Excel 2007 ein Routine geschrieben, die in Abhängikeit von dem Wert eines Diagramm die Farbe der Markierung ändert.
Anbei der Code:
Sub FarbigMachen()
Dim i As Long
With ActiveSheet.ChartObjects("Diagramm 5").Select
With ActiveChart.SeriesCollection(1)
For i = 1 To .Points.Count
Select Case Temp(i, 1)
Case Is = 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40,  _
_
42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88,  _
90, 92, 94, 96, 98, 100: Farbe = RGB(36, 56, 127)
Case Is = 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39,   _
_
41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87,  _
89, 91, 93, 95, 97, 99: Farbe = RGB(143, 212, 0)
Case Else: Farbe = RGB(0, 0, 0)
End Select
.Points(i).MarkerForegroundColor = Farbe
.Points(i).MarkerBackgroundColor = Farbe
Next
End With
End With
End Sub
Dabei habe ich zwei Probleme, die ich nicht gelöst bekomme:
1.) Ab dem 32 Datensatz bekomme ich den Fehler
"Laufzeitfehler '9': Index Außerhalb des gültigen Bereiches"
Die Variable i ist mit Log deklariert, das kann also nicht das Problem sein. Ich habe die Schleife auch mal fix bis zu eienm Wert laufen lassen mit
For i = 1 To 31
Ab dem Wert 32 kommt der Fehler, bis dahin alles gut
Woran kann das liegen ?
2.) Das ist kein echtes Problem, ich habe es durch ein Workaround gelöst bekommen, aber es muss irgendwie eleganter gehen. Es geht um die Case-Abfrage, ich möchte sagen, wenn der Wert gerade ist, dann Farbe = RGB(36, 56, 127), wenn ungerade dann Farbe = RGB(143, 212, 0). Aber irgebndwie kriege ich das nicht hin.
Es wäre super, wenn ihr mir da helfen könntet.
Danke udn viele Grüße
Fco

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 9
23.12.2015 17:31:57
Sepp
Hallo Fritz,
was ist Temp()?
Probier es so.
Sub FarbigMachen()
Dim lngIndex As Long

With ActiveSheet.ChartObjects("Diagramm 5").Chart.SeriesCollection(1)
  For lngIndex = 1 To .Points.Count
    If lngIndex Mod 2 = 0 Then
      .Points(lngIndex).MarkerForegroundColor = RGB(36, 56, 127)
      .Points(lngIndex).MarkerBackgroundColor = RGB(36, 56, 127)
    Else
      .Points(lngIndex).MarkerForegroundColor = RGB(143, 212, 0)
      .Points(lngIndex).MarkerBackgroundColor = RGB(143, 212, 0)
    End If
  Next
End With

End Sub

Gruß Sepp

Anzeige
AW: Laufzeitfehler 9
24.12.2015 10:30:20
Fri
Hallo Sepp,
super, Danke für Deine Hilfe, es klappt prima, macht genau das was ich will.
Was Temp() ist, kann ich Dir leider nicht sagen, weil ich die Routine so von meinem Vorgänger übernommen habe, wahrscheinlich kann ich die weglassen.
Jetzt kreisen zu Weihnachten meiene Gedanken nicht umExcel :-)
Frohe Weihnachten
Fco

AW: Laufzeitfehler 9
26.12.2015 12:15:01
Fri
Hallo Sepp.
ich muss mich leider korrigieren, es klappt nicht ganz so, er prüft jetzt Wert der Schelife (also den Laufindex) auf ungerade bzw. gerade, nicht den Wert der Punktes des Diagramms.
Wenn ich das enstprechend anpasse:
Sub FarbigMachen()
Dim Temp
Dim lngIndex As Long
Temp = Range("G8:G38").Value
With ActiveSheet.ChartObjects("Diagramm 5").Chart.SeriesCollection(1)
For lngIndex = 1 To .Points.Count
If Temp(i, 1) Mod 2 = 0 Then
.Points(lngIndex).MarkerForegroundColor = RGB(36, 56, 127) '(36, 56, 127)
.Points(lngIndex).MarkerBackgroundColor = RGB(36, 56, 127)
Else
.Points(lngIndex).MarkerForegroundColor = RGB(143, 212, 0)
.Points(lngIndex).MarkerBackgroundColor = RGB(143, 212, 0) '(143, 212, 0)
End If
Next
End With
End Sub

Kommt leider der gleiche Fehler :-(
Im Bereich G8:G38 steht der Datenwert der Datenreihe, dieser soll auf gerade/ungerade geprüft werden
Hasse noch ein Tipp ?
Gruß
Fco

Anzeige
AW: Laufzeitfehler 9
23.12.2015 17:33:05
Nepumuk
Hallo,
so z.B.:
If Temp(i, 1) Mod 2 = 0 Then
    .Points(i).MarkerForegroundColor = RGB(36, 56, 127)
Else
    .Points(i).MarkerForegroundColor = RGB(143, 212, 0)
End If

Gruß
Nepumuk

Anzeige
AW: Laufzeitfehler 9
26.12.2015 12:17:08
Fri
Hallo Nepumuk,
klappt leider nicht, laufe immer noch in den gleichen Fehler :-(
Gruß
Fco

AW: Laufzeitfehler 9
26.12.2015 13:04:23
Sepp
Hallo Fritz,
dann so.
Sub FarbigMachen()
Dim lngIndex As Long, varValues As Variant

With ActiveSheet.ChartObjects("Diagramm 5").Chart.SeriesCollection(1)
  varValues = .Values
  For lngIndex = 1 To .Points.Count
    If varValues(lngIndex) Mod 2 = 0 Then
      .Points(lngIndex).MarkerForegroundColor = RGB(36, 56, 127)
      .Points(lngIndex).MarkerBackgroundColor = RGB(36, 56, 127)
    Else
      .Points(lngIndex).MarkerForegroundColor = RGB(143, 212, 0)
      .Points(lngIndex).MarkerBackgroundColor = RGB(143, 212, 0)
    End If
  Next
End With

End Sub

Gruß Sepp

Anzeige
AW: Laufzeitfehler 9
26.12.2015 16:13:34
Fri
Hallo Zusammen,
ich denek ich habe es hingekriegt mit den Tipps von Sepp und Nepumuk, das Resultat ist
Sub FarbigMachen ()
Dim lngIndex As Long, varValues As Variant
For j = 1 To ActiveSheet.ChartObjects(1).Chart.SeriesCollection.Count
Select Case ActiveSheet.ChartObjects("Diagramm 5").Chart.SeriesCollection(1).Name
Case Is = Range("MS_Phase1").Value: Temp = Range("G8:G32").Value
Case Is = Range("MS_Phase1").Value: Temp = Range("G34:G43").Value
Case Is = Range("MS_Phase1").Value: Temp = Range("G45:G54").Value
Case Is = Range("MS_Phase1").Value: Temp = Range("56:G65").Value
Case Is = Range("MS_Phase1").Value: Temp = Range("G67:G76").Value
Case Is = Range("MS_Phase1").Value: Temp = Range("G78:G87").Value
End Select
With ActiveSheet.ChartObjects("Diagramm 5").Chart.SeriesCollection(j)
varValues = .Values
For lngIndex = 1 To .Points.Count
If varValues(lngIndex) Mod 2 = 0 Then
.Points(lngIndex).MarkerForegroundColor = RGB(36, 56, 127)
.Points(lngIndex).MarkerBackgroundColor = RGB(36, 56, 127)
Else
.Points(lngIndex).MarkerForegroundColor = RGB(143, 212, 0)
.Points(lngIndex).MarkerBackgroundColor = RGB(143, 212, 0)
End If
Next
End With
Next
Ich musste für die richtigen Datenreihen die entsprechende Serie ansprechen, da sich der Name aber verändern kann, habe ich den Namen über eine Variable abgefangen (MS_Phase1 bis 6). Ich glaueb das Ganze geht bestimmt elegenater, aber es funktioniert !!
Danke Euch beiden
Gruß
Fco
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige