zusammenarbeit OO und excel - makrofrage

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

jensspeedy
Beiträge: 8
Registriert: Sa, 19.05.2007 17:19

zusammenarbeit OO und excel - makrofrage

Beitrag von jensspeedy »

da es ja selbst bei den formeln zur berechnung unterschiede zwischen open office und excel gibt hier mal ne kleine frage

ich habe im exel eine tabelle erstellt unter "einfügen-namen-definieren" ne liste erstellt mit dem Namen "preismodell_exl" - mit diesem bezug
=BEREICH.VERSCHIEBEN('Kat.-ID'!$Q$7;0;0;ANZAHL2('Kat.-ID'!$Q$7:$Q$104);1)

dies kann ich jetzt über "daten-gültigkeit-liste" in jedem tabellenblatt an jeder stelle aufrufen und es funzt einwandfrei

wenn ich die datei im open-office nutzen will habe ich dazu ne 2te liste mit dem namen "preismodell_oo" erstellt mit dem bezug
=VERSCHIEBUNG('Kat.-ID'!$Q$7;0;0;ANZAHL2('Kat.-ID'!$Q$7:$Q$104);1)

so - nun habe ich im excel nen makro erstellt, welches die liste, die bei "daten-gültigkeit-liste" angeben wird umbenennt beim öffnen der datei

in "arbeitsmappe" steht dieser code

Code: Alles auswählen

Option Explicit

Private Sub Workbook_Open()
    Call umbenennen_oo_ex
End Sub
und im modul1 dieser

Code: Alles auswählen

Public Sub umbenennen_oo_ex()

For i = 1 To Sheets.Count
Worksheets(i).Select
    Range("C1:G1").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=preismodell_exl"
        .IgnoreBlank = True
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = True
    End With
    Next
End Sub
wie muss nun aber der code für OO-calc aussehen, damit calc beim starten die liste z.B in "preismodell_oo" umbenennt?

wenn es so funktionieren würde wie ich es mir erhoffe funktioniert dann die entsprechende dynamische drop-down-liste in excel UND in OO - ausser ich hab jetzt im Bezuf der OO-liste nen fehler

hat einer ne idee wie man das hinbekommen könnte?

gruß jens
jensspeedy
Beiträge: 8
Registriert: Sa, 19.05.2007 17:19

ich noch mal

Beitrag von jensspeedy »

also das exel-makro funktioniert im excel erst mal einwandfrei - und das mit der dynamischen anpassung der listenlänge auch - und egal welche liste ich im excel bei "daten-Gültigkeit-Liste" angebe - nach erneutem öffnen mit excel steht wieder "preismodell_exl" eingetragen und es funzt - soweit so gut - es wird nur der listenname unter "Daten-Gültigkeit-Liste" geändert und die formeln aus "bezieht sich auf" bleiben unangetastet.....

nun eine erste frage: wenn ich die datei im OO öffne schreibt es mit die zur liste gehörige formel
=BEREICH.VERSCHIEBEN('Kat.-ID'!$Q$7;0;0;ANZAHL2('Kat.-ID'!$Q$7:$Q$104);1)
gleich in
=VERSCHIEBUNG('Kat.-ID'!$Q$7;0;0;ANZAHL2('Kat.-ID'!$Q$7:$Q$104);1)
um - da nützt mir dann natürlich die rückbenennung der liste via excel-makro wenig wenn ich mit der tabelle wieder im excel arbeiten will

nun hatte ich aber bei der excel-bastelei gleich zwei listen erstellt (siehe erster teil weiter oben) und excel schreibt da den Begriff "verschiebung" auch nicht einfach um.

gibt es in OO die möglichkeit dieses automatische umbenennen des formelbestandteiles per oo-makro zu verhindern - und sei es auch nur diese eine formelumschreibung - viel mehr dieser formeln wird die tabelle nicht bekommen?

und zweitens:

was ist an dieser formel falsch -

=VERSCHIEBUNG('Kat.-ID'!$Q$7;0;0;ANZAHL2('Kat.-ID'!$Q$7:$Q$104);1)
------- wenn also nur 30 zeilen in der liste belegt sind weden im drop-down auch nur 30 angezeigt - sio funzt es zumindest im "ekel" ;-)
es müßte doch wie im excel funktionieren dass eine dynamisch in der länge anpassende liste erstellt wird - aber irgendwie klemmt es *schnief*

hoffe ich hab mich verständlich ausgedrückt - ansonsten einfach fragen ;-)

hat denn keener ne idee?
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

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
jensspeedy
Beiträge: 8
Registriert: Sa, 19.05.2007 17:19

mhh - kann man erst ma machen nix

Beitrag von jensspeedy »

hi stephan - dank erst mal für die ausführliche beantwortung und die angeführten beispiele - werde mich da die tage mal durchwursteln ;-)

du hattest es schon richtig verstanden - lokal installierte makros wären nicht die lösung ;-)

derzeit arbeite ich ja bei der auswahlliste mit nem statischen bereich

='Kat.-ID'!$Q$7:$Q$47

die liste funktioniert im ekel und in OO in EINER datei - da die liste aber in der länge immer mal schwankt und ich nicht immer ne anpassung von hand vornehmen wollte, wollte ich eben versuchen - ne elegantere lösung einzubauen - da nun OO das nicht so kann wie ich es mir dachte muss ich wohl erst mal drauf verzichten *schnief*

na ma schauen was mir in nächster zeit noch so für tolle fragen einfallen ;-)

dir nen schönen tag erst mal
Antworten