Seite 1 von 1
Bedingte Formatierung
Verfasst: So, 27.02.2011 18:30
von erikafuchs
Ihr Lieben,
noch drei Probleme:
1. kann man per Makro eine bedingte Formatierung erstellen? Mein Makro erzeugt neue Calc Dateien. Ich möchte erreichen, dass sich Zellen grün färben wenn ein Wert eingegeben wird.
2. Für diese Grünfärbung muss ich auf meinem Computer ja eine Formatvorlage erstellen. Die obengenannten Dateien muss ich aber verteilen. Wenn die Empfänger diese Formatvorlage nicht haben, geht das nicht ... oder doch?
3. Meine Datenempfänger nutzen dann wahrscheinlich auch noch Excel ... dann geht das gar nicht mehr... oder?
Viele Grüße
Pit
Re: Bedingte Formatierung
Verfasst: So, 27.02.2011 19:41
von Karolus
Hallo
1. Ja, sieh nach bei Dannenhöfer.
2. Eine Formatvorlage ist Bestandteil der Datei !
3. Ausprobieren
Gruß Karo
Re: Bedingte Formatierung
Verfasst: So, 27.02.2011 21:11
von erikafuchs
Lieber Carolus,
vielen dank!
Karolus hat geschrieben:
Ja, sieh nach bei Dannenhöfer.
??? Wer ?
Grüße
Pit
Re: Bedingte Formatierung
Verfasst: So, 27.02.2011 21:48
von Karolus
Re: Bedingte Formatierung
Verfasst: So, 27.02.2011 22:44
von turtle47
Hallo,
Karolus hat geschrieben:Eine Formatvorlage ist Bestandteil der Datei !
Pit erzeugt eine neue Datei in der er die BF erstellen möchte.
erikafuchs hat geschrieben: Mein Makro erzeugt neue Calc Dateien. Ich möchte erreichen, dass sich Zellen grün färben wenn ein Wert eingegeben wird.
Beigfügt mal ein Code dessen Ursprung von Karolus ist.
Der Code erzeugt zunächst eine Pseudozelle mit Wert und Hintergrundfarbe aus der dann eine Zellvorlage generiert wird.
Danach wir die BF den vorgegebenen Zellbereichen zugewiesen. Anschliessend wird die Pseudozelle zurückgesetzt.
Code: Alles auswählen
Global iTab as Integer
Global oDocument as object
Global oCell as object
Global oPseudoCell as String
Sub bedingteFormatierung
oDocument = ThisComponent
iTab = 0 'Tabellenblattindex
oPseudoCell = "E5"
osheet = oDocument.sheets(iTab)
oCell = osheet.getcellRangebyName(oPseudoCell)
oCell.value = 6
oCell.cellbackcolor = 4057917
oDocument.CurrentController.Select(oCell)
neuVorlageausSelektion(oCell.value)
oDocument.CurrentController.Select(-1)
dim ibereich as variant
ibereich() = array("A1:A3","C1:C3")'Zellbereiche für BF
for i = 0 to ubound(ibereich())
bereich = oDocument.sheets(iTab).getcellrangebyname(ibereich(i)).getrangeaddress
formatierung(bereich,iTab)
next i
oCell.clearContents(255)'Reset Pseudozelle
msgbox "Die Kürzel sind übertragen und die bedingte Formatierung ist eingerichtet. ", 68, " Bestätigung"
end sub
function formatierung(bereich,tabindex)
dim BedingtFormat as Object
with bereich
erstSp = .startColumn
erstzei = .startRow
endSpa = .EndColumn
endZei = .EndRow
end with
dim Zellformat(3) as New com.sun.star.beans.PropertyValue
Zellformat(0).Name = "Operator"
Zellformat(0).value = com.sun.star.sheet.ConditionOperator.EQUAL
Zellformat(1).Name = "Formula1"
Zellformat(2).Name = "StyleName"
for sp = erstSp to endSpa
for ze = erstzei to endZei
BedingtFormat = oDocument.sheets(tabindex).getcellbyPosition(sp,ze).ConditionalFormat
ocell2 = thisComponent.sheets(tabindex).getcellRangebyName(oPseudoCell).string
Zellformat(1).value = ocell2
Zellformat(2).value = ocell2
BedingtFormat.addNew(Zellformat())
thiscomponent.sheets(tabindex).getcellbyPosition(sp,ze).ConditionalFormat = BedingtFormat
next ze
next sp
end function
function neuVorlageausSelektion(vorlagenname as string)
dim document as object
dim dispatcher as object
document = oDocument.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Param"
args1(0).Value = vorlagenname
args1(1).Name = "Family"
args1(1).Value = 2
dispatcher.executeDispatch(document, ".uno:StyleNewByExample", "", 0, args1())
end function
Viel Erfolg.
Jürgen
Re: Bedingte Formatierung
Verfasst: So, 27.02.2011 22:47
von erikafuchs
Lieber Karo,
wieder was dazugelernt!
Lieber Jürgen
danke, da muss ich mich jetzt erstmal durcharbeiten.
Grüße von
Pit
Re: Bedingte Formatierung
Verfasst: Mo, 28.02.2011 08:07
von Karolus
Hallo
Beigfügt mal ein Code dessen Ursprung von Karolus ist.

