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 :wink:.


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