Bedingte Formatierung und VBA II

Moin nochmal,

also das unten gepostete Problem habe ich nun gelöst, auch wenn´s ein bisschen dreckig ist. Nun hat sich aber ein weiteres Problem gezeigt:

Ich kommen per VBA an die Rahmen -Definitionen für die drei Bedingungen nicht richtig ran! Ich hätte jetzt den folgenden Code für zielführend gehalten:

ActiveCell.FormatConditions(1).Borders(xlEdgeLeft).Weight = xlThin

Aber Pustekuchen. Das Borders-Objekt der bedingten Formate scheint anders gestrickt zu sein als das der normalen Zell-Formate. Bei der bedingten Variante kann ich nur auf alle vier Rahmen gleichzeitig zugreifen (oben, unten, rechts, links), z.B. so:

ActiveCell.FormatConditions(1).Borders.LineStyle = xlDashDot
MsgBox ActiveCell.FormatConditions(1).Borders.Weight

Letzteres schlägt auch noch fehl, wenn die abgefragte Eigenschaft nicht für alle vier Rahmenelemente identisch ist.

Ein Blick in die Hilfe zum FormatCondition-Objekt führt hier eher zu noch größerer Verwirrung. Da ist plötzlich von einem Border-Objekt (ohne „s“) zu lesen, das angeblich die Eingeschaften Bottom, Top, Left und Right aufweist, was in meinen Augen allerdings Käse ist.

Frage: Bin ich zu blöde, oder haben wir es hier wirklich mit einer etwas sonderbaren und vor allem unvollständigen Implementierung der bedingten Rahmen-Definitionen zu tun?

Kristian

wie beim 6 :smile:
Hallo Kristian,
wie sieht denn deine „dreckige“ Lösung aus? *interessiert schau*
Gruß
Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Kristian,
ich hab mal woanders gefragt, vielleicht hilft dir ja die dortige Antwort weiter.
Gruß
Reinhard

wie du das mit vba lösen kannst, weiss ich nicht.
wenn du dich mit den excel4 makros ein wenig auskennst, müsste es ohne vba klappen.
typ 9,10,11,12 sind interessant für dich.

Syntax

ZELLE.ZUORDNEN(Typ; Bezug)

Typ ist eine Zahl, die angibt, welchen Typ die zu der Zelle gelieferten Informationen haben sollen. In der folgenden Liste sind sowohl die Werte, die Typ annehmen kann, als auch die zugehörigen Ergebnisse zusammengestellt.

Typ Liefert

1 Den absoluten Bezug der oberen linken Zelle von Bezug; der Bezug liegt als Zeichenfolge und in der für den aktuellen Arbeitsbereich definierten Schreibweise vor.
2 Die Zeilennummer der obersten Zelle von Bezug.
3 Die Spaltennummer der äußerst linken Zelle von Bezug.
4 Dasselbe wie TYP(Bezug).
5 Den Inhalt von Bezug.
6 Die in Bezug stehende Formel als Zeichenfolge entweder in der A1- oder in der Z1S1-Schreibweise (hängt von der Einstellung des Arbeitsbereichs ab).

7 Das Zahlenformat der Zelle als Zeichenfolge (zum Beispiel „T/M/JJ“ oder „Standard“).
8 Eine Zahl, die die horizontale Ausrichtung der Zelle angibt:
1 = Standard
2 = Linksbündig
3 = Zentriert
4 = Rechtsbündig
5 = Ausfüllen
6 = Bündig anordnen
7 = Zentriert über Markierung
9 Eine Zahl, die die Linienart angibt, die dem linken Rand der Zelle zugeordnet ist:
0 = Kein Rahmen
1 = Dünne Linie
2 = Mittlere Linie
3 = Unterbrochene Linie
4 = Gepunktete Linie
5 = Dicke Linie
6 = Doppelte Linie
7 = Haarlinie

10 Eine Zahl, die die Linienart angibt, die dem rechten Rand der Zelle zugeordnet ist; Beschreibungen zu den gelieferten Zahlen finden Sie bei Typ 9.
11 Eine Zahl, die die Linienart angibt, die dem oberen Rand der Zelle zugeordnet ist; Beschreibungen zu den gelieferten Zahlen finden Sie bei Typ 9.
12 Eine Zahl, die die Linienart angibt, die dem unteren Rand der Zelle zugeordnet ist; Beschreibungen zu den gelieferten Zahlen finden Sie bei Typ 9.

vieleicht hilfts dir ja weiter.

ransi

wie sieht denn deine „dreckige“ Lösung aus? *interessiert schau*

Ich lasse mir die angegebenen Formeln einfach ausrechnen, und zwar in einer bzw. zwei Zellen des entsprechenden Blattes. Das ist das „dreckige“ daran, denn ich weiss ja nicht, ob zufällig doch jemand die Zellen ganz unten rechts benutzt (IV65535 und IV65536). Die Evaluate-Funktion hilft hier allerdings leider nicht weiter. Die scheint nur mit einfachen Operatoren klarzukommen.

Abgesehen davon ist es natürlich recht aufwendig, das Zeug auszurechnen, wenn es sich nicht um „Formel ist“ handelt, sondern um „Zellwert ist“, weil ich da jeden der mögliche Operatoren durchticken muss.

Naja, und am Ende nützt das alles gar nichts, weil ich an die blöde Rahmen-Formatierung nicht rankomme :frowning:

Kristian

Das hilft leider auch nicht. - o.w.T.
owT

Hallo Kristian,
was hälst du eigentlich von:

 With Selection.FormatConditions(1).Borders(xlLeft)
 .LineStyle = xlContinuous
 .Weight = xlThin
 .ColorIndex = xlAutomatic
 End With
 With Selection.FormatConditions(1).Borders(xlTop)
 .LineStyle = xlContinuous
 .Weight = xlThin
 .ColorIndex = xlAutomatic
 End With
 With Selection.FormatConditions(1).Borders(xlBottom)
 .LineStyle = xlContinuous
 .Weight = xlThin
 .ColorIndex = xlAutomatic
 End With

und das Auslesen der Bedingung die grad zutrifft, ich verstehe nicht warum du das in Zellen machst, hab grad wenig Zeit für Excel, aber kann dir gern was basteln morgen oder so, sag Bescheid.
Gruß
Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moin Reinhard,

Du hast als Parameter „xlLeft“ verwendet statt „xlEdgeLeft“. Mit letzterem (den man für „normale“ Rahmen verwendet) hatte es nicht funktioniert, aber ich werde es mal probieren. Wäre ja toll, wenn es ginge, allerdings auch komisch, warum hier andere Bezeichnungen verwendet werden.

und das Auslesen der Bedingung die grad zutrifft, ich verstehe
nicht warum du das in Zellen machst, hab grad wenig Zeit für
Excel, aber kann dir gern was basteln morgen oder so, sag Bescheid.

Also wenn Du was besseres weisst, dann bin ich sehr interessiert. Aber entweder gibt´s nichts besseres, oder es ist zu warm momentan hier in Köln :wink:

Kristian

Jo, funktioniert prächtig ohne „Edge“. Habe die passenden Konstanten nun auch in der Hilfe entdeckt.

Jetzt bin ich nunr noch gespannt, wie Du die Bedingungen prüfen willst, ohne die entsprechenden Formeln in einer Zelle ausrechnen zu lassen :wink:

Kristian