Oh - den Senf hab ich mal zusammengestopft - hoffentlich hab ich mich gebessert.
Gruß Karo
Re: Bedingte Formatierung
Verfasst: Mi, 16.03.2011 17:46
von erikafuchs
Lieber Jürgen, lieber Carolus,
ich hoffe Ihr beobachtet diese Frage noch. Vielen Dank erstmal. Ich habe zwar keine Ahnung warum man zuerst eine Pseudozelle erstellen muss und diese dann wieder löschen ... aber es funktioniert schon ... ansatzweise. Leider konnte ich den Code noch nicht so anpassen dass er in meinem Code macht was er soll. Problematisch ist
1. ich weiss nicht was diese beiden Zeilen bewirken:
oDocument.CurrentController.Select(oCell)
...
oDocument.CurrentController.Select(-1)
2. ich müsste den Bereich als Position angeben und nicht als Name, das gelingt mir noch nicht zufriedenstellend:
ibereich() = array("A1:A3","C1:C3")'Zellbereiche für BF
for i = 0 to ubound(ibereich())
bereich = oDocument.sheets(iTab).getcellrangebyname(ibereich(i)).getrangeaddress
formatierung(bereich,iTab)
next i
....
with bereich
erstSp = .startColumn
erstzei = .startRow
endSpa = .EndColumn
endZei = .EndRow
end with
dim Zellformat(3) as New com.sun.star.beans.PropertyValue
Zellformat(0).Name = "Operator"
Zellformat(0).value = com.sun.star.sheet.ConditionOperator.EQUAL
Zellformat(1).Name = "Formula1"
Zellformat(2).Name = "StyleName"
for sp = erstSp to endSpa
for ze = erstzei to endZei
BedingtFormat = oDocument.sheets(tabindex).getcellbyPosition(sp,ze).ConditionalFormat
ocell2 = thisComponent.sheets(tabindex).getcellRangebyName(oPseudoCell).string
Zellformat(1).value = ocell2
Zellformat(2).value = ocell2
BedingtFormat.addNew(Zellformat())
thiscomponent.sheets(tabindex).getcellbyPosition(sp,ze).ConditionalFormat = BedingtFormat
next ze
next sp
könnte man nicht in der roten Zeile den gewünschten Bereich angeben und die Hälfte vom Rest weglassen? (Mir gelingt es allerdings nicht ... ich bin aber blutiger Anfänger)
3. Hier müsste man doch auch einen anderen Wert eingeben können:
oPseudoCell = "E5"
wenn ich hier z.B. "AA0" eingebe, klappt das nicht.
4. Warum ist das eine Bereich und nicht eine Zelle:
oCell = osheet.getcellRangebyName(oPseudoCell)
?
Es wäre schön wenn Ihr mir da weiterhelfen könntet!
Grüße
Pit
Re: Bedingte Formatierung
Verfasst: Mi, 16.03.2011 20:02
von erikafuchs
Falls sich das noch jemand ansieht:
Jetzt klappt alles. Ich habe den Code verkürzt:
Code: Alles auswählen
Sub bedingteFormatierung
dim BedingtFormat as Object
dim Zellformat(3) as New com.sun.star.beans.PropertyValue
oPseudoCell = "K2"
oCell = outSheet.getcellRangebyName(oPseudoCell)
oCell.value = 1
oCell.cellbackcolor = 4057917
LDat.CurrentController.Select(oCell)
neuVorlageausSelektion(oCell.value)
LDat.CurrentController.Select(-1)
Zellformat(0).Name = "Operator"
Zellformat(0).value = com.sun.star.sheet.ConditionOperator.GREATER_EQUAL
Zellformat(1).Name = "Formula1"
Zellformat(2).Name = "StyleName"
for sp =q to q
for ze = startzeile to outzeile
BedingtFormat = outSheet.getcellbyPosition(sp,ze).ConditionalFormat
ocell2 = outSheet.getcellRangebyName(oPseudoCell).string
Zellformat(1).value = ocell2
Zellformat(2).value = ocell2
BedingtFormat.addNew(Zellformat())
outSheet.getcellbyPosition(sp,ze).ConditionalFormat = BedingtFormat
next ze
next sp
oCell.clearContents(255)'Reset Pseudozelle
end sub
function neuVorlageausSelektion(vorlagenname as string)
dim document as object
dim dispatcher as object
document=zielFrame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Param"
args1(0).Value = vorlagenname
args1(1).Name = "Family"
args1(1).Value = 2
dispatcher.executeDispatch(document, ".uno:StyleNewByExample", "", 0, args1())
end function
... ich habe allerdings jetzt weiterhin keine Ahnung, warum ich die Schleife
nicht weglassen kann.
Nochmals Dank
Pit
Re: Bedingte Formatierung
Verfasst: Mi, 16.03.2011 20:15
von Karolus
Hallo
Und ich hab keine Ahnung wieso du...
...überhaupt benutzt ? - von mir hast du das nicht.
Karo
Re: Bedingte Formatierung
Verfasst: Do, 17.03.2011 19:15
von erikafuchs
Lieber Caro,
in deinem Code heißt es:
... die Schleife brauche ich eigentlich nicht, da ich nur eine Spalte formatiere. Ich kann sie aber nicht weglassen, sonst läuft es nicht....?
Grüße
Pit
Re: Bedingte Formatierung
Verfasst: So, 20.03.2011 14:06
von DPunch
Aloha
erikafuchs hat geschrieben:... die Schleife brauche ich eigentlich nicht, da ich nur eine Spalte formatiere. Ich kann sie aber nicht weglassen, sonst läuft es nicht....?
Wenn Du den von Dir geposteten Code nicht veränderst abgesehen vom Löschen der äussersten Schleife, wird wohl das weitere Verwenden der Laufvariablen das Problem sein:
Code: Alles auswählen
for ze = startzeile to outzeile
BedingtFormat = outSheet.getcellbyPosition(sp,ze).ConditionalFormat
(...)
outSheet.getcellbyPosition(sp,ze).ConditionalFormat = BedingtFormat
next ze
Ersetze einfach die "sp"s im Code durch die von Dir gewünschte Spalte, dann kannst Du die Schleife auch weglassen.
Re: Bedingte Formatierung
Verfasst: So, 20.03.2011 14:53
von erikafuchs
Lieber DPunch,
du hast recht. Eigentlich wollte ich das Problem bei den ungelösten Rätseln ablegen. Ich habe meinen Code aber jetzt doch nochmal durchforstet und musste feststellen, dass ich ein "sp" nicht ersetzt habe. Auweh.
Dank und Grüße
Pit