ich habe unter OpenOffice einen Fahrtkostenrechner erstellt, welcher unter Libre ständig Fehler bei der Ausführung der Scripte bringt. Einige habe ich schon bereinigen können. Im Moment komme ich jedoch nicht weiter.
Das Script tauscht Daten mit einer Maske zur Erfassung der Fahrten aus. Hauptsächlich bei Datum/Zeitwerten wird der Fehler "Falscher Wert für Eigenschaft" angezeigt.
Bsp: Beim Script AddSatzFahrt erscheint dieser Fehler, obwohl in der Maske ein Datum im Formant TT/MM/JJJJ eingegeben ist und in der Maskendefinition dem Feld ebenfalls dieser Wert zugeordnet ist.
Ich steh glaub grad auf dem Schlauch.
Code: Alles auswählen
REM ***** BASIC *****
REM ****************************************************************************
Rem *** Fahrtkostenabrechnung ***
Rem *** Version 1.1 ***
Rem *** Programmiert durch Holger Merkle ***
Rem *** Fertigstellung: 03.01.2013 ***
Rem ****************************************************************************
Dim eM1 as Object 'Eingabemaske
Dim myDoc as Object 'das aktuelle Dokument
Dim oT1 as Object, oT2 as Object, oT3 as Object, oT4 as Object 'die Datenblätter 2, 3, 4 und 5
Dim nNeuerDatensatzKilometer as integer 'fortlaufende Nummer eingetragene km
Dim nNeuerDatensatzBeleg as integer 'fortlaufende Nummer eingetragene Belege
Dim dZeitCh as date 'Zeitspanne bei Änderung
Dim dZeitAnk as date 'Differenz bei automatischer Ankunftszeit
'---------
'---------
Sub Main
REM grundsätzliche Zuweisungen
myDoc = thisComponent
oT1 = myDoc.sheets(1)
oT2 = myDoc.sheets(2)
oT3 = myDoc.sheets(3)
oT4 = myDoc.sheets(4)
REM Eingabeaske initialisieren
DialogLibraries.LoadLibrary("Standard")
eM1 = CreateUnoDialog( DialogLibraries.Standard.Maske )
initMaske
eM1.Execute()
End Sub
Sub initMaske
REM Maske initialisieren (aus Sub Main gestartet)
REM Hier alle Felder für die Fahrtabrechnung
REM Neue Zeilennummer
nNeuerDatensatzKilometer = oT4.getCellRangeByName("b1").value+3
REM Zeitspanne eintragen
dZeitCH = oT4.getCellRangeByName("b9").value
REM Zietdifferenz eintragen
dZeitAnk = oT4.getCellRangeByName("b10").value
REM Datensaztnummer Fahrt eintragen
eM1.getcontrol("lfdNr").text = nNeuerDatensatzKilometer -2
REM Letzte Fahrt (lF) eintragen
eM1.getcontrol("lfdNrHis").value = oT2.getCellRangeByName("A"&nNeuerDatensatzKilometer-1).value
REM lF Datum
eM1.getcontrol("DatumHis").text = oT2.getCellRangeByName("C"&nNeuerDatensatzKilometer-1).string
REM lF Grund
eM1.getcontrol("GrundHis").text = oT2.getCellRangeByName("B"&nNeuerDatensatzKilometer-1).string
REM lf Gefahrene km
eM1.getcontrol("kmHis").value = oT2.getCellRangeByName("I"&nNeuerDatensatzKilometer-1).value
REM Dropdownlisten füllen
FuellListe("Grund","e",2,20)
FuellListe("Abfahrt","g",2,20)
FuellListe("Ziel","i",2,20)
REM Felder leeren
heute
eM1.getControl("Grund").text=""
eM1.getControl("Abfahrt").text=""
eM1.getControl("Ziel").text=""
eM1.getControl("km").text=""
eM1.getControl("Beginn").text=""
eM1.getControl("Ende").text=""
REM Hier alle Felder für die Belegabrechnung
REM Neue Zeilennummer
nNeuerDatensatzBeleg = oT4.getCellRangeByName("b2").value+3
REM Datensaztnummer Fahrt eintragen
eM1.getcontrol("lfdNrBeleg").text = nNeuerDatensatzBeleg -2
REM den letzten Beleg (lB) eintragen
REM lB laufende Nummer
eM1.getcontrol("lfdNrBelegHis").value = oT3.getCellRangeByName("A"&nNeuerDatensatzBeleg-1).value
REM lF Datum
eM1.getcontrol("Datum3His").text = oT3.getCellRangeByName("B"&nNeuerDatensatzBeleg-1).string
REM lF Grund
eM1.getcontrol("BelegHis").text = oT3.getCellRangeByName("C"&nNeuerDatensatzBeleg-1).string
REM lf Gefahrene km
eM1.getcontrol("BetragHis").value = oT3.getCellRangeByName("D"&nNeuerDatensatzBeleg-1).value
REM Dropdownlisten füllen
FuellListe("Belege","l",2,20)
FuellListe("MwSt","p",2,3)
REM Felder leeren
eM1.getControl("Belege").text=""
eM1.getControl("Betrag").text=""
eM1.getControl("MwSt").text=""
End Sub
REM Datumsfelder mit aktuellem Datum befüllen
Sub Heute
Dim dh as Date
dh = date
eM1.getControl("Datum1").date=CDateToUnoDate(dh)
eM1.getControl("Datum2").date=CDateToUnoDate(dh)
eM1.getControl("Datum3").date=CDateToUnoDate(dh)
REM Fokus in erstes Datumsfeld setzten
eM1.getcontrol("Datum1").setFocus
end Sub
REM Füllen der Dropdownfelder in der Eingabemaske mit den Werten aus der Tabelle Daten
Sub FuellListe(Liste, spalte, zeile, eNr)
FFeld=eM1.getControl(Liste)
FFeld.removeitems(0, eNr)
for i=0 to eNr
adr="$"+spalte+"$"+(i+zeile)
inhalt=oT4.getCellRangeByName(adr).string
FFeld.additem(inhalt,i)
next
FFeld.additem("",0)
End Sub
REM Button Zeit + Abfahrt
Sub ZeitPlusAbf
Dim dStd as long
dStd = eM1.getcontrol("Beginn").time
if dStd = 0 then
dStd = 08000000
end if
dStd = ZeitAnd(dStd, 1)
eM1.getcontrol("Beginn").time = dStd
eM1.getcontrol("Beginn").setFocus()
end Sub
REM Button Zeit - Abfahrt
Sub ZeitMinusAbf
Dim dStd as long
dStd = eM1.getcontrol("Beginn").time
if dStd = 0 then
dStd = 08000000
end if
dStd = ZeitAnd(dStd, -1)
eM1.getcontrol("Beginn").time = dStd
eM1.getcontrol("Beginn").setFocus()
end Sub
REM Button Zeit + Ankunft
Sub ZeitPlusAnk
Dim dStd as long
dStd = eM1.getcontrol("Ende").time
if dStd = 0 then
dStd = 18000000
end if
dStd = ZeitAnd(dStd, 1)
eM1.getcontrol("Ende").time = dStd
eM1.getcontrol("Ende").setFocus()
end Sub
REM Button Zeit - Abfahrt
Sub ZeitMinusAnk
Dim dStd as long
dStd = eM1.getcontrol("Ende").time
if dStd = 0 then
dStd = 18000000
end if
dStd = ZeitAnd(dStd, -1)
eM1.getcontrol("Ende").time = dStd
eM1.getcontrol("Ende").setFocus()
end Sub
REM DatenbankbereichKilometer neu festlegen (Tabelle Fahrten ab A3 ... muss nach jedem Eintrag einer Autofahrt vergrößert werden)
Sub DatenBereichKilometer
Dim aPos1 as new com.sun.star.table.CellAddress
oBereich = ThisComponent.NamedRanges
oBereich.removebyname("Datenbank")
obereich.addNewbyName("Datenbank","$Fahrten.$A$2:$J$"&nNeuerDatensatzKilometer,aPos1,0)
end Sub
REM DatenbankbereichBeleg neu festlegen (Tabelle Belege ab A2 ... muss nach jedem Eintrag eines Beleges vergrößert werden)
Sub DatenBereichBeleg
Dim aPos2 as new com.sun.star.table.CellAddress
oBereich = ThisComponent.NamedRanges
oBereich.removebyname("Belege")
obereich.addNewbyName("Belege","$Belege.$A$2:$N$"&nNeuerDatensatzBeleg,aPos2,0)
end Sub
REM Datenadresse des neuen Datensatzes Fahrt bestimmen
function dat_adrF(sp)
zeile1 = nNeuerDatensatzKilometer
dat_adrF="$"+sp+"$"&zeile1
end function
REM Datenadresse des neuen Datensatzes Beleg bestimmen
function dat_adrB(sp)
zeile2 = nNeuerDatensatzBeleg
dat_adrB="$"+sp+"$"&zeile2
end function
REM Zeit korrekt verarbeiten
function ZWertF(Zeit as string)
Dim ZeitF as long
ZeitF= left(Zeit, 2)& Mid(Zeit, 4, 2) & Mid(Zeit, 7,2) & "00"
zWertF=ZeitF
end Function
REM Zeit korrekt verarbeiten
function ZWert(ZDat)
if ZDat = 0 then
zDat = 100
end if
sZDat=Format(ZDat,"00000000")
ZWert=left(sZDat,2)&":"&Mid(sZDat,3,2)&":"&Mid(sZDat,5,2)
end function
function ZeitAnd(zeit, vorz)
Dim sT1 as date
sT1 = Timevalue(ZWert(zeit))
sT1 = sT1+(vorz * dZeitCH)
ZeitAnd=zWertF(sT1)
end function
REM Button Fahrt Hinzufügen mit Funktion versehen
REM erts Fehlerkontrolle
sub AddSatzFahrt
if eM1.getControl("Datum1").date=0 then
msgbox "Das Abfahrtsdatum muss eingegeben werden!"
eM1.getControl("Datum1").setFocus()
elseif eM1.getControl("Beginn").time=0 then
msgbox "Die Abfahrtszeit muss eingegeben werden!"
eM1.getControl("Beginn").setFocus()
elseif eM1.getControl("Datum2").date=0 then
msgbox "Das Ankunftsdatumatum muss eingegeben werden!"
eM1.getControl("Datum2").setFocus()
elseif eM1.getControl("Ende").time=0 then
msgbox "Die Ankunftszeit muss eingegeben werden!"
eM1.getControl("Ende").setFocus()
elseif eM1.getControl("Grund").text="" then
msgbox "Der Fahrtgrund muss eingetragen werden!"
eM1.getControl("Grund").setFocus()
elseif eM1.getControl("Abfahrt").text="" then
msgbox "Der Abfahrtsort muss eingegeben werden!"
eM1.getControl("Abfahrt").setFocus()
elseif eM1.getControl("Ziel").text="" then
msgbox "Der Zielort muss eingegeben werden!"
eM1.getControl("Ziel").setFocus
elseif eM1.getControl("km").value=0 then
msgbox "Die gefahrenen Kilometer müssen eingetragen werden!"
eM1.getControl("km").setFocus()
else
SatzSpeichernFahrt
end if
end Sub
REM Die eingegebenen Daten werden in die Tabelle eingetragen
Sub SatzSpeichernFahrt
REM geschützten Tabellenbereich zur Änderung freigeben
oT4.unprotect("qrx-10")
REM Datum eintragen
fd1 = eM1.getcontrol("Datum1").date
ad=dat_adrF("c")
oT2.getCellRangeByName(ad).value=CDateFromIso(fd1)
fd2 = eM1.getcontrol("Datum2").date
ad=dat_adrF("f")
oT2.getCellRangeByName(ad).value=CDateFromIso(fd2)
REM Fortlaufende Nummer eintragen
ad=dat_adrF("a")
oT2.getCellRangeByName(ad).value=nNeuerDatensatzKilometer-2
REM Beleg eintragen
gr = eM1.getcontrol("Grund").text
ad=dat_adrF("b")
oT2.getCellRangeByName(ad).string=gr
REM Betrag eintragen
abf = eM1.getcontrol("Abfahrt").text
ad=dat_adrF("d")
oT2.getCellRangeByName(ad).string=abf
REM Fahrtziel eintragen
ziel = eM1.getcontrol("Ziel").text
ad=dat_adrF("g")
oT2.getCellRangeByName(ad).string=ziel
REM Abfahrtszeit eintragen
zAbf1 = ZWert(eM1.getControl("Beginn").time)
ad=dat_adrF("e")
oT2.getCellRangeByName(ad).value=TimeValue(zAbf1)
REM Ankunftszeit eintragen
zAnk = ZWert(eM1.getControl("Ende").time)
ad=dat_adrF("h")
oT2.getCellRangeByName(ad).value=TimeValue(zAnk)
REM Gefahrene KM eintragen
kms = eM1.getcontrol("km").value
ad=dat_adrF("i")
oT2.getCellRangeByName(ad).value=kms
REM Dienstfahrt wg. Funktion DBSumme eintragen
adf = "Fahrt"
ad=dat_adrF("j")
oT2.getCellRangeByName(ad).string=adf
REM Zähler für fortlaufende Nummer erhöhen
nDatNr = oT4.getCellRangeByName("b1").value+1
oT4.getCellRangeByNAme("b1").value=nDatNr
DatenBereichKilometer
REM Tabellenbereich nach Änderung schützen
oT4.protect("qrx-10")
REM Formular speicher
myDoc.store()
REM Maske neu initialisieren
initMaske
End Sub
REM Button Beleg Hinzufügen mit Funktion versehen
REM erts Fehlerkontrolle
sub AddSatzBeleg
if eM1.getControl("Belege").text=0 then
msgbox "Die Belegart muss eingegeben werden!"
eM1.getControl("Belege").setFocus()
elseif eM1.getControl("Datum2").date="" then
msgbox "Das Datum muss eingetragen werden!"
eM1.getControl("Datum3").setFocus()
elseif eM1.getControl("Betrag").text="" then
msgbox "Der Betrag muss eingegeben werden!"
eM1.getControl("Betrag").setFocus()
elseif eM1.getControl("MwSt").text="" then
msgbox "Der Mehrwertsteuersatz muss eingegeben werden!"
eM1.getControl("MwSt").setFocus()
else
SatzSpeichernBeleg
end if
end Sub
REM Die eingegebenen Daten werden in die Tabelle eingetragen
Sub SatzSpeichernBeleg
REM geschützten Tabellenbereich zur Änderung freigeben
oT4.unprotect("q")
REM Datum eintragen
fd3 = eM1.getcontrol("Datum3").date
ad=dat_adrB("b")
oT3.getCellRangeByName(ad).value=CDateFromIso(fd3)
REM Fortlaufende Nummer eintragen
ad=dat_adrB("a")
oT3.getCellRangeByName(ad).value=nNeuerDatensatzBeleg-2
REM Fahrtgrund eintragen
gr = eM1.getcontrol("Belege").text
ad=dat_adrB("c")
oT3.getCellRangeByName(ad).string=gr
REM Abfahrtort eintragen
bet = eM1.getcontrol("Betrag").value
ad=dat_adrB("d")
oT3.getCellRangeByName(ad).value=bet
REM Mehrwertsteuer eintragen
mwst = eM1.getcontrol("MwSt").text
ad=dat_adrB("e")
oT3.getCellRangeByName(ad).string=mwst
REM Beleg wg. Funktion DBSumme eintragen
bl = "Beleg"
ad=dat_adrB("f")
oT3.getCellRangeByName(ad).string=bl
REM Zähler für fortlaufende Nummer erhöhen
nDatNrBeleg = oT4.getCellRangeByName("b2").value+1
oT4.getCellRangeByNAme("b2").value=nDatNrBeleg
DatenBereichBeleg
REM Tabellenbereich nach Änderung schützen
oT4.protect("q")
REM Formular speicher
myDoc.store()
REM Maske neu initialisieren
initMaske
End Sub
REM Prozedur abbrechen
Sub Abbrechen
eM1.EndExecute()
End Sub
REM Rest ist noch ohne Funktion
Sub Daten_entfernen
myDoc = thisComponent
mySheet = myDoc.sheets(1)
mycell = mysheet.getCellRangeByName("B28:EndUp")
flag=com.sun.star.sheet.CellFlags.VALUE+com.sun.star.sheet.CellFlags.STRING+com.sun.star.sheet.CellFlags.DATETIME
mycell.clearcontents(flag)
'oBereich.getControl("Datenbank","$Tabelle.B28:H28")
'ThisComponent.sheets(0).getCellRangeByName(oBereich).clearContents(com.sun.star.sheet.CellFlags.value + com.sun.star.sheet.CellFlags.Datetime + com.sun.star.sheet.CellFlags.String)
'flag = com.sun.star.sheet.CellFlags.VALUE+com.sun.star.sheet.CellFlags.STRING+com.sun.star.sheet.CellFlags.DATETIME
'oBereich.clearcontents(flag)
end sub
Holger