Zielordner ändern

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Zielordner ändern

Re: Zielordner ändern

von Jörg » Di, 17.03.2015 12:48

Hallo,
du hast sicher Recht.
Aber so wie es jetzt ist, kann der Nutzer schreiben was er will. Übertrieben gesagt. Die PDF landet immer im richtigen Ordner.(Es sei denn, er kriegt
die Jahreszahl nicht hin)
Kann ja noch ´nen Bsp-text in die inputboxen schreiben.
Gruß Jörg

Re: Zielordner ändern

von Stephan » Di, 17.03.2015 12:37

Nachtrag - Am Rande:
soweit ich Deinen Gesamt-Code richtig überpflogen habe ist doch auch die Inplementierung insofern nicht so gut als das Du es dem Nutzer überlässt neue Blattnamen zu vergeben.(?)
Warum verwendest Du statt Monatsnamen nicht besser eine Kombination von Monatsname und Jahr, also z.B. "März_2015" oder "M_2015" oder "03_2015" oder "03_15"?
Das würde Unsicherheiten ausschliessen und auch eine Variable für die Jahre entbehrlich machen.


Gruß
Stephan

Re: Zielordner ändern

von Jörg » Di, 17.03.2015 12:35

Hallo,
hab wie folgt geändert.

Code: Alles auswählen

tmp = myDoc.Sheets().getByName("config").GetCellRangeByName("B1").Formulalocal

Code: Alles auswählen

 myDoc.Sheets().getByName("config").GetCellRangeByName("B1").FormulaLocal = sNewFileUrl
Jetzt alles chic.

Vielen Dank an alle.

Re: Zielordner ändern

von Stephan » Di, 17.03.2015 12:33

Desto hilfreicher wären für mich dann auch Hinweise, warum ein von mir verfolgter Weg (Makroänderung durch Makro) nicht sinnvoll ist.
zumindest weil:
du kannst imho kein Makro-Modul mittels eines Makros verändern, welches Teil des Moduls ist, d.h. das Makro das die Änderung durchführt müsste in einem anderen Modul liegen.
Ob es dann geht und stabil läuft da bin ich mir auch nicht sicher, vielleicht sollte/muß man es sogar in eine andere Makrobibliothek verlegen.

Ich selber müsste das jetzt erst einmal testen, aber selbst wenn es funktionieren würde würde ich es so nicht lösen weil es keinerlei Vorteile zu einer 'konventionellen' Implementierung erkennen lässt.


Diese Gründe sind dann bedeutungslos wenn es trotzdem in der genannten Weise gelöst werden MUSS (dann musst Du das aber vor Dir selber gut begründen können) oder wenn Du Dich rein aus Interesse mit dieser Art der Implementierung beschäftigen willst um zu lernen.
Aus dem Kopf weiss ich das in der StarBasic-Faq einige einführende Dinge zur Manipulation von Modulen mittels Makro steht:
http://www.dannenhoefer.de/faqstarbasic ... schen.html
http://www.dannenhoefer.de/faqstarbasic ... ieren.html

Re: Zielordner ändern

von Stephan » Di, 17.03.2015 12:30

weil ich es falsch geschrieben hatte, nicht "ThisCompoment" sondern "ThisComponent"

Gruß
Stephan

Re: Zielordner ändern

von Jörg » Di, 17.03.2015 12:13

Hallo nocheinmal,

@ Stephan

Code: Alles auswählen

tmp = ThisCompoment.Sheets().getByName("config").GetCellRangeByName("B1").FormulaLocal
Es erscheint die Fehlermeldung: Basic-Laufzeitfehler - Objektvariable nicht belegt

Gruß Jörg

Re: Zielordner ändern

von Jörg » Di, 17.03.2015 11:40

Hallo Stephan,
entschuldige hab Deine Antwort erst jetzt gelesen.
Nichts liegt mir ferner, als Eure Hinweise zu ignorieren.
Richtig ist natürlich auch, daß ich von der Materie "keine" Ahnung habe.
Desto hilfreicher wären für mich dann auch Hinweise, warum ein von mir verfolgter Weg (Makroänderung durch Makro) nicht sinnvoll ist.

Nun werd ich mich mal um Deinen Vorschlag kümmern.
Vielen Dank erstmal.
Gruß Jörg

Re: Zielordner ändern

von Jörg » Di, 17.03.2015 11:31

Hallo,
hab die Zeile nun so geändert:

Code: Alles auswählen

args1(0).Value = "file:///E:/openoffice/Monatsabrechnungen/ "& Year(Date())&"/" & sTabName & ".pdf"
So weit so gut.
Aber:
Angenommen der Monatswechsel Dezember zu Januar erfolgt erst im Januar 2016, dann "fliegt" die Tabelle "Dezember 2015" in den Ordner 2016.
Das gleiche würde m.E. auch geschehen, wenn ich das aktuelle Datum verwende.

