🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Problem mit Macro

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
BritzFox
Beiträge: 11
Registriert: Fr 17. Mär 2017, 17:49

Problem mit Macro

Beitrag von BritzFox » Sa 31. Okt 2020, 17:32

Moin, ich hatte vor längerer Zeit ein Makro mit Hilfe hier aus dem Forum gebastelt.
Seit einem kürzlichen Update habe ich da ein Problem mit.
Wenn ich in Calc das Makro "speichern unter" anklicke und dann einen Ordner auswähle, der Unterordner enthält und auf "Speichern" klicke, wechselt Calc in den nächsten Unterordner.
Ich will da Speichern, wo ich gerade bin.
Das Problem war vorher nicht.
Kann man das irgendwie beheben ?

Das Makro:
sub save2
oDoc=thisComponent
Sheet = oDoc.Sheets(0) '[erstes Arbeitsblatt]
Cell = Sheet.getCellByPosition(12, 12) '[Zelle A1]
Filename = Cell.String
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "FilterName"
args1(0).Value = "calc8"

arg = Array(com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION)
dialog = CreateUnoService("com.sun.star.ui.dialogs.OfficeFilePicker")
'Hinweis: der Dialog "com.sun.star.ui.dialogs.FilePicker" hat einen Bug bei .DisplayDirectory
' deshalb muss hier der OO-eigene Dialog .OfficeFilePicker genutzt werden
dialog.Initialize(arg())
dialog.appendFilter( "ODF Tabellendokument (*.ods)", "*.ods" )
dialog.SetMultiselectionMode(False)
dialog.DisplayDirectory = ConvertToURL("D:\Daten\Firma\rechnungen\2020\")
dialog.DefaultName = Filename
ok = dialog.execute()
if ok = 1 Then
datei = dialog.getFiles()
URL = datei(0)
oDoc.storeasurl(URL, args1())
end if

end sub

Das Bild, welches ich erhalte.
Klicke ich jetzt auf "Speichern", wechselt calc den Speicherpfad (in den PDF Ordner).
Dateianhänge
calc prob.PNG
calc prob.PNG (27.95 KiB) 1859 mal betrachtet

Helmut_S
* LO-Experte *
Beiträge: 756
Registriert: Di 9. Feb 2016, 19:27

Re: Problem mit Macro

Beitrag von Helmut_S » So 1. Nov 2020, 10:39

Hallo BritzFox Das Makro, das du gepostet hast, funktioniert. Da der im Makro eingestellte Pfad bei mir nicht vorhanden ist kommt zuerst eine Fehlermeldung, nach Klick auf ok wird der Pfad angeboten, der in den Optionen unter Arbeitsverzeichnis eingestellt ist. Das Makro verwendet den LO-internen Datei-speichern-Dialog . sowei alles korrekt.
In der beiliegenden Tabelle habe ich ein Makro mit dem M-Rekorder aufgezeichnet. Dieses verwendet den Datei-Speichern-Dialog des Betriebssystems (wenn dieser in den Optionen so eingestellt ist)und speichert die Datei im Ordner der geladenen Datei, ist aber um einiges kürzer. Button "Speichern unter 2".
In deinem Screenshot hast du den Cursor auf dem Ordner "PDF" stehen. Das ist die Ursache, dass in diesem Ordner gespeichert wird. Das vermeidest du, wenn der Cursor NICHT dort sondern in der Datei-Namen Eingabezeile steht.
Und überhaupt frage ich mich wozu das Makro gut sein soll. Es gibt doch den standardmäßig voreingestellten Kurzbefehl für "Speichern-unter" mit Str+Umschalten+S?
Zukünftig solltest du Makrocode in code-Tags einfügen, so wie hier als Beispiel der Code des aufgezeichneten (IMHO überflüssigen) Makro und wenn es wirklich um Makros geht, gibt es dafür das Unterverzeichnis "LO-Programmierung".

Code: Alles auswählen

sub speichernunter
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, Array())
end sub
Gruß Helmut
Dateianhänge
Speichernunter01.ods
(17.24 KiB) 108-mal heruntergeladen
MX-Linux KDE + Linux-Mint Cinnamon

BritzFox
Beiträge: 11
Registriert: Fr 17. Mär 2017, 17:49

Re: Problem mit Macro

Beitrag von BritzFox » So 1. Nov 2020, 12:31

Und überhaupt frage ich mich wozu das Makro gut sein soll.
Das Makro liest mir den Dateinamen, der aus mehreren Komponenten besteht aus dem Feld $M$13 und füllt diesen in den Dateinamen in dem vorgegebenen Ordner ein.
Wenn ich jetzt im Ordner 2020 noch auf den Ordner 10 (Monat 10) klicke und dann auf "Speichern" taucht er unter LO 6.4.4.2 in den Ordner PDF.

Ich habe mal schnell einen Test-PC mit LO 5.3.6.1 aufgesetzt.
Wenn ich da das gleiche mache, taucht er nicht in den PDF-Ordner sondern speichert direkt unter dem Dateinamen.

Das Ganze hat für mich schon einen tieferen Sinn und "Strg+S" reichen da nicht aus.

Falls keiner eine Idee hat, switche ich zurück zu LO 5.
Dort funktioniert es -aus unerklärlichen Gründen- wunderbar und wie gewollt / gewohnt.
Dateianhänge
fehler2.PNG
fehler2.PNG (48.41 KiB) 1784 mal betrachtet

mikele
* LO-Experte *
Beiträge: 1932
Registriert: Mo 1. Aug 2011, 20:51

Re: Problem mit Macro

