Newsgroup: it.comp.lang.visual-basic
Titolo: Problemi con la sintassi di data

Ho scritto una funzione StWorkDays(byVal alladata as Date) as Integer
che mi restituisce i giorni lavorativi fino ad una determinata data
(alladata) per una certa attività.
Passo alla funzione la data come #31/1/2003# e tutto funziona.
Il mio problema di sintassi è il seguente:
se Dim iGiorno as integer, iMese as integer, iAnno as integer
come devo scrivere se devo passare i valori di queste variabili alla
funzione sopra detta ?
Grazie
-- 
Gulp ! Forse mi sono perso qualcosa !

 funzione sopra detta ?
Quella funzione, lo vedi?, si aspetta una data (ovvero un tipo Date).
Dim d As Date
d = DateSerial(iAnno, iMese, iGiorno)
e le passi d
oppure direttamente il DateSerial...

 oppure direttamente il DateSerial...
Ok Grazie.
Ma allora ho sbagliato qualcosa nella funzione,saresti cosě cortese da darci
una sbirciata?:
Public Function StWorkDays(Optional ByVal alladata As Date = #12/12/1212#)
As Integer
Dim d As Date
If alladata = #12/12/1212# Then
alladata = Date
End If
alladata = DateSerial(Year(alladata), Month(alladata), Day(alladata))
MyWorkDays = 0
For d = DateSerial(Year(alladata), 1, 1) To alladata
    If Weekday(d) = 2 Or Weekday(d) = 4 Or Weekday(d) = 6 Then
        If Festivo(d) = False Then
        MyWorkDays = MyWorkDays + 1
        End If
    End If
Next d
End Function


ŠGulp wrote:
Leggi StWorkDay per MyWorkDay :-)))


[*ŠGulp* : 
g...@cyber.com
] ha scritto:

Se ho ben capito cosa vuoi fare:
Public Function StWorkDays(Optional ByVal alladata As Date = #12/12/1212#)
As Integer
    Dim data_corrente As Date
    If alladata = #12/12/1212# Then alladata = Date
    alladata = DateSerial(Year(alladata), Month(alladata), Day(alladata))
    StWorkDays = 0
    data_corrente = DateSerial(Year(alladata), 1, 0)
    Do
        data_corrente = DateAdd("d", 1, data_corrente)
        If data_corrente > alladata Then Exit Do
        If Weekday(data_corrente) = 2 Or Weekday(data_corrente) = 4 Or
Weekday(data_corrente) = 6 Then
            If Festivo(data_corrente) = False Then
                StWorkDays = StWorkDays + 1
            End If
        End If
    Loop
End Function

 Se ho ben capito cosa vuoi fare:
Azz ! Lupo ! Sto ancora studiando il tuo listato !
Stupito, ma non troppo -visto il soggetto- per la tua visione completamente
diversa  d'impostazione del problema,
ti ringrazio molto. :-))


 ti ringrazio molto. :-))
Non c'č nulla di strano. Non mi piaceva quel For da una data a un'altra
(intendiamoci, potrebbe anche funzionare, perchč internamente le date sono
numeri), ma ho solo usato un Do/Loop incrementando di un giorno la
data_corrente ad ogni ciclo. Se il tuo For funziona (non l'ho provato)
eppure la funzione ti dava dei problemi, beh, non credo che la mia versione
risolva il problema. Ah, quel "alladata = DateSerial(Year(alladata),
Month(alladata), Day(alladata))" fra le prime righe, non serve a niente.

 Month(alladata), Day(alladata))" fra le prime righe, non serve a niente.
Ora, incuriosito, ho provato la tua funzione. Funziona. E ritengo che sia
più veloce della mia. Qual era il problema? Sarà mica che passavi la data
finale nella forma #GG/MM/AAAA#?
Va passata (se usi quella sintassi) nella forma #MM/GG/AAAA#

 End Function
Traduciamo un paio di righe
Public Function StWorkDays(Optional ByVal alladata As Date = #12/12/1212#)
As Integer
' 12/12/1212??? Sembra una domanda di storia :)
 alladata = alladata
 Azzero_Una_Var_non_dichiarata = 0
' La funzione non restituisce niente
End Function
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 Va passata (se usi quella sintassi) nella forma #MM/GG/AAAA#
Text2.Text = MyWorkDays(#1/31/2003#)
Text3 = MyWorkDays(#3/31/2003#)
Text4 = MyWorkDays(#4/30/2003#)
Text5 = MyWorkDays(#5/31/2003#)
a me da:
12      (che è giusto!)
37
48
61
Boh !


 ' La funzione non restituisce niente
Vorrei che non passando il valore alladata (Optional) la funzione
restituisse "qualcosa" !
Cioč i giorni fino alla data di "oggi".
Cosa ho sbagliato?


 Lupo wrote:

A parte quella funzione Festivo, cos'è che non va? Togli pure il test "If
Festivo..." e il corrispondente End If. Cos'è che non va?

 Ciao
Zanna, non ho capito una parola.
Se ti riferisci a quel My al posto di St, Gulp l'aveva corretto.

 "If Festivo..." e il corrispondente End If. Cos'è che non va?
Eh. funziona pure Festivo ! Che non va è la mia pretesa di impostare come
data di entrata del ciclo For
l'inizio dell' anno e pretendere che poi per cicli successivi mi venga
restitutito un valore valido per ciascun mese dal primo di ogni mese !! Oibo
! Anzi Oibò !! Mica VB si può accorgere "a gratis" delle mie intenzioni !!
Così, perdendoci la notte, ho finito per dar l'impressione del
"perdigiorno"!! :-))
Ciao e grazie ancora


 Ciao e grazie ancora
Prego, ma ancora non ho capito per cosa...
Gulp, da dove si dedurrebbe quello che scrivi?
A parte VB, chi altri poteva saperlo?
Non mi pare che tu l'abbia mai detto.
Hai provato a fare un test all'interno del For per Day(d)=1 e restituire
(magari in un argomento se non nella funzione stessa) un vettore che in ogni
elemento riporti i giorni lavorativi di ogni mese?
PS: Chi sarebbe che lavora solo i giorni pari nella settimana?

 PS: Chi sarebbe che lavora solo i giorni pari nella settimana?
Il programma lo sto facendo e -siccome mi diverto-  continuamente
modificando, per me.
Comunque non è tutto oro quel che lucica: dalle 08.00 alle 20.00 * 3 = 36
e, specie nell' invernata, +6 di qua, +3 di la....
Ma non è nemmeno giusto lamentarsi.
E chi lo fa?


 Cioč i giorni fino alla data di "oggi".
E allora a cosa serve il valore di default che imposti?


 E allora a cosa serve il valore di default che imposti?
Per dire: Se non ti passo una data (visto che quella di default č un po' ...
indietro) usa quella di sistema.


 End If
Continuo a non capire questo:
alladata = DateSerial(Year(alladata), Month(alladata), Day(alladata))


 alladata = DateSerial(Year(alladata), Month(alladata), Day(alladata))
A niente.
Non fa male, ma č assolutamente ridondante, assegna a "alladata" ... se
stessa ;-)
Infatti scrivevo:
" Ah, quel "alladata = DateSerial(Year(alladata), Month(alladata),
