Hallo Leute ,
ich möchte gern per Makro Dialog ein Urlaubsformular anfertigen.
In dem Dialog sind jetzt 2 Felder mit Kalendertagauswahl . Ich möchte nun in dem Makro feststellen wieviele Werktage zwischen den Daten liegen (ggf. auch Feiertage berücksichtigen ?).
Gibt es eine einfache Methode festzustellen wieviele Werktage (Mo-Fr.) zwischen 2 Dati liegen ?
Ich denke das einbezienen der Feiertage kann man dann ggf. ja noch per If oder Array machen.
Danke für eure Tips
Z.
[gelöst] Wieviele Werktage innerhalb eines Datumbereichs
Moderator: Moderatoren
-
- ***
- Beiträge: 62
- Registriert: Do, 01.05.2008 11:33
[gelöst] Wieviele Werktage innerhalb eines Datumbereichs
Zuletzt geändert von der_Zerstreute am Fr, 21.02.2014 09:21, insgesamt 1-mal geändert.
Re: Wieviele Werktage innerhalb eines Datumbereichs
Hallo
Versuchs mal mit der Einbindung der Calc-funktion: 'NETTOARBEITSTAGE' bzw. innerhalb von Basic mit der englischen Bezeichnung:' NETWORKDAYS'
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig228
http://www.dannenhoefer.de/faqstarbasic ... funktionen
Gruß Karo
Versuchs mal mit der Einbindung der Calc-funktion: 'NETTOARBEITSTAGE' bzw. innerhalb von Basic mit der englischen Bezeichnung:' NETWORKDAYS'
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig228
http://www.dannenhoefer.de/faqstarbasic ... funktionen
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
-
- ***
- Beiträge: 62
- Registriert: Do, 01.05.2008 11:33
Re: Wieviele Werktage innerhalb eines Datumbereichs
hallo Karo ,
das hilft schon mal deutlich weiter jedoch hab ich jetzt ein anderes Problem.
Ich bekomme an der Stelle wo die Werktage ermittelt werden sollen eine Fehlermeldung.
Fehlermeldung : "Objectvariable nicht belegt" in der letzten Zeile ..
sieht einer meinen Gedankenfehler ?
danke schonmal im voraus
das hilft schon mal deutlich weiter jedoch hab ich jetzt ein anderes Problem.
Ich bekomme an der Stelle wo die Werktage ermittelt werden sollen eine Fehlermeldung.
Code: Alles auswählen
Global anfang as date
global ende as date
global bEU,bSU,bFK as boolean
global sGSU as string
global MyDialog as object
Sub Main
'--------------------------------------------
' Variablen zuordnen
'--------------------------------------------
Dim Profil(0) as new com.sun.star.beans.PropertyValue
dim oFunctionAccess as object
dim document as object
dim args(1) as variant
dim temp as string
dim tn as string 'Techniker Name
dim abt as string 'Abteilung
dim PerNo as integer 'Personalnummer
dim wt as integer 'Werktage
document = ThisComponent
globalScope.BasicLibraries.LoadLibrary("Tools") ' einbinden der OOBasic Funktionen
DialogLibraries.LoadLibrary( "Standard" )
MyDialog = CreateUnoDialog(DialogLibraries.Standard.Eingabe)
oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
'--------------------------------------------
' Variablen beschreiben
'--------------------------------------------
Benutzer = createUnoService("com.sun.star.configuration.ConfigurationProvider")
Profil(0).Name = "nodepath"
Profil(0).Value = "org.openoffice.UserProfile/Data"
Benutzerdaten = Benutzer.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", Profil())
abt = Benutzerdaten.givenname
tn = Benutzerdaten.sn
PerNo = Benutzerdaten.initials
'--------------------------------------------
' Hinweistext erstellen
'--------------------------------------------
temp = "Bitte hier die notwendigen Daten eintragen und auswählen ." & chr(13) & chr(13)
temp = temp & ">> Das Formular wird automatisch ausgefüllt. <<" & chr(13)
temp = temp & chr(13)
MyDialog.getControl("iTitel").model.Label = temp
temp = ""
temp = temp & "Bitte wähle den Beginn und das Ende deines Urlaubs aus." & chr(13) &chr(13)
MyDialog.getControl("Mitte").model.Label = temp
MyDialog.getControl("Label5").visible = false
MyDialog.getControl("eSUG").visible = false
myDialog.execute
args(0) = anfang
args(1) = ende
print oFunctionAccess.callFunction( "NETWORKDAYS", args() )
sieht einer meinen Gedankenfehler ?
danke schonmal im voraus
Re: Wieviele Werktage innerhalb eines Datumbereichs
Hallo
Du weist du den Variablen 'Anfang' und 'Ende' nirgends einen Wert zu.
( die Werte dafür stecken ungeschickterweise beide in 'MyDialog.getControl("Mitte").model.Label' - wenn überhaupt)
@all
da sollte mal jemand draufschauen der mehr Ahnung davon hat wie man Eingabefelder ausliest.
Gruß Karo
Du weist du den Variablen 'Anfang' und 'Ende' nirgends einen Wert zu.
( die Werte dafür stecken ungeschickterweise beide in 'MyDialog.getControl("Mitte").model.Label' - wenn überhaupt)
@all
da sollte mal jemand draufschauen der mehr Ahnung davon hat wie man Eingabefelder ausliest.
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
-
- ***
- Beiträge: 62
- Registriert: Do, 01.05.2008 11:33
Re: Wieviele Werktage innerhalb eines Datumbereichs
sorry , was hier fehlt ist der teil mit der abfrage aus dem form
.. sorry mein fehler ..
Die Variablen anfang und ende werden aus dem Form abgefragt als Datum. Dieser Teil funktioniert auch soweit .. also ich poste der einfachheit halber mal das ganze Makro
..
das einzige was halt nicht funktioniert ist die Variable "wt" .. hier komm ich nicht weiter da ich nicht nachvollziehen kann warum ich die Fehlermeldung "Objektvariable nicht belegt" bekomme ..

