Seite 1 von 1
Formatvorlage per Makro erstellen
Verfasst: Mo, 29.11.2010 10:03
von duffman521
Hallo Forengemeinde,
ich hätte da ein kleines Problem.
Vor kurzem habe ich ein Makro geschrieben, welches eine Tabelle nach bestimmten Angaben formatiert. Unteranderem gibt es in diesem Makro eine bedingte Formatierung. Für diese bedingte Formatierung habe ich eine neue Standartvorlage erstellt. Diese Vorlage funktioniert ohne Probleme bei meinen Anwendungen. Leider funktioniert es bei einem Kollegen, welcher das Makro wollte, nicht. Problem ist laut ihm die Standartvorlage. Er exportiert aus einem Programm (Name habe ich leider nicht parat) eine Liste in Excel oder Calc. Beim Exportieren in Calc gibt es nun Probleme mit der neuen Standartvorlage.
Um nun nicht stundenlang nach dem Fehler zu suchen war nun meine Idee die benötigte Formatvorlage gleich per Makro zu gestallten.
Meine Google suche war leider erfolglos. Also wende ich mich an euch.
Ist es Möglich mit einem Basic Makro eine Formatvorlage zu erstellen? Wenn ja, wie mache ich dies?
Im vorraus schon eimal vielen Dank für eure Hilfe.
Gruß
duffman521
Re: Formatvorlage per Makro erstellen
Verfasst: Mo, 29.11.2010 17:57
von manese
Hallo duffman,
ich habe das für den WRITER schon mal gemacht.
Ich gehe davon aus, dass es für CALC genauso funktioniert.
Code: Alles auswählen
'Die Absatzvorlage VERSTECKT erstellen und einfügen
Dim oDoc as object
oDoc = ThisComponent
Dim vParaStyles
vParaStyles = oDoc.StyleFamilies.getByName("ParagraphStyles")
if not vParaStyles.hasByName("versteckt") then
Dim vStyle2
vStyle2 = oDoc.createInstance("com.sun.star.style.ParagraphStyle")
with vStyle2
.ParaBackColor = RGB(222, 222, 222)
.CharColor = RGB(222, 222, 222)
.ParentStyle = "Standard"
.CharFontName = "Lucida Sans Unicode"
end with
vParaStyles.insertByName("versteckt", vStyle2)
end if
Alles Gute
matthias
Re: Formatvorlage per Makro erstellen
Verfasst: Mi, 01.12.2010 08:40
von duffman521
Hallo manese,
erst einmal vielen Dank für die Hilfe. Aber leider funktioniert der Code nicht.
Ich erhalte in der Zeile "vParaStyles = oDoc.StyleFamilies.getByName("ParagraphStyles")" folgende Fehlermeldung:
BASIC-Laufzeitfehler
Es ist eine Exception aufgetreten.
Type: com.sun.star.container.NoSuchElementExceptionMessage: .
Um ehrlich zu sein habe ich leider keinen blassen Schimmer was diese Fehlermeldung mir sagen will, geschweige den was ich machen könnte.
Gruß
duffman521
Re: Formatvorlage per Makro erstellen
Verfasst: Mi, 01.12.2010 18:59
von manese
Hallo duffman,
tut mir leid, dass es nicht funktioniert.
Nach allem, was ich davon weiß, ist das tatsächlich das Problem,
dass du eine Frage für Calc hast und ich dir eine Antwort für Writer gegeben habe.
Ich habe einen schnellen Blick in meine schlauen Bücher geworfen,
habe aber zu Formatvorlagen in Calc nichts gefunden,
ich kann dir also vorerst nicht weiterhelfen.
Alles Gute
matthias
Re: Formatvorlage per Makro erstellen
Verfasst: Mi, 01.12.2010 22:07
von balu
Hallo duffman521,
schau mal bei Dannenhoefer rein.
Unter
7.1 Zellen findest Du nicht nur allgemeine Punkte zu Makros in Calc, sondern auch
7.1.20 Wie kann man eine bedingte Formatierung einfügen? Und ferner
7.1.21 Wie kann die bedingten Formatierungen löschen?
Ich denk mir mal das Du dort ganz gut aufgehoben bist. Und wenn Du dann noch immer nicht weiterkommst, meldest Du dich wieder hier

