|
|
||||||
Office-Programme Microsoft Office, OpenOffice/LibreOffice und andere |
|
|
LinkBack | Themen-Optionen | Thema bewerten | Ansicht |
|
||||
|
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
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) |
|
|||
|
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é |
|
||||
|
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
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) |
|
|||
|
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é |
|
|||
|
__________________
Hallo und Gruß! René |
|
|||
|
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é |
|
|||
|
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
Übrigens: sCalcDoc.storeAsURL = ist ähnlich "ActiveWorkbook.SaveAs" sCalcDoc.storeToURL = ist ähnlich "ActiveWorkbook.SaveCopyAs" |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | Thema bewerten |
|
|
|
|
||||
| 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.





