Hallo Marcel,
Ja jetzt wird einiges klarer. Typische Testdatei. Da wird hier was probiert und dort was umgeschrieben, und schwupp-di-wupp hat man den Salat. Ist voll verständlich, und passiert jedem mal.
Inwieweit dieses Ge -Dim-me einen Unterschied macht, konnte ich noch nicht feststellen - in manchen Code-Beispielen im Netz ist was geDimmt, in anderen nicht.
Tja, das Thema Variablen deklaration und definition ist so eine Sache für sich selbst. Mal ist es dringend empfohlen, mal kann man es ein bischen lockerer angehen.
Und warum nicht geDimmte Variablen trotzdem funktionieren, verstehe ich auch nicht...
Hängt von der Variablen selbst ab.
Wenn der Basic-Interpreter erkennt, das die Variable nur Text aufnimmt, und nur in der einen Sub verarbeitet wird, dann ... mal ganz salopp gesagt ... wird schon mal eine Auge zugedrückt.
Definieren und deklarieren ist für mich als Einsteiger eigentlich das selbe; scheint aber nen Unterschied zu geben...(?)
Der Unterschied ist der, das mit der deklaration gesagt wird was die Variable beinhalten darf, und mit der definition wird die Variable dementsprechend gefüttert, aber auch nur mit dem was sie beinhalten darf.
Mal ein einfaches Beispiel.
Klare Sache, es wird eine Variable auf Ganze Zahlen vorbereitet.
Wohl bemerkt, der Punkt (.) ist das Dezimaltrennzeichen in Basic. Wir würden aber von Hand 1,23456 schreiben.
Bis hier hin kein Drama. Doch das kommt jetzt.
Und Du wirst feststellen, das dir auf dem Bildschirm einfach eine 3 ausgegeben wird.
Der Grund ist ganz einfach.
Durch die deklaration wird der Variablen Typ auf Integer (Ganze Zahl) gesetzt. Zahlen mit Nachkommastellen werden gerundet abgeschnitten.
Du siehst, was für dich das selbe ist (war), sind zwei verschiedene Dinge.
So viel dazu.
Kommen wir zur Lösung deines Problems.
Nach dem ich deinen Code erstmal so aufgeräumt und umgeschrieben habe wie ich es dir empfohlen und ich es mir vorgestellt hatte, ging es auf die "Fehlersuche". Eigentlich ist das ja nicht ganz korrekt, da ja keine Fehlermeldung ausgegeben wurde. Aber anderseits war es doch eine Fehlersuche, wie ich feststellen musste.
Eigentlich hatte dir Stephan ja schon am
Mittwoch die Lösung gezeigt, und Du hattest sie auch schon richtig angewendet, aber dann nahm das Chaos seinen Lauf. Da Du Probleme mit den Vorlagennamen hattest, hast Du was schon korrekt war wieder durcheinander geschmissen, und dadurch wieder Stolpersteine eingebaut. Und das nur wegen den Vorlagennamen.
Bevor ich es vergesse: Ohne die Vorarbeit von Stephan wäre ich wahrscheinlich noch immer auf der "Fehlersuche". Danke dafür
.
Zur Verdeutlichung.
Das hier war dein letzter gezeigte Code, genauer gesagt die
Function. Aber nicht der der im Screenshot zu sehen ist.
Code: Alles auswählen
Function neuer_style(s_name As String, BGWert1 As Integer, BGWert2 As Integer, BGWert3 As Integer, _
FCWert1 as Integer, FCWert2 as Integer, FCWert3 as Integer)
cs = ThisComponent.StyleFamilies.getByName("CellStyles")
Dim neuerZellstyle
neuerZellstyle = ThisComponent.CreateInstance("com.sun.star.style.CellStyle")
neuerZellstyle.setName(s_name)
with neuerZellstyle
.CellBackColor = RGB(BGWert1, BGWert2, BGWert3)
.CharColor = RGB(FCWert1, FCWert2, FCWert3)
.CharHeight = "6"
end with
cs.insertByName(s_name, neuerZellstyle)
End Function
Und hier die funktionierende
Function.
Code: Alles auswählen
Function neuer_style(s_name As String, BGWert1 As Integer, BGWert2 As Integer, BGWert3 As Integer, _
FCWert1 as Integer, FCWert2 as Integer, FCWert3 as Integer)
cs = ThisComponent.StyleFamilies.getByName("CellStyles")
neuerZellstyle = ThisComponent.CreateInstance("com.sun.star.style.CellStyle")
neuerZellstyle.setName(s_name)
cs.insertByName(s_name, neuerZellstyle)
With cs.getByName(s_name)
.CellBackColor = RGB(BGWert1, BGWert2, BGWert3)
.CharColor = RGB(FCWert1, FCWert2, FCWert3)
.CharHeight = "6"
end with
End Function
Und jetzt mal eine Erklärung von einem "Fortgeschrittenen Anfänger" zu einem "totalen Anfänger". Es sind also meine vereinfachten Worte.
Es gibt Objekte da müssen erst alle Parameter eingestellt werden, und erst dann kann das Objekt erzeugt und eingefügt (insertByName) werden.
Dann gibt es aber andere Objekte wo dies erst erzeugt und eingefügt wird, und erst danach werden die Parameter übergeben. Und das ist das, was Stephan gezeigt hatte und was ich jetzt eben gezeigt habe.
Warum werden die Formate nicht in die neu erstellte FV übernommen?
Damit dürfte die Frage ja jetzt erledigt sein.
Im Anhang ist eine Beispieldatei die sich an deine Vorgaben hält, aber halt aufgeräumt und ein wenig angepasst. Brauchte keine zich Zeilen, sondern nur 5 Beispielzeilen.
Es gibt da auch 2 Buttons.
"Erstellen" = Die Formatvorlagen werden erstellt.
"Löschen" = Die Formatvorlagen werden gelöscht.
Erstellt mit OO.o 3.2.1, gegengetestet mit LO 5.1.5.2. Und in beiden Versionen funktioniert alles so wie es soll. Falls ich jetzt nicht etwas übersehen habe.
@Tom
Ich habe in der Datei eine Vorlagen Lösch-Sub von dir eingebaut, die ich etwas "eingedeutsch" und ergänzt habe. Für diese einfache Aufgabe reichte sie mir vollends. Wollte dir nur mal Feedbäck geben.
So, und nun habe ich Feierabend.
Gruß
balu