.
Gruß
balu
Re: Formatvorlage per Makro erstellen
Verfasst: Mi, 01.12.2010 22:11
von Karolus
Hallo
Es gibt in
Calc keine:
Code: Alles auswählen
vParaStyles = oDoc.StyleFamilies.getByName("ParagraphStyles")
versuchs mal mit:
Code: Alles auswählen
cellStyles = oDoc.StyleFamilies.getByName("CellStyles")
Karo
Re: Formatvorlage per Makro erstellen
Verfasst: Mi, 15.12.2010 09:04
von duffman521
Guten Morgen.
Leider hatte ich in letzter Zeit wenig Zeit mich um dieses Problem zu kümmern.
Schon mal vielen Dank für die Hilfen.
@ balu
Die bedingte Formatierung funktioniert einwandfrei es geht im Moment nur noch um die Formatvorlagen.
@ Karolus
Ich habe die Zeilen nun verändert und erhalte ein paar Zeilen später schon wieder eine Fehlermeldung
Code: Alles auswählen
Dim oDoc as object
oDoc = ThisComponent
Dim vParaStyles
cellStyles = oDoc.StyleFamilies.getByName("CellStyles")
if not cellStyles.hasByName("versteckt") then
Dim vStyle2
vStyle2 = oDoc.createInstance("com.sun.star.style.CellStyles") 'Ich vermute, dass hier der Fehler liegt.
with vStyle2
.ParaBackColor = RGB(222, 222, 222) 'Fehlermeldung erscheint
.CharColor = RGB(222, 222, 222)
.ParentStyle = "Standard"
.CharFontName = "Lucida Sans Unicode"
end with
vParaStyles.insertByName("versteckt", vStyle2)
end if
Es handelt sich um folgende Meldung:
BASIC-Laufzeitfehler
Objektvariable nicht belegt
In den Kommentaren sieht man ja schon wo ich den Fehler vermute, leider kann ich ihn nicht erkennen. Ich habe jetzt schon verschiedene Dinge versucht zu ändern. Die Ergebnisse waren jedoch immer wieder die gleiche Fehlermeldung.
Re: Formatvorlage per Makro erstellen
Verfasst: Do, 16.12.2010 08:38
von duffman521
Das Makro läuft nun ohne sichtbaren Probleme.
Die Vorlage wird erstellt aber leider werden die Einstellungen nicht genutzt.
Hier der veränderte Code:
Code: Alles auswählen
sub absatzvorlage
Dim oDoc as object
oDoc = ThisComponent
Dim vParaStyles
cellStyles = oDoc.StyleFamilies.getByName("CellStyles")
if not cellStyles.hasByName("Test1") then
Dim vStyle2
vStyle2 = oDoc.createInstance("com.sun.star.style.CellStyle")
with vStyle2
.CellBackColor = RGB(255, 0, 0) 'ParaBackColor wurde noch in CellBackColor geändert
.CharColor = RGB(222, 222, 222)
.ParentStyle = "Standard"
.CharFontName = "Arial"
end with
cellStyles.insertByName("Test1", vStyle2)
end if
end sub
Ich habe versucht diverse Einstellungen für die "Formateigenschaften" zu nutzen aber es scheint nichts zu funktionieren.
Gruß
duffman521
Re: Formatvorlage per Makro erstellen
Verfasst: Do, 16.12.2010 14:07
von DPunch
Aloha
duffman521 hat geschrieben:Die Vorlage wird erstellt aber leider werden die Einstellungen nicht genutzt.
Die Einstellungen können erst gemacht werden, wenn der Style tatsächlich angelegt worden ist.
Stell den Code mal folgendermaßen um:
Code: Alles auswählen
sub absatzvorlage
Dim oDoc as object
oDoc = ThisComponent
Dim vParaStyles
cellStyles = oDoc.StyleFamilies.getByName("CellStyles")
if not cellStyles.hasByName("Test1") then
Dim vStyle2
vStyle2 = oDoc.createInstance("com.sun.star.style.CellStyle")
cellStyles.insertByName("Test1", vStyle2)
with vStyle2
.CellBackColor = RGB(255, 0, 0) 'ParaBackColor wurde noch in CellBackColor geändert
.CharColor = RGB(222, 222, 222)
.ParentStyle = "Standard"
.CharFontName = "Arial"
end with
end if
end sub
Re: Formatvorlage per Makro erstellen
Verfasst: Do, 16.12.2010 14:50
von duffman521
Vielen Dank DPunch,
das Makro läuft, die Forlage wird erstellt.
Gruß
duffman521
Edit:
Kleine Frage wie kann ich Zeichenformatierungen einstellen?
Also die z.B. Währung, Euro, zwei Nachkommastellen, Negative Zahlen nicht rot.
Ich raffs irgendwie nicht.
Re: Formatvorlage per Makro erstellen
Verfasst: Mi, 05.01.2011 10:29
von Hömmelmann
Hallo,
zum Einstellen der Zahlenformate schau mal nach bei:
http://www.dannenhoefer.de/faqstarbasic ... dardformat
Dann hab ich da noch eine Frage an alle:
Eine Zellvorlage erstellen klappt mit dem hier o.a. Code. Probleme bereitet mir, die erstellte Vorlage zu ändern.
Laut xray gibt es eine Methode "replacebyname".
In der Praxis läuft der Code auch ohne Fehlermeldung, jedoch ist die Wirkung nicht die erwünschte. Es werden nicht die geänderten Werte
eingetragen, sondern alles auf Standard zurückgesetzt und die geänderte Vorlage lässt sich auch nicht zuweisen.
Der verwendete Code:
....
Dim oDoc as object
dim dHG as double
Dim vParaStyles
Dim vStyle2
oDoc = ThisComponent
oBlatt=oDoc.sheets(0)
cellStyles = oDoc.StyleFamilies.getByName("CellStyles")
vStyle2 = oDoc.createInstance("com.sun.star.style.CellStyle")
if not cellStyles.hasByName("Test1") then
cellStyles.insertByName("Test1", vStyle2)
else
cellStyles.replaceByName("Test1", vStyle2)
end if
with vStyle2
.CellBackColor = oBlatt.getcellbyposition(0,0).value
.CharColor = oBlatt.getcellbyposition(0,1).value
.ParentStyle = "Standard"
.CharFontName = "Arial"
end with
.....
viele Grüße
Friedhelm