Gruß Jörg

Re: Zielordner ändern

von Stephan » Di, 17.03.2015 11:17

Höre bitte auf Karolus, denn er hat recht.

Am Einfachsten nutzt Du zur Variablenablage ein separates Tabellenblatt das Du versteckst. Lege also in der Datei ein Tabellenblatt namens "config" an, schreibe dort in A1 "aktuelles Jahr:" und in B1 "2015", dann verstecke das Blatt über Format-Tabelle ausblenden.

Ersetze nun im Makro die Zeile:

Code: Alles auswählen

args1(0).Value = "file:///E:/openoffice/Monatsabrechnungen/2015/" & sTabName & ".pdf"
durch folgende Zeilen:

Code: Alles auswählen

tmp = ThisCompoment.Sheets().getByName("config").GetCellRangeByName("B1").FormulaLocal
args1(0).Value = "file:///E:/openoffice/Monatsabrechnungen/" & tmp & "/" & sTabName & ".pdf"
sowie die Zeilen:

Code: Alles auswählen

if sNewName = "Januar" then
sNewFileUrl = inputbox ("Jahreswechsel?",0,"file:///E:/openoffice/Monatsabrechnungen/2015/" & sTabName & ".pdf")

end if
durch:

Code: Alles auswählen

if sNewName = "Januar" then
 sNewFileUrl = inputbox ("Geben Sie die gewünschte neue Jaheszahl ein. (bitte 4-stellig)", "Jahreswechsel?", Year(Now()))
 If Not (sNewFileUrl = "") Then 
	ThisCompoment.Sheets().getByName("config").GetCellRangeByName("B1").FormulaLocal = sNewFileUrl
 End If
End If

Gruß
Stephan

Re: Zielordner ändern

von Karolus » Di, 17.03.2015 10:34

Hallo
Meine ursprüngliche Frage aber war:
Wie kann ich diese Zeile mit einem Makro ändern,
Man möchte nicht Macrocode per Macro ändern, selbst dann nicht wenn man weiss wie es geht ( und schon gar nicht wenn man zB. wie du, offenbar überhaupt keine Ahnung von der Materie hat )

pflege die Jahreszahl als Variable ein, genauso wie du es bereits mit dem Monatsnamen machst oder ermittele beides zeitnahe dynamisch anhand des aktuellen Datums.

Karolus

Re: Zielordner ändern

von Jörg » Di, 17.03.2015 10:09

Hallo. danke für den Hinweis.
Jedoch ist es noch nicht das, was ich meine.
Denn, wenn ich mir nun mit Hilfe von "mkdir" ein neues Verzeichnis anlege, ändert sich an der
Zeile im vorhandenen Code

Code: Alles auswählen

args1(0).Value = "file:///E:/openoffice/Monatsabrechnungen/2015/" & sTabName & ".pdf"
erst mal nix.
Meine ursprüngliche Frage aber war:
Wie kann ich diese Zeile mit einem Makro ändern, so dass man nicht extra in die Makroverwaltung muß.
Der Vollständigkeit halber hier nochmal der kpl. Code.

Code: Alles auswählen

sub PDFspeichern 
rem ----------------------------------------------------------------------     
sTabName = Thiscomponent.currentcontroller.activesheet.name
msgbox (sTabName,_0, "Monatswechsel", 33)
rem----------------------------------------------------------------------
antwort = msgbox("Druckbereich kontrolliert?", 33,"Monatswechsel")
if antwort = 2 Then
		 exit sub
end if	
rem define variables
dim document   as object
dim dispatcher as object
myDoc = thisComponent
mySheet = myDoc.Sheets(3)


rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///E:/openoffice/Monatsabrechnungen/2015/" & sTabName & ".pdf"
args1(1).Name = "FilterName"
args1(1).Value = "calc_pdf_Export"
args1(2).Name = "FilterData"
args1(2).Value = Array(Array("UseLosslessCompression",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Quality",0,90,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ReduceImageResolution",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("MaxImageResolution",0,300,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTaggedPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SelectPdfVersion",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportNotes",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarks",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenBookmarkLevels",0,-1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTransitionEffects",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsSkipEmptyPages",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsAddStream",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EmbedStandardFonts",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FormsType",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportFormFields",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("AllowDuplicateFieldNames",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerToolbar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerMenubar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerWindowControls",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ResizeWindowToInitialPage",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("CenterWindow",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenInFullScreenMode",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("DisplayPDFDocumentTitle",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialView",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Magnification",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Zoom",0,100,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PageLayout",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FirstPageOnLeft",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialPage",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Printing",0,2,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Changes",0,4,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableCopyingOfContent",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableTextAccessForAccessibilityTools",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportLinksRelativeFsys",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PDFViewSelection",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ConvertOOoTargetToPDFTarget",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarksToPDFDestination",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("_OkButtonString",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EncryptFile",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPasswords",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("RestrictPermissions",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPermissionPassword",0,Array(),com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Selection",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE))

dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args1())


rem ----------------------------------------------------------------------
ocalc = thisComponent
        osheet = ocalc.sheets(3)
         oCellRange = osheet.getCellRangeByName("A3:P250") 
         ocellRange.clearContents(com.sun.star.sheet.CellFlags.VALUE)
             oCellRange = osheet.getCellRangeByName("A3:P250") 
             ocellRange.clearContents(com.sun.star.sheet.CellFlags.STRING)
               oCellRange = osheet.getCellRangeByName("A3:P250")
                ocellRange.clearContents(com.sun.star.sheet.CellFlags.DATETIME)

mycell = osheet.getCellRangebyName("A1")
mycell.formulalocal ="=R1&"" ""&TEXT(T1;""MMMM JJJJ"")"
rem-------------------------------------------------------------------------------------------
osheet = thiscomponent.currentcontroller.activeSheet
     sNewName = inputbox("Bitte neuen Blattnamen eingeben !","Monatswechsel","Neuer Abrechnungsmonat")
     osheet.name = sNewName
     rem------------------------------------------------------------------------

if sNewName = "Januar" then
sNewFileUrl = inputbox ("Jahreswechsel?",0,"file:///E:/openoffice/Monatsabrechnungen/2015/" & sTabName & ".pdf")

end if
rem---------------------------------------------------------------------------------------------

End Sub
Gruß Jörg

Re: Zielordner ändern

von F3K Total » Mo, 16.03.2015 18:14

Hi,
beschäftige dich mit den Basic-Funktionen

Code: Alles auswählen

fileexists()
mkdir()
Mit fileexists() prüfst du, ob ein Verzeichnis vorhanden ist, wenn nicht, legst du es mit mkdir() an.
Ein Beispiel:

Code: Alles auswählen

Sub S_Create_Folder_Current_Year
    urlFolder = "C:\Users\<DEIN USERNAME>\Desktop\"
    nYear = Year(Date())
    if fileexists( urlFolder + nYear) then
        msgbox """" + urlFolder + """ gibt es"
    else
        msgbox """" + urlFolder + """ gibt es nicht, wird jetzt angelegt!"
        mkdir( urlFolder + nYear)
    endif
End Sub
Gruß R

Re: Zielordner ändern

von Jörg » Mo, 16.03.2015 17:49

Hallo clag,

ist es nicht egal, ob ich nun den Tabellennamen oder eine Zelle auslese?
Dies steht am Ende des vorhandenen Codes.

Code: Alles auswählen

osheet = thiscomponent.currentcontroller.activeSheet
     sNewName = inputbox("Bitte neuen Blattnamen eingeben !","Monatswechsel","Neuer Abrechnungsmonat")
     osheet.name = sNewName
     rem------------------------------------------------------------------------
if sNewName = "Januar" then
sNewFileUrl = inputbox ("Jahreswechsel?",0,"file:///E:/openoffice/Monatsabrechnungen/directory/2015/" & sTabName & ".pdf")
FileUrl= converttourl(sNewFileUrl)
end if
rem---------------------------------------------------------------------------------------------
Das funktioniert . Die inputbox wird nur aktiv, wenn der aktuelle Tabellenname "Januar" ist, ändert aber leider nicht wie gewünscht den Zielordner.
Dein Hinweis, daß man in ein laufendes Makro nicht schreiben kann, ist wohl entscheidender. D.h., dass ich anders herangehen muß.
Aber wie ??
Gruß Jörg

Re: Zielordner ändern

von clag » Mo, 16.03.2015 17:21

Hallo Jörg,

in den Code eines laufenden Makro kannst du nichts schreiben.!
Aber warum gehst du es nicht einfacher an und liest den String einfach aus einer Zelle aus,
das Datum/Jahreszahl hast du doch bestimmt irgendwo in der Tabelle stehen?


PS
für mich selbst löse ich das direkt mit DATE im URL String

Code: Alles auswählen

 storePath = Format(xDate, "YYYY-MM") & "####" 
wobei xDate ein aus der Tabelle gelesenes Datum ist

Re: Zielordner ändern

von Jörg » Mo, 16.03.2015 16:19

Hallo clag,

funktioniert so nicht.

Als Ergebnis sollte im Makro der neue Pfad stehen.

Code: Alles auswählen

dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///E:/openoffice/Monatsabrechnungen/2016/" & sTabName & ".pdf"
args1(1).Name = "FilterName"
args1(1).Value = "calc_pdf_Export"
args1(2).Name = "FilterData"
Gruß Jörg

Nach oben