Hallo Forum,
kurz zum Hintergrund:
Ich bin _kein_ Calc-Poweruser (daher auch diese vielleicht naiv klingenden Fragen), habe mich aber dennoch damit vergnügt, einen relativ umfangreichen Jahres-Kalender mit automatischer Feiertagseintragung zu schnitzen. Dazu habe ich auch Basic-Makros benutzen müssen.
Problem:
Ich will den Kalender nun auch in der Arbeit nutzen, nur haben die da leider nur Excel. Wenn ich das Dokument aus OOo 1.1.2 als XLS speichere und wieder lade, sind die Makros dahin und der ganze Kalender enthält nur Unsinn (OOo 1.1.2 zeigt teilweise NV() an (?), OOo 1.9.79 sagt zumindest, dass die Makros fehlen). Ich habe nur geringe Hoffnung, dass sich das bei Excel anders verhalten wird.
Frage 1:
ich habe eine ganze Latte an Threads gefunden, in denen beklagt wird, dass sich Excel-Makros nicht in Calc ausführen lassen, wegen unterschiedlicher Makrosprachen. Fürchte ich richtig, dass dies auch in die Gegenrichtung gilt? Oder gibt es irgendeine Methode, wie ich für Excel gangbare Makros in die XLS mit reinspeichern kann?
Frage 2:
Wenn das ausführgerechte Speichern für Excel mit OOo nicht möglich ist, kann ich dann irgendwas tun, um ein Ummünzen auf Excel so schmerzfrei wie möglich zu gestalten? Ich hab' z. B. den Basic Makro-Code in einer separaten Datei, die ich in die Arbeit mitnehmen könnte. Bringt mir das was, oder sagt mir dann nur Excel, dass es mit Basic nichts anfangen kann?
Zum System:
Slackware Linux 10.1
KDE 3.3.2
OpenOffice 1.1.2
OpenOffice 1.9.79
Die Makros wurden ins Dokument gespeichert.
Und noch was...:
Dubioserweise öffnet Gnumeric die sxc-Datei so, dass die Werte korrekt berechnet werden (Nur das Layout geht komplett drauf *g*). Offenbar kann dieses Spreadsheet mit Basic umgehen?
Danke für eure Hilfe!
- furrySpider -
Makros andersrum: Von OOo nach Excel
Moderator: Moderatoren
-
- Beiträge: 5
- Registriert: Sa, 30.10.2004 20:52
Frage 1:
ich habe eine ganze Latte an Threads gefunden, in denen beklagt wird, dass sich Excel-Makros nicht in Calc ausführen lassen, wegen unterschiedlicher Makrosprachen. Fürchte ich richtig, dass dies auch in die Gegenrichtung gilt?
Ja.
Ja, das geht (in Abhängigkeit von den Einstellungen uter Extras>Optionen>Laden Speichern>VBA Eigenschaften) nur das müssen dann natürlich VBA-Makros sein. Dich hindert natürlich niemand VBA-Makros in der Basic-IDE von OpenOffice.org zu erstellen, bloß das ist halt für komplexere Makros wenig praktikabel weil Du ja die Makros nur hinschreiben und nicht gleich testen kannst.Oder gibt es irgendeine Methode, wie ich für Excel gangbare Makros in die XLS mit reinspeichern kann?
das ist möglich, nur es müssen VBA-Makros sein (siehe oben)Frage 2:
Wenn das ausführgerechte Speichern für Excel mit OOo nicht möglich ist,
kann ich dann irgendwas tun, um ein Ummünzen auf Excel so schmerzfrei wie möglich zu gestalten?
Das kommt natürlich auch darauf an worum es speziell geht.
Generell ist es aber praktisch so das es leichter sein dürfte ein StarBasic-Makro nach VBA zu konvertieren, als ein VBA-Makro nach StarBasic.
Warum?
Nach meiner Erfahrung sind VBA-Makros im Allgemeinen grottenschlecht insofern als sie mit dem Makrorekorder aufgezeichnet werden was zu schlechtem Code führt. Natürlich funktionieren die Makros auch so, nur auch bei VBA erreichst Du wirklich gute Ergebnisse nur durch (händische) Programmierung.
Im OpenOffice.org stehen die Fähigkeiten des Makrorekorders hinter denen des Makrorekorders von MS Office zurück. Einerseits ist das für Nichtprogrammierer von Nachteil, andererseits bist Du gezwungen Code dann wirklich selbst zu schreiben, was es ohne Mehrarbeit ermöglicht 'sauberen' Code zu schreiben der leicht nach VBA zu übersetzen ist.
Nein, da hast Du praktisch keine Vorteile.Ich hab' z. B. den Basic Makro-Code in einer separaten Datei, die ich in die Arbeit mitnehmen könnte. Bringt mir das was, oder sagt mir dann nur Excel, dass es mit Basic nichts anfangen kann?
Ich kenne Deine Datei nicht und kann deshalb nichts Konkretes vermuten. Da ich Gnumeric gerade das erste Mal in meinem Leben gestartet habe, kann ich jedoch nicht erkennen das ich dort irgendwo Makros erstellen kann. Falls das so ist, ist ja wohl kaum anzunehmen das Makros aus Fremdformaten ausgeführt werden könnten.Und noch was...:
Dubioserweise öffnet Gnumeric die sxc-Datei so, dass die Werte korrekt berechnet werden (Nur das Layout geht komplett drauf *g*). Offenbar kann dieses Spreadsheet mit Basic umgehen?
Da ich hier im Forum erstmalig von Gnumeric höre:
Wäre es möglich Deine Datei zu erhalten, das ich mir das unter Gnumeric mal anschauen kann? Wenn das ein Kalender ist dürfte die wohl keine vertraulichen Informationen enthalten.
Ich würde Dir in diesem Fall meine Email-Adresse übers Forum schicken, weil Du mir keinen Dateianhang über das Forum direkt schicken kannst.
Gruß
Stephan
-
- Beiträge: 5
- Registriert: Sa, 30.10.2004 20:52
Hey, danke für die Antwort!
Du hast weitgehend bestätigt, was ich befürchtet habe. Darauf, dass man über OOo VBA-Makros verfassen (wenn auch nicht prüfen) und in ein XLS speichern könnte, wäre ich allerdings nicht ohne weiteres gekommen. =)
Das Problem ist, ich kann noch weniger VBA als StarBasic, und in letzterem hab ich bislang nur zwei Funktionen erstellt, eben für den Kalender. Nur, um mal das Ausmaß der Funktionen darzustellen, hier ist eine davon:
Soweit ich bisher recherchiert habe, ist VBA für diese einfachen Rechenoperationen ziemlich ähnlich zu StarBasic. Mein Plan ist daher folgender: Ich nehm' mir den exportierten Excel-File nebst StarBasic-Code mit in die Arbeit, lade dort den Kalender, editiere neue Makros für das so entstehende Sheet und kopiere dort den StarBasic-Code rein. Mit leichten Änderungen und den Korrekturfunktionen von Excel sollte es eigentlich möglich sein, lauffähigen VBA-Code zu basteln.
Das hat natürlich nur Aussicht auf Erfolg, wenn die Funktions-Aufrufe in den Formeln während des Exports nach XLS erhalten bleiben. Ist das so?
Bezüglich Gnumeric: Ich nutze es eigentlich auch nie, wollte hier nur probieren, ob's denn damit zu öffnen wäre. Eine Funktion zur Makroerstellung hatte ich auch nicht gefunden, deshalb hab' ich deine Verwunderung darüber, dass die Makros im SXC offenbar laufen, geteilt. Vorhin hab ich mir das ganze allerdings nochmal angeschaut, und die Makros laufen doch nicht. Wie sie's machen, weiß ich nicht, aber scheinbar wird der "letzte Zustand" der SXC-Datei dargestellt. Ändere ich dann etwas, funktioniert die Berechnung nicht. Also falscher Alarm.
Was das Erhalten der Datei angeht, hatte ich sowieso vor, den Kalender früher oder später zum Download bereitzustellen. Nur im Moment würde ich das lieber nicht, denn durch meine Planlosigkeit ist der Aufbau der Berechnungen wirklich, wirklich übel! Da muss ich vorher nochmal drüberschauen, und selbst dann werdet ihr mich noch auslachen.
Gruß,
furrySpider
Du hast weitgehend bestätigt, was ich befürchtet habe. Darauf, dass man über OOo VBA-Makros verfassen (wenn auch nicht prüfen) und in ein XLS speichern könnte, wäre ich allerdings nicht ohne weiteres gekommen. =)
Das Problem ist, ich kann noch weniger VBA als StarBasic, und in letzterem hab ich bislang nur zwei Funktionen erstellt, eben für den Kalender. Nur, um mal das Ausmaß der Funktionen darzustellen, hier ist eine davon:
Code: Alles auswählen
Function Wochennummer (Schaltjahr, Monat, Tag)
Dim TN as integer
Dim x as integer
Dim z as integer
x = 0
z = 0
TN = Tagesnummer (Schaltjahr, Monat, Tag)
x = TN \ 7
z = x + 1
Wochennummer = z
End Function
Das hat natürlich nur Aussicht auf Erfolg, wenn die Funktions-Aufrufe in den Formeln während des Exports nach XLS erhalten bleiben. Ist das so?
Bezüglich Gnumeric: Ich nutze es eigentlich auch nie, wollte hier nur probieren, ob's denn damit zu öffnen wäre. Eine Funktion zur Makroerstellung hatte ich auch nicht gefunden, deshalb hab' ich deine Verwunderung darüber, dass die Makros im SXC offenbar laufen, geteilt. Vorhin hab ich mir das ganze allerdings nochmal angeschaut, und die Makros laufen doch nicht. Wie sie's machen, weiß ich nicht, aber scheinbar wird der "letzte Zustand" der SXC-Datei dargestellt. Ändere ich dann etwas, funktioniert die Berechnung nicht. Also falscher Alarm.

Was das Erhalten der Datei angeht, hatte ich sowieso vor, den Kalender früher oder später zum Download bereitzustellen. Nur im Moment würde ich das lieber nicht, denn durch meine Planlosigkeit ist der Aufbau der Berechnungen wirklich, wirklich übel! Da muss ich vorher nochmal drüberschauen, und selbst dann werdet ihr mich noch auslachen.

Gruß,
furrySpider
Soweit ich bisher recherchiert habe, ist VBA für diese einfachen Rechenoperationen ziemlich ähnlich zu StarBasic.
Ja, natürlich. Ich konnte wirklich nicht wissen wie einfach Dein Code ist. Sachen bei denen der Code in StarBasic und VBA gleich sind gibt es natürlich. Mir war das auch bekannt, nur sind die Möglichkeiten, wegen der notwendigen Codegleichheit so gering das es sich nicht besonders lohnt darüber nachzudenken, denn Rechnungen wie Sie Deine Funktion umfaßt kann man ja auch mit Formeln erledigen, wo Du dann direkt nach *.xls exportieren kannst und die unten beschriebene Arbeit mit dem Ex-/Importieren das Codes nicht hast.
Richtig ist andererseits natürlich das Formeln nicht beliebig lang sein dürfen, habe gerade den Wert nicht im Kopf, so 500 bis 600 Zeichen, vielleicht 512? Oder ebend mit Hilfstabelle.
Mein Plan ist daher folgender: Ich nehm' mir den exportierten Excel-File nebst StarBasic-Code mit in die Arbeit, lade dort den Kalender, editiere neue Makros für das so entstehende Sheet und kopiere dort den StarBasic-Code rein.
Du hast vollkommen Recht. Die von Dir aufgeführte Funktion sollte so handhabbar sein (vorausgesetzt das auch Sub/Function Tagesnummer() existiert).
Nun muß ich aber nach Prüfung einräumen, das es nicht möglich ist geänderten Code in OOo zu speichern, wenn der aus *.xls stammt bzw. umsomehr Du erstmalig in *.xls speicherst. Ich hatte bisher nur vermutet das Du keine neuen Module anlegen kannst aber bestehende auch mit Veränderungen übernommen werden, Tatsache scheint aber zu sein das Du nur den Orginalcode in einer neuen Exceldatei speichern kannst.
Also hier lag mein Denkfehler.
(ist halt nur so das des gesamte Verfahren ohnehin nicht direkt geht (der Code ist bei Öffnen von *.xls immer auskommentiert) und selbst wenn es ja nur sehr einfache Möglichkeiten gäbe, weshalb ich mich praktisch noch nie damit auseinandergesetzt habe)
Insofern ist nun aber Dein Vorschlag goldrichtig. Für einfache Dinge (wie die konkrete Funktion die Du anführst) gehe einfach so vor:
-mach in OOo so das alles paßt, also Funktionen erstellen und die Aufrufe der Funktionen in Zellen des Blattes schreiben
-nun speichere erstmal als *.sxw damit Du eine komplett funktionierende Datei hast
-gehe jetzt in die Basic-Ide und speichere den Inhalt des betreffenden Moduls (Deine Funktionen) mittels der Schaltfläche "Quelltext speichern unter..."
-speichere nun die Datei als *.xls und der Code geht verloren
-öffne die *.xls-Datei in Excel und wechsele in die Basic-IDE
-erstelle im entsprechenden Dokument ein neues Modul und setze den Cursor in den noch leeren Code-Bereich dieses Moduls
-wähle Einfügen>Datei und wähle die Datei in die Du den Code exportiert hattest
- der Code wird eingefügt und da die Funktionsaufrufe auf dem Tabellenblatt unverändert sein sollten sollte es jetzt funktionieren (Du must wohl einmalig Taste F9 drücken um die entsprechenden Zellen zu aktualisieren)
Ich habe das Verfahren gerade durchgespielt und das geht bei mir prima.
Wenn Du es bei Dir getestet hast, würde ich mich über eine kurze Rückmeldung hier im Forum freuen.
Ausgelacht hätte ich Dich ohnehin nicht, aber das hat sich ja jetzt erledigt.Was das Erhalten der Datei angeht, hatte ich sowieso vor, den Kalender früher oder später zum Download bereitzustellen. Nur im Moment würde ich das lieber nicht, denn durch meine Planlosigkeit ist der Aufbau der Berechnungen wirklich, wirklich übel! Da muss ich vorher nochmal drüberschauen, und selbst dann werdet ihr mich noch auslachen.
Gruß
Stephan
Du siehst das alles ganz richtig.
Ich kann solch große Formeln wie Deine Beispielformel auch nicht insgesamt erfassen, sondern müßte die zerlegen um sie zu verstehen.
Naja und irgendwie ist es nun Deine Abwägung. Die Formel wird natürlich noch länger wenn Du die Funktionen in die Formel reinbringst, nur Du brauchst dann kein Basic. Also kann ich nicht für Dich entscheiden.
Wenn es dann unter Excel und Calc gehen soll, und Du nicht manuell mit Code hantieren willst, verwende eine Formel ohne Rücksicht auf schlechte Lesbarkeit. Und mal ehrlich: die Formel ist doch schon jetzt nicht mehr zu verstehen, wenn sie noch etwas länger wird scheint mir das keine wirkliche Verschlechterung. Außerdem wenn Du die Formel bis hierher selbst erarbeitet hast kriegst Du den Rest sicherlich auch noch hin. Der "Trick" ist doch eigentlich nur aus der Function eine (separate) Formel zu machen und dann an den entsprechenden Stellen der Gesamtformel den Verweis auf die Funktion durch den Formelausdruck zu ersetzen.
Gruß
Stephan
Ich kann solch große Formeln wie Deine Beispielformel auch nicht insgesamt erfassen, sondern müßte die zerlegen um sie zu verstehen.
Naja und irgendwie ist es nun Deine Abwägung. Die Formel wird natürlich noch länger wenn Du die Funktionen in die Formel reinbringst, nur Du brauchst dann kein Basic. Also kann ich nicht für Dich entscheiden.
Wenn es dann unter Excel und Calc gehen soll, und Du nicht manuell mit Code hantieren willst, verwende eine Formel ohne Rücksicht auf schlechte Lesbarkeit. Und mal ehrlich: die Formel ist doch schon jetzt nicht mehr zu verstehen, wenn sie noch etwas länger wird scheint mir das keine wirkliche Verschlechterung. Außerdem wenn Du die Formel bis hierher selbst erarbeitet hast kriegst Du den Rest sicherlich auch noch hin. Der "Trick" ist doch eigentlich nur aus der Function eine (separate) Formel zu machen und dann an den entsprechenden Stellen der Gesamtformel den Verweis auf die Funktion durch den Formelausdruck zu ersetzen.
Gruß
Stephan
-
- Beiträge: 5
- Registriert: Sa, 30.10.2004 20:52