Seite 1 von 1
CALC: Rechnungsnummer erzeugen und als Dateiname abspeichern
Verfasst: Mo, 16.07.2012 12:53
von justy
Hallo an alle,
Problem 1: Es soll eine fortlaufende Reklamationsnummer erzeugt werden (zelle A1).
Dies habe ich gelöst mit:
Code: Alles auswählen
function GetAndSetNumber as string
dim f as Integer
dim rechnungsdatei as string
dim renummer as string
rechnungsdatei="d:/RKLnr.txt"
if FileExists("file:///"&rechnungsdatei) then
f = FreeFile()
Open "file:///"&rechnungsdatei for Input as #f
Line Input #f, renummer
close #f
f = FreeFile()
Open "file:///"&rechnungsdatei for output as #f
Print #f, val(renummer)+1
close #f
else
renummer=0
endif
GetAndSetNumber=renummer
end function
Problem 2: Die Reklamation soll unter dem Namen (wert zelle A1) in einem bestimmten ordner abgespeichert werden.
gelöst habe ich dies mit:
Code: Alles auswählen
Sub ReNummer_Speichern
dim dummy()
oDoc = ThisComponent
oSheet = oDoc.Sheets.getByName("Tabelle1") 'Tabellenblattname
oCell = oSheet.getCellRangeByName("A1") 'Zelle A1, in der Rechnungsnummer steht
sReNummer = oCell.String
sLaufwerk = "d:/" 'Achtung: Für den Speicherort den Laufwerkspfad anpassen
Filename = sReNummer
neuerpfad = sLaufwerk + Filename + ".ods"
dateiurl=converttourl(neuerpfad)
odoc.storeAsUrl(dateiurl,dummy())
End Sub
problem 3: Nun soll das ganze kombiniert werden. Das klappt aber nicht da ich funktion und sub habe.
Ziel: Es soll eine fortlaufende nummer in A1 geschrieben werden und nschließend die Datei unter der fortlaufenden Nummer abgespeichert werden.
Kann mir da jemand weiterhelfen?
Besten Dank
Sven
P.S. die angegebenen Lösungen habe ich hier aus dem Forum bzw. von
http://www.dannenhoefer.de
(System: oo 3.4.0 win7 x 64)
Moderation,4: verschoben in BASIC-Unterbereich, wo alle Makro-Fragen hin gehören; Betreff angepasst; CODE tags gesetzt
Re: CALC: Rechnungsnummer erzeugen und als Dateiname abspeic
Verfasst: Mo, 16.07.2012 13:03
von TorSo
Hallo Justy,
ich bin sicher auch noch nicht der Experte hier, aber wenn ich Dich richtig verstanden habe, funktionieren beide Makro einzeln.
Dann würde ich einfach ein Makro aufzeichnen, in dem ich die Makros in der gewünschten Reihenfolge starte.
Ist jetzt nur ein Gedanke der mir spontan einfiel. Aber vielleicht reicht Dir das ja schon.
Gruß TorSo
Re: CALC: Rechnungsnummer erzeugen und als Dateiname abspeic
Verfasst: Mo, 16.07.2012 13:19
von justy
Hallo TorSo,
Danke für die Antwort. Hab das gerade mal versucht. Leider kommt jetzt in Zelle A1 #NAME?.
Bin mir auch nicht sicher wie ich das Makro aufzeichen soll. Habe makro aufzeichnen gestartet-> dann beide Makros hintereinander ausgeführt-> und unter einem neuen Namen gespeichert.
Wie gehts dann weiter?
Grüße
justy
Re: CALC: Rechnungsnummer erzeugen und als Dateiname abspeic
Verfasst: Mo, 16.07.2012 14:23
von TorSo
Das ist für Deine fortlaufende Nummer
Code: Alles auswählen
REM ***** BASIC *****
sub DateienZaehlen
dim liste(10000) as string
m=getdirs(liste(),0,"C:\Hier den Ordner mit Deinen Reklamationen")
For i=0 to m-1
next i
oDoc = ThisComponent
oSheet = oDoc.sheets(0)
oZelle = oSheet.getCellbyPosition(0,0)
oZelle.Value = m + 1
end sub
function getdirs( liste(),z, folder) as integer
sFolderUrl = ConvertToUrl( Folder )
oSimpleFileAccess = createUnoService( "com.sun.star.ucb.SimpleFileAccess" )
aFolders = oSimpleFileAccess.getFolderContents( sFolderUrl,true )
For i = LBound( aFolders ) To UBound( aFolders )
sFile = aFolders( i )
If oSimpleFileAccess.isFolder( sFile ) Then
getdirs( liste(),z, sFile)
Else
liste(z)=sfile
z=z+1
end if
next i
getdirs=z
end function
Das ist zum Speichern Unter
Code: Alles auswählen
REM ***** BASIC *****
sub SpeichernUnter
oDoc=thisComponent
Sheet = oDoc.Sheets(0)
Cell = Sheet.getCellByPosition(0, 0) '<= Das ist Zelle A1
Filename = Cell.String
Path = "file:///C:/Hier Deinen Speicherordner eingeben/"
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "FilterName"
args1(0).Value = "StarOffice XML (Calc)"
oDoc.storeasurl(Path & Filename & ".ods",args1())
end sub
Nun würde ich den ersten Code mit dem Öffnen des entsprechenden Dokuments verknüpfen.
Das zweite kannst Du dann ganz normal ausführen.
Gruß TorSo
Re: CALC: Rechnungsnummer erzeugen und als Dateiname abspeic
Verfasst: Mo, 16.07.2012 15:13
von justy
Hi TorSo,
besten Dank schon mal!!! Bin mir nicht ganz sicher wie ich es einbinden soll:
Makro 1: für die fortlaufende Nummer:
wenn ich das Makro "Dateien zählen" ausführe bekomme ich: 5 in zelle A1 / es sind aber nur 4 dateien im Ordner
wenn ich das Makro function " getdirs2 ausführe bekomme ich Fehler: BASIC Laufzeitfehler Argument ist nicht optional
wenn ich in Zelle A1 eingebe: =getdirs() dann bekomme ich den selben Fehler. Wenn ich dann OK drücke kommt die Zahl 4
------------------------
weitere Fragen: bin echt nicht mehr so fit in Makros wenn ich denn schonmal war
wie ist es zu verstehen:
Nun würde ich den ersten Code mit dem Öffnen des entsprechenden Dokuments verknüpfen.?
Das zweite kannst Du dann ganz normal ausführen.?
Es sollte so sein, dass beim öffnen sich die Reklamationsnummer automatisch um +1 erhöht und automatisch beim speichern diese Nummer als Dateiname verwendet wird. Der Nutzer soll keine Makros manuell ausführen müssen.
Besten Dank für deine Hilfe
Grüße
justy
Re: CALC: Rechnungsnummer erzeugen und als Dateiname abspeic
Verfasst: Mo, 16.07.2012 15:43
von TorSo
Also 5 ist doch dann die nächste laufende Nummer. dann stimmt´s doch.
Öffne einfach Deine Reklamationsdatei
Extras>Makros>Makros verwalten>OpenOffice.org>zuordnen>Laden des Dokuments beendet>Makro>jetzt das Makro auswählen "DateienZaehlen">OK
Nun sollte beim Öffnen der Datei automatisch die laufende Nummer in Zelle A1 stehen.
Das zweite Makro kannst Du dann beim schliessen der Datei ausführen lassen. Dann muss niemand ein Makro von Hand ausführen.
Gruß TorSo
Re: CALC: Rechnungsnummer erzeugen und als Dateiname abspeic
Verfasst: Mo, 16.07.2012 16:36
von justy
hab ich jetzt verstanden.
Leider geht's nicht.
1. ich kann nur: Extras>Makros>Makros verwalten>OpenOffice.org> meine makros>zuordnen.....
bei deinem weg ist "zuordnen" ausgegraut.
wenn ich meinen weg wähle kommt folgender Fehler: Laufzeitfehler Eigenschaft oder Methode nicht gefunden: sheets
an der Stelle: oSheet = oDoc.sheets(0)
komisch. Eigentlich müsste das doch gehn.
verflixt

