Ich bin gerade dabei von StarOffice 5.2 auf OO umzusteigen. Es hat mir die letzten 14 Jahre gute Dienste geleistet, aber jetzt unter Windows 7 gab es schon ein paar sporadische Abstürze, so daß ich denke, es wird Zeit, meine Daten der Neuzeit anzupassen. Meine ganzen Dokumente konnte ich schon mit dem Datei-Konverter umwandeln.
Probleme bereitet mir ein Makro-Script, das ich dazu benutzt habe, um Rechnungsnummern zu generieren.
Code: Alles auswählen
REM ***** Verwaltung der Rechnungsnummern *****
'
' Die Vollständige Nummer wird gebildet aus Jahr + fortlaufender Nummer
' Das Jahr (zweistellig) bildet den Nummernkreis,
' in der Datei wird nur die fortlaufende Nummer dreistellig gespeichert
' Jahr wird on the fly gebildet, wenn eine Nummer gebraucht wird.
Option explicit
Const cReNumFile = "Y:\OpenOfficeDaten\Rechnungen\ReNummer.num" 'letzte Vergebene Nummer
Const cReNumLog = "Y:\OpenOfficeDaten\Rechnungen\ReNummer.log" 'Log aller Rechnungen
' für msgbox( Text$ + chr(13) + Text2$, cJN + cStop, Titel$ ):
Const cOK=0, cOkEsc=1, cEscRetry=2, cYNEsc=3, cYN=4, cRetryEsc=5 'Buttons
Const cStop=16, cAsk=32, cExplain=48, cInfo=64 'Symbols
Const c1Button=0, c2Button=256, c3Button=512 'Def-Button
Const rcYes=6,rcNo=7,rcOK=1,rcEsc=2,rcRepeat=4,rcIgnore=5 'Return-Codes
' Bildet eine vollständige neue Nummer anhand des zuletzt gespeicherten
' Wertes
Sub getReNum
dim ReNum$
dim msg$
ReNum$ = right$(date(),2) & readReNum()
msg$ = "Die aktuelle Rechnungsnummer lautet:"+chr(13)+chr(13)+string(20,"")+reNum$
msg$ = msg$ + chr(13)+chr(13)+ "Soll sie an der Cursorposition eingefügt werden?"
msg$ = msg$ + chr(13)+ "Sie wird danach automatisch erhöht und gespeichert!"
if rcYes = msgbox( msg$, cYN, "Rechnungsnummer") then
Selection.Text.Insert( ReNum$ )
call writeReNum
' Logfile schreiben
if FileExists("file:///"&cReNumLog) then
dim FileHandle as Integer
dim FileName$
FileName$ = Application.ActiveDocument.FullName
FileHandle = FreeFile()
Open cReNumLog for Append Access Write Lock Read Write as #FileHandle
Print #FileHandle, ReNum$ + ";" + date() + ";"+ FileName$
Close #FileHandle
else
msgbox("Log-Datei nicht gefunden!",cStop, "Fehler (in: getReNum)")
endif
endif
End Sub
'-----------------------------------------------------------
' Lowlevel Datei Lesen und Schreiben
'
Function readReNum as String
dim FileHandle as Integer
dim Nummer$
if FileExists("file:///"&cReNumFile) then
FileHandle = FreeFile()
Open cReNumFile for Input Access read as #FileHandle
Line Input #FileHandle, Nummer$
close #FileHandle
readReNum = Nummer$
else
msgbox("Datei nicht gefunden!",cStop, "Fehler (in: readReNum)")
readReNum = ""
endif
End Function
Sub writeReNum
dim FileHandle as Integer
dim nNummer as Integer
dim Nummer$
Nummer$ = readReNum()
if Nummer$ = "" then exit sub
nNummer = val(Nummer$)
nNummer = nNummer + 1
if nNummer > 999 then
msgbox("Nummerüberlauf!",cStop ,"Fehler (in: writeReNum)")
exit sub
endif
Nummer$ = format( nNummer, "000" )
FileHandle = FreeFile()
Open cReNumFile for Output Access Write Lock Read Write as #FileHandle
Print #FileHandle, Nummer$
Close #FileHandle
End Sub
Im OO habe ich jetzt das Makro auch wieder eingebaut und benutze meine konvertierten Vorlagen.
Im Makro habe ich die Pfade zu der ReNummer.num und ReNummer.log Datei angepasst.
Wenn ich jetzt eine Nummer einfügen möchte, kommt als erste Fehlermeldung : Fehler (in readReNum) Datei nicht gefunden
Das bestätige ich mit Okay. Dann kommt das gewohnte Fenster mit einer Nummer. Allerdings wird nur die 13 für das aktuelle Jahr angezeigt. Wenn ich die einfügen will, geht das Script-Fenster mit dem Code auf, wobei dieser Bereich des Codes Selection.Text.Insert( ReNum$ ) hervorgehoben wird. Die Meldung dazu lautet: Basic-Laufzeitfehler. Variable nicht definiert.
An der Stelle weiß ich nicht weiter. Ich hab schon mit den Pfadangaben experimentiert, aber daran scheint es nicht zu liegen. Ich habe auf meinem Rechner OO 4.0.1 installiert und es auch mit einer 3.2 Portable Version versucht.
Kann man das Script umstricken, damit es auch in OO funktioniert?
Ich weiß, daß es andere Scripte gibt, die das auch können, aber ich würde das in dieser Form gerne beibehalten.
So long,
Thomas