Beitrag von mikele » So 1. Nov 2020, 12:54

Hallo,
da scheint sich also etwas geändert zu haben ...
Vielleicht wäre es grundsätzlich sinnvoller, anstelle des FilePickers den FolderPicker zu wählen. Es geht dir ja "nur" darum, den richtigen Speicherort zu wählen.
Gruß,
mikele

BritzFox
Beiträge: 11
Registriert: Fr 17. Mär 2017, 17:49

Re: Problem mit Macro

Beitrag von BritzFox » So 1. Nov 2020, 13:18

Ich bin da jetzt nicht so bewandert mit Makros.
Wenn ich FilePicker in FolderPicker ändere bekomme ich nen Fehler.

mikele
* LO-Experte *
Beiträge: 1932
Registriert: Mo 1. Aug 2011, 20:51

Re: Problem mit Macro

Beitrag von mikele » So 1. Nov 2020, 13:29

Hallo,

Code: Alles auswählen

oDoc=thisComponent
Sheet = oDoc.Sheets(0) '[erstes Arbeitsblatt]
Cell = Sheet.getCellByPosition(1, 0) '[Zelle A1]
sFilename = Cell.String
dim args1(0) as new com.sun.star.beans.PropertyValue
dialog = CreateUnoService("com.sun.star.ui.dialogs.OfficeFolderPicker")
dialog.setDisplayDirectory(ConvertToURL("D:\Daten\Firma\rechnungen\2020\"))
ok = dialog.execute()
if ok = 1 Then
	sPfad = dialog.getdirectory()
	sURL = ConvertToUrl(sPfad & "\" & sFilename & ".ods")
	oDoc.storeasurl(sURL, args1())
end if
Gruß,
mikele

BritzFox
Beiträge: 11
Registriert: Fr 17. Mär 2017, 17:49

Re: Problem mit Macro

Beitrag von BritzFox » So 1. Nov 2020, 14:25

Da meckert er die Zeile an (scripterror)
dialog.setDisplayDirectory(ConvertToURL("D:\Daten\Firma\rechnungen\2020\"))

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Problem mit Macro

Beitrag von F3K Total » So 1. Nov 2020, 17:27

Versuche dies:

Code: Alles auswählen

sub SAVEAS_
    oDoc = thisComponent
    Sheet = oDoc.Sheets(0) '[erstes Arbeitsblatt]
    Cell = Sheet.getCellByPosition(0, 0) '[Zelle A1]
    sPfad = "D:\Daten\Firma\rechnungen\2020"
    sFilename = Cell.String
    dim args1(0) as new com.sun.star.beans.PropertyValue
    dialog = CreateUnoService("com.sun.star.ui.dialogs.OfficeFolderPicker")
    dialog.setDisplayDirectory(ConvertToURL(sPfad))
    ok = dialog.execute()
    if ok = 1 Then
        sPfad = dialog.getdirectory()
        sURL = ConvertToUrl(sPfad & sFilename & ".ods")
        print sURL
        oDoc.storeasurl(sURL, args1())
    end if
end SUB
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Problem mit Macro

Beitrag von F3K Total » So 1. Nov 2020, 17:40

Hallo zusammen,
ich habe gerade unter Windows 10 folgendes Makro probiert:

Code: Alles auswählen

sub save2
    oDoc = thisComponent
    Sheet = oDoc.Sheets(0) '[erstes Arbeitsblatt]
    Cell = Sheet.getCellByPosition(0, 0) '[Zelle A1]
    Filename = Cell.String
    dim args1(0) as new com.sun.star.beans.PropertyValue
    args1(0).Name = "FilterName"
    args1(0).Value = "calc8"
    arg = Array(com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION)
    dialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
    'dialog = CreateUnoService("com.sun.star.ui.dialogs.OfficeFilePicker")
    'Hinweis: der Dialog "com.sun.star.ui.dialogs.FilePicker" hat einen Bug bei .DisplayDirectory
    'deshalb muss hier der OO-eigene Dialog .OfficeFilePicker genutzt werden
    'EDIT:01.11.2020 : Gerade unter Windows 10 mit "com.sun.star.ui.dialogs.FilePicker" probiert, scheint wieder in Ordnung!
    dialog.Initialize(arg())
    dialog.appendFilter( "ODF Tabellendokument (*.ods)", "*.ods" )
    dialog.SetMultiselectionMode(False)
    dialog.DisplayDirectory = ConvertToURL("D:\Daten\Firma\rechnungen\2020")
    dialog.DefaultName = Filename
    ok = dialog.execute()
    if ok = 1 Then
        datei = dialog.getFiles()
        URL = datei(0)
        oDoc.storeasurl(URL, args1())
    end if
end sub
Wenn der Dateiname in Zelle A1 steht funktioniert es bei mir wie gewünscht, der genannte BUG im
com.sun.star.ui.dialogs.FilePicker also nicht com.sun.star.ui.dialogs.OfficeFilePicker scheint mit Windows 10/ LibreOffice 7.0.3 nicht mehr zu existieren, kann das bitte jemand nachtesten? Bei mir wird das gewünschte Dirctory angezeigt.

Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

BritzFox
Beiträge: 11
Registriert: Fr 17. Mär 2017, 17:49

Re: Problem mit Macro

Beitrag von BritzFox » So 1. Nov 2020, 17:53

Die Macros gehen nicht.
Ich habe ein Downgrade zu 6.3 durchgeführt.
Damit läuft es noch.
Ab 6.4 habe ich das Problem...

@F3K Total
Nachtrag:
Dein Macro geht doch.
Danke...


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.



Antworten