Die Variablen anfang und ende werden aus dem Form abgefragt als Datum. Dieser Teil funktioniert auch soweit .. also ich poste der einfachheit halber mal das ganze Makro

Code: Alles auswählen
Global anfang as date
global ende as date
global bEU,bSU,bFK as boolean
global sGSU as string
global MyDialog as object
Sub Main
'--------------------------------------------
' Variablen zuordnen
'--------------------------------------------
Dim Profil(0) as new com.sun.star.beans.PropertyValue
dim oFunctionAccess as object
dim document as object
dim args(1) as date
dim temp as string
dim tn as string 'Techniker Name
dim abt as string 'Abteilung
dim PerNo as integer 'Personalnummer
dim wt as integer 'Werktage
dim fil as object
document = ThisComponent
globalScope.BasicLibraries.LoadLibrary("Tools") ' einbinden der OOBasic Funktionen
DialogLibraries.LoadLibrary( "Standard" )
MyDialog = CreateUnoDialog(DialogLibraries.Standard.Eingabe)
'--------------------------------------------
' Variablen beschreiben
'--------------------------------------------
oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
Benutzer = createUnoService("com.sun.star.configuration.ConfigurationProvider")
Profil(0).Name = "nodepath"
Profil(0).Value = "org.openoffice.UserProfile/Data"
Benutzerdaten = Benutzer.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", Profil())
'--------------------------------------------
' Hinweistext erstellen
'--------------------------------------------
temp = "Bitte hier die notwendigen Daten eintragen und auswählen ." & chr(13) & chr(13)
temp = temp & ">> Das Formular wird automatisch ausgefüllt. <<" & chr(13)
temp = temp & chr(13)
MyDialog.getControl("iTitel").model.Label = temp
temp = ""
temp = temp & "Bitte wähle den Beginn und das Ende deines Urlaubs aus." & chr(13) &chr(13)
MyDialog.getControl("Mitte").model.Label = temp
MyDialog.getControl("Label5").visible = false
MyDialog.getControl("eSUG").visible = false
myDialog.execute
if anfang ="" then goto fin
args(0) = anfang
args(1) = ende
abt = Benutzerdaten.givenname
tn = Benutzerdaten.sn
PerNo = Benutzerdaten.initials
'wt = oFunctionAccess.callFunction( "NETWORKDAYS", args())
fin:
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("pn1").text = PerNo
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("pn2").text = PerNo
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("name1").text = tn
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("name2").text = tn
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("abt1").text = abt
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("abt2").text = abt
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("grund").text = sGSU
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("grund2").text = sGSU
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("eh1").state = bEU
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("eh2").state = bEU
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("fk1").state = bFzK
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("fk2").state = bFK
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("su1").state = bSU
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("su2").state = bSU
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("start1").text = anfang
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("start2").text = anfang
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("ende1").text = ende
ThisComponent.drawpage.forms.getbyIndex(0).getbyname("ende2").text = ende
end sub
'==================================================================================
'----------------------------------------------------------------------------------
'==================================================================================
sub fertig
if MyDialog.getControl("sEU").state =0 and _
MyDialog.getControl("sFzK").state=0 and _
MyDialog.getControl("sSU").state=0 then
MyDialog.getControl("iHW").model.label = "Bitte noch die Art des Urlaubs auswählen !"
goto break
end if
DialogLibraries.LoadLibrary( "Standard" )
MyDialog.getControl("iHW").model.label = ""
anfang = MyDialog.getControl("DF1").text
ende = MyDialog.getControl("DF2").text
bEU = MyDialog.getControl("sEU").state
bSU = MyDialog.getControl("sSU").state
bFK = MyDialog.getControl("sFzK").state
sGSU = MyDialog.getControl("eSUG").text
MyDialog.endexecute()
break:
end sub
'==================================================================================
'----------------------------------------------------------------------------------
'==================================================================================
sub erholung
if MyDialog.getControl("sEU").state = 1 then
MyDialog.getControl("Label5").visible = false
MyDialog.getControl("eSUG").visible = false
MyDialog.getControl("sFzK").state = 0
MyDialog.getControl("sSU").state = 0
MyDialog.getControl("iHW").model.label = ""
end if
end sub
'==================================================================================
'----------------------------------------------------------------------------------
'==================================================================================
sub freizeit
if MyDialog.getControl("sFzK").state = 1 then
MyDialog.getControl("Label5").visible = false
MyDialog.getControl("eSUG").visible = false
MyDialog.getControl("sEU").state = 0
MyDialog.getControl("sSU").state = 0
MyDialog.getControl("iHW").model.label = ""
end if
end sub
'==================================================================================
'----------------------------------------------------------------------------------
'==================================================================================
sub sonder
if MyDialog.getControl("sSU").state = 1 then
MyDialog.getControl("Label5").visible = true
MyDialog.getControl("eSUG").visible = true
MyDialog.getControl("sEU").state = 0
MyDialog.getControl("sFzK").state = 0
MyDialog.getControl("iHW").model.label = ""
end if
if MyDialog.getControl("sSU").state = 0 then
MyDialog.getControl("Label5").visible = false
MyDialog.getControl("eSUG").visible = false
end if
end sub
'==================================================================================
'----------------------------------------------------------------------------------
'==================================================================================
-
- ***
- Beiträge: 62
- Registriert: Do, 01.05.2008 11:33
Re: Wieviele Werktage innerhalb eines Datumbereichs
Hey Leute , ich konnte das Problem lösen !
in OOO3.0 werden die Funktionen in Deutsch benannt !! außerdem habe ich die beiden Dati als "Date" übergeben , sie müssen aber als double übergeben werden.
Nach dem anpassen dieser Daten lief die Funktion !
Danke trotzdem
in OOO3.0 werden die Funktionen in Deutsch benannt !! außerdem habe ich die beiden Dati als "Date" übergeben , sie müssen aber als double übergeben werden.
Nach dem anpassen dieser Daten lief die Funktion !
Danke trotzdem