Hallöchen,
in einem zweidimensionalen Array sammele ich die Eigenschaften eines größeren Ranges. Ich sammele die bedingten Formatierungen in einer Schleife und frage diese hinterher ab. Wenn etwas zutrifft, wird der betreffende Bereich verändert. Ich habe 6 verschieden Zuständen in der etwas zutreffen kann und jeweils was anderes verändert wird. Bsp: Ich frage ab, ob FormatCondition.Interior.Pattern <> Grid ist UND Hintergrundfarbe gelb. Oder FormatCondition.Font.Color = rot ist UND Hintergrundfarbe NICHT gelb.
An sich funktioniert dies ganz gut. Leider habe ich das Problem, dass manchmal Eigenschaften gar nicht gesetzt werden. Trotzdem muss ich diese in einer Schleife abfragen. Wenn die Eigenschaften nicht gesetzt sind, laufe ich auf einen Fehler hinaus. Dieser kann lauten "In System.AccessViolationException ist eine Ausnahme vom Typ "mscorlib.dll" aufgetreten, doch wurde diese im Benutzercode nicht verarbeitet." Oder aber auch "Die LineStyle-Eigenschaft des Borders-Objektes kann nicht zugeordnet werden." Z.B: hat FormatCondition.Interior.Pattern nicht immer einen Wert. In einem Fall DBNull oder auch gar nichts.
Hat jemand einen guten Tipp parat? Vielen Dank schon einmal.
in einem zweidimensionalen Array sammele ich die Eigenschaften eines größeren Ranges. Ich sammele die bedingten Formatierungen in einer Schleife und frage diese hinterher ab. Wenn etwas zutrifft, wird der betreffende Bereich verändert. Ich habe 6 verschieden Zuständen in der etwas zutreffen kann und jeweils was anderes verändert wird. Bsp: Ich frage ab, ob FormatCondition.Interior.Pattern <> Grid ist UND Hintergrundfarbe gelb. Oder FormatCondition.Font.Color = rot ist UND Hintergrundfarbe NICHT gelb.
An sich funktioniert dies ganz gut. Leider habe ich das Problem, dass manchmal Eigenschaften gar nicht gesetzt werden. Trotzdem muss ich diese in einer Schleife abfragen. Wenn die Eigenschaften nicht gesetzt sind, laufe ich auf einen Fehler hinaus. Dieser kann lauten "In System.AccessViolationException ist eine Ausnahme vom Typ "mscorlib.dll" aufgetreten, doch wurde diese im Benutzercode nicht verarbeitet." Oder aber auch "Die LineStyle-Eigenschaft des Borders-Objektes kann nicht zugeordnet werden." Z.B: hat FormatCondition.Interior.Pattern nicht immer einen Wert. In einem Fall DBNull oder auch gar nichts.
Hat jemand einen guten Tipp parat? Vielen Dank schon einmal.
VB.NET-Quellcode
- Dim dings As Excel.Range 'Zählvariable, durchläuft alle Zellbereiche
- Dim arrBFs(,) As Microsoft.Office.Interop.Excel.FormatCondition 'Array zum Sammeln aller bedingten Formatierungen
- 'BEREICH SELEKTIEREN
- rngSelectedRange = app.Selection
- 'WERT ZUWEISEN
- j = 0
- n = 0
- nDings = rngSelectedRange.Count
- ReDim arrDings(0 To (nDings - 1))
- ReDim sIntColor(0 To (nDings - 1))
- ReDim arrBFs(0 To (nDings - 1), 10)
- 'WERTE IN ARRAY SAMMELN
- For Each dings In rngSelectedRange
- 'WERT ZUWEISEN
- arrDings(n) = dings.MergeCells And dings.MergeArea.Cells(1, 1).Address = dings.Address And dings.FormatConditions.Count > 0
- 'BEI ÜBEREINSTIMMUNG AKTIVIEREN (Falls Bereich Zellverbund beinhaltet)
- If arrDings(n) = True Then
- 'WERT ZUWEISEN
- sIntColor(n) = If(CStr(dings.Interior.Color.ToString), "")
- ncond = dings.FormatConditions.Count
- 'SCHLEIFE STARTEN (Wert zuweisen, Array füllen mit bedingten Formatierungseigenschaften)
- For j = 1 To ncond
- arrBFs(n, j - 1) = dings.FormatConditions(j)
- 'sBF_BorderLinestyle(n,j - 1) = If(CStr(dings.FormatConditions(j).Borders.LineStyle.ToString),"")
- Next j
- End If
- 'WERT ZUWEISEN
- n = n + 1
- Next dings
- 'WERT ZUWEISEN
- j = 0
- n = 0
- 'usw.
- 'SCHLEIFE STARTEN (Zellbereiche durchsuchen)
- For Each dings In rngSelectedRange
- 'BEI ÜBEREINSTIMMUNG AKTIVIEREN (Falls Bereich Zellverbund beinhaltet)
- If arrDings(n) = True Then
- 'WERT ZUWEISEN
- ncond = dings.FormatConditions.Count
- 'SCHLEIFE STARTEN (Rangfolge bedingter Formatierung)
- For j = 1 To ncond
- 'BF-REGEL BESTIMMEN (Regel "A" (Schriftfarbe Weiß))
- If arrBFs(n, j - 1).Interior.Pattern <> XlPattern.xlPatternGrid Then 'HIER FUNKTIONIERT ES NICHT BEI DB NULL!
- arrBFs(n, j - 1).Interior.Pattern.ToString <> CStr(15) And _
- arrBFs(n, j - 1).Interior.Color.ToString = CStr(RGB(255, 255, 255)) Then
- 'usw
Dieser Beitrag wurde bereits 12 mal editiert, zuletzt von „Soti“ ()