BITTE helfen Sie uns das LibreOffice Forum zu erhalten!
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
Herzlichen Dank an Alle, die bisher gespendet haben! Spenden heute: 0 Euro
>DANK IHRER SPENDEN -> KEINE WERBUNG FÜR REGISTRIERTE LIBREOFFICE-FORUM-USER!<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Writer, Speicherpfad per vba vorgeben
Writer, Speicherpfad per vba vorgeben
Hallo zusammen,
ich möchte ein Word Makro in Libreoffice Writer überführen und bis auf wenige Dinge klappt es schon ganz gut.
Wie bekomme ich es hin, dass ich einen Speicherort für das Dokument vorschlage. Ich möchte also im Prinzip einen Dateinamen per Makro vorschlagen (z.B. D:\Dokumente\meinedatei.doc). Wenn die Prozedur aufgerufen wird, soll der Speichern Dialog im Verzeichnis D:\Dokumente aufgehen und der Dateiname meinedatei.doc vorausgefüllt sein.
In Word läuft es über
With Dialogs(wdDialogFileSaveAs)
.Name = Dateiname
.Show
End With
dies wird in Libreoffice angemeckert (Laufzeitfehler 423, Name).
Danke für jede Hilfe
Julian
ich möchte ein Word Makro in Libreoffice Writer überführen und bis auf wenige Dinge klappt es schon ganz gut.
Wie bekomme ich es hin, dass ich einen Speicherort für das Dokument vorschlage. Ich möchte also im Prinzip einen Dateinamen per Makro vorschlagen (z.B. D:\Dokumente\meinedatei.doc). Wenn die Prozedur aufgerufen wird, soll der Speichern Dialog im Verzeichnis D:\Dokumente aufgehen und der Dateiname meinedatei.doc vorausgefüllt sein.
In Word läuft es über
With Dialogs(wdDialogFileSaveAs)
.Name = Dateiname
.Show
End With
dies wird in Libreoffice angemeckert (Laufzeitfehler 423, Name).
Danke für jede Hilfe
Julian
Re: Writer, Speicherpfad per vba vorgeben
Hallo,
LibreOffice (und OpenOffice) verwenden die Makrosprache"Starbasic" und nicht vba.
Hier ist ein Handbuch
http://zid-luxinst.uibk.ac.at/mirror/st ... ide_de.pdf
Wiki - Starbasic, wo du auch ein PDF-Dokument zur Übertragung von Excel-VBA zu StarBasic (Calc) findest
http://www.ooowiki.de/StarBasic#Siehe_auch
und bei Dannenhöfer findest du wertvolle Tipps
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig133
-> Übrigens, Standard-Dateiformat ist bei LibreOffice ODF und nicht .doc.
LibreOffice (und OpenOffice) verwenden die Makrosprache"Starbasic" und nicht vba.
Hier ist ein Handbuch
http://zid-luxinst.uibk.ac.at/mirror/st ... ide_de.pdf
Wiki - Starbasic, wo du auch ein PDF-Dokument zur Übertragung von Excel-VBA zu StarBasic (Calc) findest
http://www.ooowiki.de/StarBasic#Siehe_auch
und bei Dannenhöfer findest du wertvolle Tipps
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig133
-> Übrigens, Standard-Dateiformat ist bei LibreOffice ODF und nicht .doc.
Re: Writer, Speicherpfad per vba vorgeben
Hallo JulianLE
Unter LO ist das Leider nicht so einfach wie unter Word.
Unten habe ich ein Beispiel, wie du das machen kannst.
Allerdings musst du unter Windows auf Grund eines Bugs den Libreoffice eigenen Speichern-Dialog verwenden,
da sonnst der voreingestellte Pfad nicht im Dialog erscheint.
(Extras -> Optionen-> Libreoffice->Allgemein->Häkchen bei "Libreoffice-Dialoge verwenden")
Dieses Makro speichert nur in die Libreoffice eigenen Formate (ODF).
Willst du z.B. in Microsoft Formate speichern, musst du beim Speichern noch einen Filter verwenden.
Hier erstmal der Code
Gruß Frieder
Unter LO ist das Leider nicht so einfach wie unter Word.
Unten habe ich ein Beispiel, wie du das machen kannst.
Allerdings musst du unter Windows auf Grund eines Bugs den Libreoffice eigenen Speichern-Dialog verwenden,
da sonnst der voreingestellte Pfad nicht im Dialog erscheint.
(Extras -> Optionen-> Libreoffice->Allgemein->Häkchen bei "Libreoffice-Dialoge verwenden")
Dieses Makro speichert nur in die Libreoffice eigenen Formate (ODF).
Willst du z.B. in Microsoft Formate speichern, musst du beim Speichern noch einen Filter verwenden.
Hier erstmal der Code
Code: Alles auswählen
Sub saveDocument
Dim sEnding$
Dim Dialogtyp(0)
dim sUrl$ ,sName$
Dim MyDialog
dim dummy()
On error goto Errorhandler
'Überprüfen, ob das dokument schoneinmahl gespeichert wurde.
If 0 = len (thisComponent.getURL)Then
'Falls nicht: überprüfen was es führ ein Dokument ist.
If thisComponent.supportsService("com.sun.star.text.TextDocument") Then
sEnding = ".odt"
elseIf thisComponent.supportsService("com.sun.star.sheet.SpreadsheetDocument") Then
sEnding = ".ods"
elseIf thisComponent.supportsService("com.sun.star.presentation.PresentationDocument") Then
sEnding = ".odp"
elseIf thisComponent.supportsService("com.sun.star.drawing.DrawingDocument") Then
sEnding = ".odg"
elseIf thisComponent.supportsService("com.sun.star.sdb.OfficeDatabaseDocument") Then
sEnding = ".odb"
elseIf thisComponent.supportsService("com.sun.star.formula.FormulaProperties") Then
sEnding = ".odf"
End if
sName = thisComponent.Title & sEnding
Else
sName = thisComponent.Title
End if
'Pfad auswahldialog initialisieren
MyDialog=createunoservice("com.sun.star.ui.dialogs.FilePicker")
DialogTyp(0) =com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE
myDialog.initialize( DialogTyp())
myDialog.displaydirectory=converttourl("c:\")
myDialog.DefaultName = sName
'Dialog ausführen, und überprüfen, ob mit Speichern bestätigt wurde
If MyDialog.execute() = _
com.sun.star.ui.dialogs.ExecutableDialogResults.OK then
' ausgewählter Dateiname
sUrl = MyDialog.Files(0)
'Datei Speichern
ThisComponent.storeAsUrl(sUrl,dummy()) 'storeToUrl
End if
Errorhandler:
End Sub
Re: Writer, Speicherpfad per vba vorgeben
Hallo JulianLE
Ich habe mein vorheriges Makro gerade ein wenig abgewandelt.
Jetzt funktioniert es nur noch für Writer-Dokumente,
exportiert diese aber gleich ins "MS Word 97/2000/2003/XP" also "*.doc" -Format.
Gruß Frieder
Ich habe mein vorheriges Makro gerade ein wenig abgewandelt.
Jetzt funktioniert es nur noch für Writer-Dokumente,
exportiert diese aber gleich ins "MS Word 97/2000/2003/XP" also "*.doc" -Format.
Code: Alles auswählen
Sub saveWriterDocumentAs_doc
Dim Dialogtyp(0)
dim sUrl$ ,sName$
Dim MyDialog
Dim myProps(0) as New com.sun.star.beans.PropertyValue
dim aName () As String
Dim i%
On error goto Errorhandler
' überprüfen ob es ein Writer Dokument ist.
If Not thisComponent.supportsService("com.sun.star.text.TextDocument") Then
Exit Sub
End if
'Überprüfen, ob das Dokument schon einmahl gespeichert wurde.
If 0 = len (thisComponent.getURL) Then
sName = thisComponent.Title & ".doc"
Else
'Wenn es bereits gespeichert wurde, und somit schon eine Endung hat:
aName() =Split( thisComponent.Title, ".")
for i=0 To UBound(aName())-1
sName = sName & aName(i) & "."
Next
sName=sName & "doc"
End if
'du kannst der Variablen sName natürlich auch selber einen Namen übergeben z.B.: sName = "meinedatei.doc"
'die Endung muß aber mit dem Filter (sihe unten ) übereinstimmen.
'Pfad Auswahldialog initialisieren
MyDialog=createunoservice("com.sun.star.ui.dialogs.FilePicker")
'"Speichern" Stadt "OK" auf der Schaltfläche
DialogTyp(0) =com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE
MyDialog.initialize( DialogTyp())
'Start-Verzeichnis auswählen
MyDialog.displaydirectory=converttourl("c:\") 'Dieser Pfad kann angepasst werden
'Vorbestimmter Name der Datei
MyDialog.DefaultName = sName
'Anzeige-Filter. Dieser Filter hat keine auswirkungen auf den Speicher-Filter(es ist nur ein Kosmetisches Element)
MyDialog.appendFilter( "MS Word 97/2000/2003/XP", "*.doc" )'Es werden nur ".doc" dateien angezeigt
'Dialog ausführen, und überprüfen, ob mit Speichern bestätigt wurde
If MyDialog.execute() = _
com.sun.star.ui.dialogs.ExecutableDialogResults.OK then
' ausgewählter Dateiname
sUrl = MyDialog.Files(0)
'MS Word Filter festlegen. Dieser Filter ist essentiel für das Speichern.
myProps(0).Name="FilterName"
myProps(0).Value = "MS Word 97"
'Datei Speichern
ThisComponent.storeAsUrl(sUrl,myProps()) '"storeToUrl" bewirkt,
'dass das dokument zwar unter der adresse gespeichert wird,
'aber das geöffnete dokument bleibt das unter dem vorherigen speicherort.
End if
Errorhandler:
End Sub
Re: Writer, Speicherpfad per vba vorgeben
Hallo Frieder,
tausend Dank, das hat jetzt schonmal richtig weitergeholfen. Egal welchen Dialog ich verwende, den LO-eigenen oder nicht, er meldet sich zwar immer im zuletzt eingestellten Pfad, aber wenn ich ihm den kompletten Pfad inkl. Dateinamen übergebe, dann speichert er auch tatsächlich wo er soll. Es sieht zwar bisschen merkwürdig aus und ergibt ziemlich lange Einträge im Dialog, geht aber.
Nun gehe ich das nächste Problem an
Julian
tausend Dank, das hat jetzt schonmal richtig weitergeholfen. Egal welchen Dialog ich verwende, den LO-eigenen oder nicht, er meldet sich zwar immer im zuletzt eingestellten Pfad, aber wenn ich ihm den kompletten Pfad inkl. Dateinamen übergebe, dann speichert er auch tatsächlich wo er soll. Es sieht zwar bisschen merkwürdig aus und ergibt ziemlich lange Einträge im Dialog, geht aber.
Nun gehe ich das nächste Problem an
Julian
Re: Writer, Speicherpfad per vba vorgeben
Hallo Julian
Wenn er nicht Existiert, kann man ihn natürlich vorher per Makro erzeugen.
Am besten, du schickst mir deinen Code (wenn du ihn nicht hier veröffentlichen willst, kannst du ihn mir auch gerne als PN schicken).
Dann kann ich schauen, wo der Fehler liegt.
Mit dem LO eigenen Dialog funktioniert es bei mir immer!
Hier noch ein Beispiel für einen komplexeren Pfad.
Gruß Frieder
Dann hast du wahrscheinlich einen Fehler in der Syntax, oder der gewünschte Ordner existiert noch nicht.JulianLE hat geschrieben: Egal welchen Dialog ich verwende, den LO-eigenen oder nicht, er meldet sich zwar immer im zuletzt eingestellten Pfad, ...
Wenn er nicht Existiert, kann man ihn natürlich vorher per Makro erzeugen.
Code: Alles auswählen
sMyPath = "C:\Users\Nansen\Documents\Greiner Skript\ttt3"
If Not FileExists(sMyPath)Then
MkDir sMyPath
End if
Dann kann ich schauen, wo der Fehler liegt.
Mit dem LO eigenen Dialog funktioniert es bei mir immer!
Hier noch ein Beispiel für einen komplexeren Pfad.
Code: Alles auswählen
Dim sMyPath As String
sMyPath = "C:\Users\Nansen\Documents\Greiner Skript"
.....
.....
MyDialog.displaydirectory=converttourl(sMyPath)
Re: Writer, Speicherpfad per vba vorgeben
Sorry Frieder, dass ich so spät antworte, ich war im Urlaub
Ich hab es nun nochmal an meinem anderen Rechner probiert, auf dem ich Libreoffice nicht also portable version, sondern fest installiert habe. Wenn ich den Dialog auf den Libreoffice-eigenen umstellen, dann funzt es jetzt mit Deiner Methode.
Vielen Dank dafür!
Ich hab es nun nochmal an meinem anderen Rechner probiert, auf dem ich Libreoffice nicht also portable version, sondern fest installiert habe. Wenn ich den Dialog auf den Libreoffice-eigenen umstellen, dann funzt es jetzt mit Deiner Methode.
Vielen Dank dafür!
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️