hoffe ich hab mich verständlich ausgedrückt
Naja, ich habe zumindest im Wesentlichen verstanden worum es geht und das Ganze wird so nicht sinnvoll funktionieren.
Du kannst ganz einfach unter Calc bei Daten-Gültigkeit derzeitig noch keinen variablen Bereich übergeben, egal wie auch immer.
(Es ist zwar möglich bei Daten-Gültigkeit einen Bereichsnamen einzutragen, nur muß dieser, meines Wissens, einen statischen Bereich und nicht einen durch Formel dynamisch festgelegten Bereich repräsentieren.)
Zum Zweiten (ich sagte es im anderen Thread bereits) funktionieren Makros nicht gleichzeitig unter Calc und Excel.
Du willst (an einer ganz bestimmten Stelle!) eine Datei die unter Excel und Calc gleich funktioniert, das geht nativ aber nicht. Es geht aber auch nicht ein Makro für beide Programme in einer Datei und auch nicht zwei Makros wo sich jedes Programm eines auswählen kann in einer anderen Datei.
Ohne Zweifel geht das natürlich mit lokal installierten Makros, nur das ist doch das was Du nicht willst (es sei denn ich verstehe Dich völlig falsch), denn lokal installierte Makros plus eine einheitliche Datei sind doch in keiner Weise besser, als gleich 2 Dateien (*.ods ond *.xls), ganz im Gegenteil die praktischen Probleme werden größer. Weil, wenn die Lösung weitergegeben werden soll müßtest Du ja das lokale Makro auch automatisch installieren können, was ohne die Zuhilfenahme einer dritten Datei, welche einen Installer darstellen würde nicht geht zusätzlich wäre das zwangläufig auch nicht plattformabhängig.
Sollte, nun wieder mein Erwarten, doch eine lokal installierte Makrolösung unter Aufgabe der flexiblen Weitergabe das Ziel sein kannst Du auf benannte Bereiche verzichten (vergl. oben) und gleich per Makro statisch unter Daten-Gültigkeit eintragen.
In etwa:
Schritt1:
lies den (in Excel funktionierenden) Formeleintrag unter Daten-Gültigkeit beim Öffnen in Calc aus und speichere ihn irgendwo zwischen für spätere Verwendung. Code geht etwa so:
Code: Alles auswählen
'...
eintrag = thiscomponent.sheets().getByName("Tabelle1").getcellrangebyname("A1").Validation.Formula1
'...
Schritt2:
ermittle den relevanten Zellbereich für Daten-Gültigkeit innerhalb des Makros statisch als benannten Zellbereich und trage ihn mittels des Makros in die Zelle ein, in etwa:
Code: Alles auswählen
'...
gueltigkeit = thiscomponent.sheets().getByName("Tabelle1").getcellrangebyname("A1").Validation
With gueltigkeit
.Type = 6
.Formula1 = "A1:A100"
End With
thiscomponent.sheets().getByName("Tabelle1").getcellrangebyname("A1").Validation = gueltigkeit
'...
Tabelle sollte nun in Calc richtig arbeiten
Schritt3:
bevor Du (ich weiß nicht was Du in der Zwischenzeit an der Tabelle bearbeitest) die Datei wieder schließt mußt Du den ursprünglichen Wert für Daten-Gültigkeit zurückschreiben (damit die Datei wieder unter Excel läuft), in etwa:
Code: Alles auswählen
'...
gueltigkeit = thiscomponent.sheets().getByName("Tabelle1").getcellrangebyname("A1").Validation
With gueltigkeit
.Type = 6
.Formula1 = eintrag
End With
thiscomponent.sheets().getByName("Tabelle1").getcellrangebyname("A1").Validation = gueltigkeit
'...
(alles nicht im Detail getestet, das Prinzip sollte aber gehen)
Gruß
Stephan