Re: CALC: Rechnungsnummer erzeugen und als Dateiname abspeic
Verfasst: Di, 17.07.2012 10:02
von TorSo
Guten Morgen,
ich vermute jetzt mal, dass Deine Makros nicht in "Meine Makros" liegen, sondern evtl. in der entsprechenden Arbeitsmappe. Dann müsstest Du natürlich diese anwählen um deine Makros zuzuordnen.
Gruß TorSo
Re: CALC: Rechnungsnummer erzeugen und als Dateiname abspeic
Verfasst: Mi, 18.07.2012 10:53
von justy
Hallo TorSo,
super hat jetzt geklappt. Vielen Dank!!!
Nur ergibt sich jetzt daraus folgendes Problem. Wenn ich eine Reklamation nochmals öffne um Daten nachzutragen, dannn ändert sich jetzt die Reklamationsnummer:
zum Einen weil ja schon eine Datei im Verzeichnis vorhanden ist (also +1 bei RKL Nr)
zum Anderen weil eine temporäre Datei erzeugt wird ( nochmal +1 bei RKL Nr)
Kann man das Makro ev. auf eine Vorlage anwenden? so das dieses Problem nicht entsteht?
beste grüße
justy
Re: CALC: Rechnungsnummer erzeugen und als Dateiname abspeic
Verfasst: Mi, 18.07.2012 11:04
von Karolus
Hallo
Ja, du kannst das auf einer Vorlage anwenden, in dem Fall muss das Makro dem Ereignis "Dokument erzeugen" in der Vorlage zugeordnet werden.
Karo
Re: CALC: Rechnungsnummer erzeugen und als Dateiname abspeic
Verfasst: Mi, 18.07.2012 11:30
von justy
Hallo Karo,
hab das Ereignis auf Dokument erzeugen angepasst. Funktioniert aber leider nicht. RKL_Nr bleibt unverändert.
gruß
justy
Re: CALC: Rechnungsnummer erzeugen und als Dateiname abspeic
Verfasst: Mi, 18.07.2012 15:06
von justy
Hallo zusammen,
die Lösung war Ereignis: "neues dokument" NICHT "dokument erzeugen" für die Vorlage.
jetzt habe ich allerdings das Problem, dass ich im neuen dokument (unbenannt) das Abspeichern unter der neuen Reklamationsnummer nicht hinbekomme. Ich finde kein Ereignis das mit dem Makro:
REM ***** BASIC *****
sub SpeichernUnter
oDoc=thisComponent
Sheet = oDoc.Sheets(0)
Cell = Sheet.getCellByPosition(0, 0) '<= Das ist Zelle A1
Filename = Cell.String
Path = "file:///C:/Hier Deinen Speicherordner eingeben/"
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "FilterName"
args1(0).Value = "StarOffice XML (Calc)"
oDoc.storeasurl(Path & Filename & ".ods",args1())
end sub
funktioniert.
PLS help
THX
justy