Anzeige
Archiv - Navigation
1268to1272
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

FormatConditions per VBA übertragen

FormatConditions per VBA übertragen
Thomas
Da ich in den vergangenen zwei Tagen nicht herausgefunden habe, wie man eine eigene Methode für ein bestehendes Excel-2000-Objekt schreiben kann, glaube ich, dass es nicht geht.
Ich als OOP-Linkshänder habe mir dann folgendes geschrieben, um die bedingten Formatierungen einer Beispielzelle auf beliebige andere Zellen übertragen zu können:

Dim seiten(1 To 4) As Long              ' die Seiten einer Zelle
Dim i, j, k As Byte
Public bedfrmgrpA As FormatConditions
With Cells(bspzeile1, bspspalte1)
Set bedfrmgrpA = .FormatConditions
End With
seiten = Array(xlRight, xlTop, xlBottom, xlLeft)
For i = zeile1 + 2 To zeile1 + zahljegruppe
With Cells(i, spalte1).FormatConditions
.Delete
' folgendes löst dann Fehler 1004, "Anwendungs- oder objektdefinierter Fehler" aus:
.Add Type:=bedfrmgrpA.Item(1).Type, Operator:=bedfrmgrpA.Item(1).Operator, _
Formula1:=bedfrmgrpA.Item(1).Formula1, Formula2:=bedfrmgrpA.Item(1). _
Formula2
' so als gäbe es irgendwelche angesprochenen Objekte nicht
.Add Type:=bedfrmgrpA.Item(2).Type, Operator:=bedfrmgrpA.Item(2).Operator, _
Formula1:=bedfrmgrpA.Item(2).Formula1, Formula2:=bedfrmgrpA.Item(2). _
Formula2
.Add Type:=bedfrmgrpA.Item(3).Type, Operator:=bedfrmgrpA.Item(3).Operator, _
Formula1:=bedfrmgrpA.Item(3).Formula1, Formula2:=bedfrmgrpA.Item(3). _
Formula2
End With
For j = 1 To 3
With Cells(i, spalte1).FormatConditions(j)
For k = 1 To 4
With .Borders(seiten(1))
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 6
End With
Next k
With .Font
.Bold = bedfrmgrpA.Item(j).Font.Bold
.Color = bedfrmgrpA.Item(j).Font.Color
.ColorIndex = bedfrmgrpA.Item(j).Font.ColorIndex
.FontStyle = bedfrmgrpA.Item(j).Font.FontStyle
.Italic = bedfrmgrpA.Item(j).Font.Italic
.Strikethrough = bedfrmgrpA.Item(j).Font.Strikethrough
.Underline = bedfrmgrpA.Item(j).Font.Underline
End With
With .Interior
End With
End With
Next j
Next i
Kann mir mal jemand einen Dupps in den Nacken geben?
Thomas

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

Betreff
Benutzer
Anzeige
Hier kommt der Dupps! ;-)
22.06.2012 22:47:41
Luc:-?
Hallo Thomas;
wohl Fußballmuffel!? ;-)
Erst mal Anerkennung, dass du bei dem von dir angegebenen Level (falls es denn stimmt) so weit gekommen bist. Leider ist das Ganze noch etwas komplizierter, denn du musst einiges auf Existenz prüfen bevor du es übertragen kannst (wie du anscheinend schon selbst vermutet hast).
Formula2 zB kommt nur bei Type=1 und den 1.beiden Operatoren vor (xlBetween/xlNotBetween). In allen anderen Fällen kann die Übergabe dieses Parameters einen Fehler auslösen.
Ebenso kann es gehen, wenn bei Type=2 ein Operator übergeben wird (der dann ja ebenso wie Formula2 eigentl gar nicht existiert, was wohl jeweils den Fehler auslöst, denn reale Übergaben wdn in diesen Fällen normalerweise ignoriert).
Was die Borders betrifft, hast du die richtigen Konstanten verwendet (man muss da aufpassen, denn die Pgmierer des FormatCondition-Objekts haben hier nicht die Reserven der normalen Borders-Enumeration [xlEdgeLeft…] genutzt, sondern dummerweise eigene Konstt erfunden). Allerdings klappt das auch nur, wenn diese auch vorhanden sind.
Das Vorhandensein all dieser Objekte und Eigenschaften kann man bis Xl11 normalerweise mit If IsNull(…) Then überprüfen, wobei man sich bei Borders primär am LineStyle orientieren sollte, denn für Weight ist meist ein Default-Wert voreingestellt. Bei den Farben kann hier xlAutomatic voreingestellt sein.
Allerdings kann Null auch bedeuten, dass mehrere unterschiedl Formatierungen der jeweiligen Art eingestellt wurden. Das ist bis Xl11 beim FormatCondition-Objekt aber nur bei der Borders-Eigenschaft (alle 4 Rahmen) möglich. Man kann da so ermitteln, ob die EinzelRahmen ggf unterschiedl sind, falls das Objekt überhpt existiert.
Leider hat sich auch das mit Xl12 verändert, was du beachten musst, wenn du die Datei mal auf diese Versionen umstellen musst. U.a. ergeben unterschiedl bzw fehlende Elemente nicht mehr Null, sondern etwas Anderes, das auch bei anderen Gegebenheiten mögl ist.
Summa summarum: Solche Operationen verursachen ziemlich viel PgmierAufwand!
Was sonst noch so alles passieren kann, wirst du schon noch herausfinden — Formate sind ein aufwendiges und weites Feld, was auf Grund der neuen Oberfläche ab Xl12 auch manch überraschende Abweichung vom Gewohnten bereithält.
Viel Erfolg! Gruß Luc :-?
Anzeige
Übrigens, ...
23.06.2012 00:40:16
Luc:-?
hier hast du auf die beiden letzten Beiträge zum gleichen Thema nicht mehr geantwortet! :-|
Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige