Zurück   PC WELT Forum > Software > Office-Programme
Connect with Facebook


Office-Programme Microsoft Office, OpenOffice/LibreOffice und andere


Antwort
 
LinkBack Themen-Optionen Thema bewerten Ansicht
  #1 (permalink)  
Alt 05.02.2012, 16:54
Benutzerbild von Eric March
Viertel Gigabyte
Mein System
 
Registriert seit: 09.2003
Ort: Im Herzen Deutschlands
Beiträge: 4.984
LibreOffice 3.3.x / 3.4.x - Makroversagen

Moin!

Es ist schon eine Weile her da wollte ich von LO 3.3 auf die 3.4 umsteigen. Ein noch von OOo übernommenes Makro (hüstel) versagte plötzlich. Den genauen Fehlertext lassen wir mal weg, dim args1(0) as new com.sun.star.beans.PropertyValue ging nicht mehr; irgendwas mit PythonBasic selbst, etwas existiere nicht.

Nun kommt der Brocken den ich nicht verdauen kann. Ich zeichnete unter LO 3.4 da gewisse Makro neu auf ([Pos1] • Datei·Speichern {mächtig gewaltig, was?}) und fand auf den Buchstaben den selben Code den ich übernommen hatte. Natürlich versagte auch diese Eigenaufzeichnung.

So was ist, bei aller Liebe, für mich ein absolutes No-Go. Kann jemand der umgestiegen ist und jemand der erstmals ein LO 3.4.x installiert hat so etwas bestätigen oder reproduzieren?
LO hat zwar das OOo Profil einfach übernommen, da 3.3 aber geht und 3.4 nicht kanns doch wohl nicht am Profil hängen?! Ich meine sogar ein neues angelegt zu haben mit dem selben Unfall.

Eric March
__________________
Eric March • »Wenn du eine Frage stellst musst du auch akzeptieren eine Antwort zu bekommen.« (Weisheit aus dem Kongo)
Mit Zitat antworten
  #2 (permalink)  
Alt 05.02.2012, 20:37
Kbyte
 
Registriert seit: 08.2007
Beiträge: 193
Hallo!

Häng mal die Datei an (aber hier. Nicht bei Filehostern, dort lade ich generell nichts mehr herunter, dauert zu lang). Dann schau ich mal).

Gruß, René
__________________
Hallo und Gruß!
René
Mit Zitat antworten
  #3 (permalink)  
Alt 06.02.2012, 15:34
Benutzerbild von Eric March
Viertel Gigabyte
Mein System
 
Registriert seit: 09.2003
Ort: Im Herzen Deutschlands
Beiträge: 4.984
Hi!

Es bedarf keiner Datei. LO 3.4 generiert dieses Problem, ob in einer leeren ODT oder in Form eine älteren wo der Code drin ist.
Code:
Option VBASupport 1
Option Compatible

sub SpeichernUndPOS1
rem Konkret: POS1, Space, BackSpase, Save - um Position im Text festzuschreiben
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Text"
args1(0).Value = " "
dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())
end sub
Das ist (bis auf die Einleitung) der aufgezeichnete (!) Code der unter 3.4 in der roten Zeile knallt.

Tut er das nur bei mir müssen wir einen Ansatzpunkt finden der den Unfall auslöst. Ich bin mir so weit sicher in den \Anwendungsdaten vorher alles abgeräumt und dann 3.4 installiert zu haben um prompt den Unfall zu bekommen. Es hat mich schon geärgert, als er allein beim Upgrade kam, aber dann noch da…

Eric March
__________________
Eric March • »Wenn du eine Frage stellst musst du auch akzeptieren eine Antwort zu bekommen.« (Weisheit aus dem Kongo)
Mit Zitat antworten
  #4 (permalink)  
Alt 06.02.2012, 19:23
Kbyte
 
Registriert seit: 08.2007
Beiträge: 193
Fürs erste kann ich Dir nur empfehlen, Dich mal mit Starbasic zu beschäftigen. Diesen sch***ß Dispatcher-Code solltest Du vergessen (vermutlich aufgezeichnet mit dem Makrorekorder), der ist IMHO Schrott und nicht sehr flexibel. Stattdessen nativen Code verwenden. Also echten Starbasic-Code, ähnlich wie VBA-Code.

Libre-Office Forum, dort kann Dir geholfen werden. Da bekommst Du bestimmt alternativen Code, ohne Dispatcher.

Und die ersten beiden Zeilen ("Option VBASupport1" und "Option Compatible") solltest Du entfernen. Die können eher stören als nutzen. Diese beiden Zeilen sind nur dafür da, um VBA-Code kompatible zu machen. Aber in OOo-Dateien haben die IMHO nichts zu suchen, sondern nur in Microsoft-Office-Dateien. Dispatcher-Code sollte auch niemals in Microsoft-Office-Dateien eingesetzt werden.
__________________
Hallo und Gruß!
René
Mit Zitat antworten
  #5 (permalink)  
Alt 06.02.2012, 19:35
Kbyte
 
Registriert seit: 08.2007
Beiträge: 193
Wenn Du die ersten beiden Zeilen weglässt, dann funktioniert es.
__________________
Hallo und Gruß!
René
Mit Zitat antworten
  #6 (permalink)  
Alt 06.02.2012, 20:58
Benutzerbild von Eric March
Viertel Gigabyte
Mein System
 
Registriert seit: 09.2003
Ort: Im Herzen Deutschlands
Beiträge: 4.984
Irgendwie kapiere ich hier noch weniger als nichts. Ich habe nun auf bereinigter Plattform 3.4.5 installiert und das Makro aufgezeichnet. Und komischerweise kann ich es aufrufen. Mal sehen ob und wie ich das nunmehr übernehmen kann.
Will ich es aber im Editor Schrittweise ausführen knallt es…
Code:
sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())


end sub
…in der blauen Zeile. «BASIC-Laufzeitfehler. Eigenschaft oder Methode nicht gefunden: CurrentController». Wenn man nicht mal Makros so nachvollziehen und prüfen kann ist das alles witzlos…


Was die Einleitungszeilen und den Dispatcher anbelangt, so habe ich gewisse Codeblöcke aus VBA übernommen die dieses Vorspanns bedürfen. Und mir ist aus VBA klar, dass diese Recorder zum Teil großen Mist aufzeichnen den man nicht mal umstricken kann. Immerhin aber liefern sie aber oft Codeschnipsel für die Syntax da man sich nicht alles merken kann (wenn man Schwerpunkte anderswo hat).

Ich kann es mir nicht leisten auch noch tiefer auf StarBasic einzugehen obwohl ich das durchaus gerne würde. Das Forum kenne ich; ich hatte es damals mit meiner Frage belästigt und wurde im Regen stehen gelassen (weswegen ich auch hier an Beobachtungen fragte). Sollte ich nunmehr raten scheint 3.4.5 den Bug beseitigt zu haben. Das werde ich in einem anderen XP testen.

So weit für den Moment,
Eric March
__________________
Eric March • »Wenn du eine Frage stellst musst du auch akzeptieren eine Antwort zu bekommen.« (Weisheit aus dem Kongo)
Mit Zitat antworten
  #7 (permalink)  
Alt 06.02.2012, 21:03
Kbyte
 
Registriert seit: 08.2007
Beiträge: 193
Und genau diese beiden "Einleitungszeilen" machen die Probleme.

Lösung:

1. Allen Code, welche VBA-Codeblöcke enthalten, in separate Module.
2. Die Dispatchercodes in Modulen ohne diese "Einleitungszeilen" nutzen.
3. Dispatcher-Code und VBA-Code niemals mit einander vermischen. Schon deshalb ist die Einarbeitung in Starbasic von Vorteil.

Das Buch "Makros in Openoffice.org" von Thomas Krumbein solltest Du Dir mal ansehen.
__________________
Hallo und Gruß!
René
Mit Zitat antworten
  #8 (permalink)  
Alt 06.02.2012, 21:05
Kbyte
 
Registriert seit: 08.2007
Beiträge: 193
Makros in OpenOffice.org
__________________
Hallo und Gruß!
René
Mit Zitat antworten
  #9 (permalink)  
Alt 06.02.2012, 22:10
Kbyte
 
Registriert seit: 08.2007
Beiträge: 193
Hier mal ein einfaches Makro. Es wird zuerst eine Inputbox angezeigt, in der der Dateiname abgefragt wird. Die aktive Datei wird unter diesem Namen gespeichert. Nur noch den Pfad bei "sUrl" anpassen. Eventuell noch die Dateiendung anpassen, je nach dem ob das Makro in Writer oder Calc ausgeführt wird. "StarDesktop.CurrentComponent" verweist immer auf die aktive Datei.

Code:
Sub Speicherntest()
Dim arg()
Dim sUrl As String
Dim sDateiname As String


sDateiname = Inputbox("Bitte Dateiname angeben") 'Dateiname abfragen
sDateiname = sDateiname & ".ods" 'Dateinamen die Dateinendung anhängen
sUrl = "private:factory/scalc" 'Interner Verweis auf Application. "sCalc = calc, swriter = Writer
oDoc = StarDesktop.CurrentComponent ' Verweis auf aktive Datei
sUrl = ConvertToUrl(Environ("USERPROFILE") & "/Desktop/" & sDateiname 'Pfad zum Speichern. Hier der Desktop

oDoc.storeAsURL(sUrl, arg()) 'Datei speichern
End Sub
__________________
Hallo und Gruß!
René
Mit Zitat antworten
  #10 (permalink)  
Alt 07.02.2012, 15:53
Kbyte
 
Registriert seit: 08.2007
Beiträge: 193
Und hier eine Möglichkeit zum Speichern der aktiven Arbeitsmappe und zum Öffnen einer Arbeitsmappe (Filter jeweils auf ODS-Dateien gesetzt). Diese Makros funktionieren so ähnlich wie "GetSaveAsFileName" bzw. "GetOpenFileName" in Excel. Vorteil dabei ist, dass auch die Einleitungszeilen und somit Mischcode verwendet werden kann.

Code:
Option VBASupport 1
Option Compatible
Option Explicit

Sub SpeicherTest2()
Rem Speichern der aktiven Arbeitsmappe

Dim sCalcSaveAsDialog As Object
Dim sCalcDoc As Object
Dim arg()
Dim sCalcNewFileName As String

sCalcDoc = StarDesktop.CurrentComponent
sCalcSaveAsDialog = createUnoService("com.sun.star.ui.dialogs.OfficeFilePicker")
with sCalcSaveAsDialog
    .initialize(array(3))
    .SetDefaultName("Test")
    .appendFilter("Openoffice Calc","*.ods")
    .execute()
end with
sCalcNewFileName = sCalcSaveAsDialog.Files(0)

If sCalcNewFileName <> 0 Then sCalcDoc.storeAsURL(sCalcNewFileName, arg())
End Sub

Sub OeffnenTest2()
Rem Oeffnen einer Arbeitsmappe

Dim sCalcOpenAsDialog As Object
Dim arg()
Dim sCalcNewFileName As String

sCalcOpenAsDialog = createUnoService("com.sun.star.ui.dialogs.OfficeFilePicker")
with sCalcOpenAsDialog
    .initialize(array(0))
    .appendFilter("Openoffice Calc","*.ods")
    .execute()
end with
sCalcNewFileName = sCalcOpenAsDialog.Files(0)

If sCalcNewFileName <> 0 Then _
StarDesktop.loadComponentFromURL(sCalcNewFileName, "_blank",0, arg())
End Sub
Vielleicht hilft Dir das weiter.

Übrigens:

sCalcDoc.storeAsURL = ist ähnlich "ActiveWorkbook.SaveAs"
sCalcDoc.storeToURL = ist ähnlich "ActiveWorkbook.SaveCopyAs"
Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
LibreOffice 3.3 etzreini Online: Ihre Meinung zu redaktionellen Artikeln auf unserer Website 29 13.08.2011 16:52
OpenOffice vs. LibreOffice ? Franck Office-Programme 2 24.07.2011 17:01
LibreOffice winwol3 Online: Ihre Meinung zu redaktionellen Artikeln auf unserer Website 0 23.03.2011 10:39
LibreOffice - zu empfehlen? Otherboard Office-Programme 1 13.03.2011 19:34
Ja wo iss er denn: LibreOffice VBQuiz Office-Programme 10 28.02.2011 17:03




Alle Zeitangaben in WEZ +2. Es ist jetzt 04:51 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
© PC-WELT.de, 2004-2008
12
Content Management by InterRed