Discussione:
Funzione "Settimana"
(troppo vecchio per rispondere)
SergioBS
2005-03-11 18:59:15 UTC
Permalink
Salve a tutti!
Sono un niubbio appena passato da Excel a Access per alcune cosette..

Ho necessità di convertire una data nel corrisponedente numero della
settimana e il contrario, ovvero da n. settimana a intervallo
corrispondente:
mi spiego meglio: Settimana 12 = dal 07 a 13.03.2005 (basta un dato l'altro
so come calcolarlo :-))
e viceversa ovvero 05.03.2005 = 11
In access ho trovato solo la funzione Mese.. non l'ho vista o c'è un
Barbatrucco?

Dimenticavo, Access 2002 SP3

Grazie

Sergio
sandro
2005-03-11 20:45:09 UTC
Permalink
Post by SergioBS
Salve a tutti!
Sono un niubbio appena passato da Excel a Access per alcune cosette..
Ho necessità di convertire una data nel corrisponedente numero della
settimana e il contrario, ovvero da n. settimana a intervallo
mi spiego meglio: Settimana 12 = dal 07 a 13.03.2005 (basta un dato l'altro
so come calcolarlo :-))
e viceversa ovvero 05.03.2005 = 11
In access ho trovato solo la funzione Mese.. non l'ho vista o c'è un
Barbatrucco?
Dimenticavo, Access 2002 SP3
Ciao Sergio : per sapere il numero della settimana partenddo da una data
Nsettimana = Format(tuoControlloDataNellaForm, "ww")

il controllo tuoControlloDataNellaForm deve essere in una maschera in questo
caso.

per risalire alla data di inzio e fine settimana devi leggere e mettere in
pratica la faq che trovi nel sito comune www.sitocomune.com della sezione
general 6.109 Determinare il primo e l'ultimo giorno di ciascuna delle 52
settimane di un anno

E piuttosto facile da capire secondo me.

Ciao.
Cinzia
2005-03-11 21:50:21 UTC
Permalink
Post by SergioBS
Salve a tutti!
Sono un niubbio appena passato da Excel a Access per alcune cosette..
Ho necessità di convertire una data nel corrisponedente numero della
settimana e il contrario, ovvero da n. settimana a intervallo
mi spiego meglio: Settimana 12 = dal 07 a 13.03.2005 (basta un dato l'altro
so come calcolarlo :-))
e viceversa ovvero 05.03.2005 = 11
In access ho trovato solo la funzione Mese.. non l'ho vista o c'è un
Barbatrucco?
Dimenticavo, Access 2002 SP3
Grazie
Sergio
Ciao Sergio,
per ricavare dalla data la settimana puoi ricorrere alla funzione
Format("10/3/2005","ww",vbMonday,vbFirstFourDays)
Invece per calcolare il primo giorno della settimana X puoi ricorrere a
questa funzione :
che ho ricavato prendendo spunto dall'algoritmo descritto qui:
http://xoomer.virgilio.it/esongi/domande.htm#settimana

Function PrimoGiornoDellaSettimana(numeroSettimana As Integer, anno As
Integer) As Date
Dim p As Integer
Dim x As Integer
Dim y As Integer

p = anno + (anno - 1) \ 4 - (anno - 1) \ 100 + (anno - 1) \ 400 + 1
x = p Mod 7

Select Case x
Case 0
y = (numeroSettimana - 1) * 7 + 3
Case 1
y = (numeroSettimana - 1) * 7 + 2
Case 2
y = (numeroSettimana - 1) * 7 + 1
Case 3
y = (numeroSettimana - 1) * 7 + 7
Case 4
y = (numeroSettimana - 1) * 7 + 6
Case 5
y = (numeroSettimana - 1) * 7 + 5
Case 6
y = (numeroSettimana - 1) * 7 + 4
End Select

PrimoGiornoDellaSettimana = DateAdd("d", y - 1, CDate("01/01/" & anno))

End Function
Saluti
Cinzia
sandro
2005-03-11 22:21:02 UTC
Permalink
Post by SergioBS
Post by SergioBS
Salve a tutti!
Sono un niubbio appena passato da Excel a Access per alcune cosette..
Ho necessità di convertire una data nel corrisponedente numero della
settimana e il contrario, ovvero da n. settimana a intervallo
mi spiego meglio: Settimana 12 = dal 07 a 13.03.2005 (basta un dato
l'altro
Post by SergioBS
so come calcolarlo :-))
e viceversa ovvero 05.03.2005 = 11
In access ho trovato solo la funzione Mese.. non l'ho vista o c'è un
Barbatrucco?
Dimenticavo, Access 2002 SP3
Grazie
Sergio
Ciao Sergio,
per ricavare dalla data la settimana puoi ricorrere alla funzione
Format("10/3/2005","ww",vbMonday,vbFirstFourDays)
Invece per calcolare il primo giorno della settimana X puoi ricorrere a
http://xoomer.virgilio.it/esongi/domande.htm#settimana
Function PrimoGiornoDellaSettimana(numeroSettimana As Integer, anno As
Integer) As Date
Dim p As Integer
Dim x As Integer
Dim y As Integer
p = anno + (anno - 1) \ 4 - (anno - 1) \ 100 + (anno - 1) \ 400 + 1
x = p Mod 7
Select Case x
Case 0
y = (numeroSettimana - 1) * 7 + 3
Case 1
y = (numeroSettimana - 1) * 7 + 2
Case 2
y = (numeroSettimana - 1) * 7 + 1
Case 3
y = (numeroSettimana - 1) * 7 + 7
Case 4
y = (numeroSettimana - 1) * 7 + 6
Case 5
y = (numeroSettimana - 1) * 7 + 5
Case 6
y = (numeroSettimana - 1) * 7 + 4
End Select
PrimoGiornoDellaSettimana = DateAdd("d", y - 1, CDate("01/01/" & anno))
End Function
Saluti
Cinzia
Ciao Cinzia, ottimo !
gurda come mi piace complicarmi sempre la vita :

PrimoGiornoDellaSettimana = DateAdd("d", y - 1, DateAdd("d", -DatePart("y",
Date), Date) + 1)

Che ne pensi ?
Ciao
Cinzia
2005-03-12 14:37:33 UTC
Permalink
Post by sandro
Post by SergioBS
Post by SergioBS
Salve a tutti!
Sono un niubbio appena passato da Excel a Access per alcune cosette..
Ho necessità di convertire una data nel corrisponedente numero della
settimana e il contrario, ovvero da n. settimana a intervallo
mi spiego meglio: Settimana 12 = dal 07 a 13.03.2005 (basta un dato
l'altro
Post by SergioBS
so come calcolarlo :-))
e viceversa ovvero 05.03.2005 = 11
In access ho trovato solo la funzione Mese.. non l'ho vista o c'è un
Barbatrucco?
Dimenticavo, Access 2002 SP3
Grazie
Sergio
Ciao Sergio,
per ricavare dalla data la settimana puoi ricorrere alla funzione
Format("10/3/2005","ww",vbMonday,vbFirstFourDays)
Invece per calcolare il primo giorno della settimana X puoi ricorrere a
http://xoomer.virgilio.it/esongi/domande.htm#settimana
Function PrimoGiornoDellaSettimana(numeroSettimana As Integer, anno As
Integer) As Date
Dim p As Integer
Dim x As Integer
Dim y As Integer
p = anno + (anno - 1) \ 4 - (anno - 1) \ 100 + (anno - 1) \ 400 + 1
x = p Mod 7
Select Case x
Case 0
y = (numeroSettimana - 1) * 7 + 3
Case 1
y = (numeroSettimana - 1) * 7 + 2
Case 2
y = (numeroSettimana - 1) * 7 + 1
Case 3
y = (numeroSettimana - 1) * 7 + 7
Case 4
y = (numeroSettimana - 1) * 7 + 6
Case 5
y = (numeroSettimana - 1) * 7 + 5
Case 6
y = (numeroSettimana - 1) * 7 + 4
End Select
PrimoGiornoDellaSettimana = DateAdd("d", y - 1, CDate("01/01/" & anno))
End Function
Saluti
Cinzia
Ciao Cinzia, ottimo !
PrimoGiornoDellaSettimana = DateAdd("d", y - 1,
DateAdd("d", -DatePart("y", Date), Date) + 1)
Post by sandro
Che ne pensi ?
Ciao
Ciao Sandro,
può andare, l'unico difetto è che vale solo per le settimane dell'anno
corrente, invece nel modo che ho usato io funziona per qualsiasi anno.

PS. Sto guardando il tuo db, è un bel mistero! Credo sia un problema legato
alla variabile i, usata male ma non ho ancora capito come risolvere ....
indago ancora un po'

Cinzia
Sandro
2005-03-13 18:25:57 UTC
Permalink
[cut]

Ciao Cinzia,
Post by Cinzia
Ciao Sandro,
può andare, l'unico difetto è che vale solo per le settimane dell'anno
corrente, invece nel modo che ho usato io funziona per qualsiasi anno.
pensavo a una implementazione proprio nell'ottica di fare prendere alla
function la data del sistema invece in un modo più elegante( anche contorto
al solito)
Vabbè ciccia.
Post by Cinzia
PS. Sto guardando il tuo db, è un bel mistero! Credo sia un problema legato
alla variabile i, usata male ma non ho ancora capito come risolvere ....
indago ancora un po'
Non me ne parlare, è tutto ieri e oggi che provo a capire che diavolo
succede.
L'unica cosa che ho capito è che mettendo una msgbox("pippo") nella
ControlliAssociatiVisibili viene eseguita questa msgbox e di conseguenza la
sub solo sull'ultima pagina nel caso di anteprima, e sempre (!!!!) anche
nelle altre pagine quando stampo il report dall'anteprima.
Spiegabile se vuoi richiedendo la stampa della variabile i che è >1 in
questi casi.
Se selezioni il report tasto dx del mouse e selezioni stampa viene stampato
il report correttamente.
Incompresibile.

Ciao

SergioBS
2005-03-12 07:44:41 UTC
Permalink
Post by SergioBS
Post by SergioBS
Salve a tutti!
Sono un niubbio appena passato da Excel a Access per alcune cosette..
Ho necessità di convertire una data nel corrisponedente numero della
settimana e il contrario, ovvero da n. settimana a intervallo
mi spiego meglio: Settimana 12 = dal 07 a 13.03.2005 (basta un dato
l'altro
Post by SergioBS
so come calcolarlo :-))
e viceversa ovvero 05.03.2005 = 11
In access ho trovato solo la funzione Mese.. non l'ho vista o c'è un
Barbatrucco?
Dimenticavo, Access 2002 SP3
Grazie
Sergio
Ciao Sergio,
per ricavare dalla data la settimana puoi ricorrere alla funzione
Format("10/3/2005","ww",vbMonday,vbFirstFourDays)
Grazie Cinzia.. ho trovato anche informazioni nell'help... avevo guardato,
ma digitando week e settimana non era uscito nulla..

Problema: premesso che lo sto inserendo in una query..., ma con la virgola
tra i campi da errore, allora ho provato ad inserire la formula con il
punto e virgola e quello lo prende, ma se inserisco la formula come me l'hai
data tu e come c'è anche nell'help, i campi vbMondaye vbFirstFourDays non li
riconosce e mi chiede di immettere un dato....
allora, visto che erano facoltativi ho tagliato così:
Format("10/03/2005";"ww") e lo trasforma in Format("10/03/2005";"""ww""") e
da come risultato ww, che non è quello che mi aspettavo...
Ho provato a inserire:
Format("10/03/2005";ww) ma me lo vede come campo e mi chiede di inserire il
valore...

ma il numero che volevo non esce..

Dove sbaglio...devo istallare qualche cosa?

grazie

sergio
Karl Donaubauer
2005-03-12 07:59:39 UTC
Permalink
Post by SergioBS
Post by Cinzia
...
Post by SergioBS
Ho necessità di convertire una data nel corrisponedente numero della
settimana e il contrario, ovvero da n. settimana a intervallo
mi spiego meglio: Settimana 12 = dal 07 a 13.03.2005 (basta un dato
l'altro so come calcolarlo :-))
e viceversa ovvero 05.03.2005 = 11
In access ho trovato solo la funzione Mese.. non l'ho vista o c'è un
Barbatrucco?
Dimenticavo, Access 2002 SP3
...
per ricavare dalla data la settimana puoi ricorrere alla funzione
Format("10/3/2005","ww",vbMonday,vbFirstFourDays)
Grazie Cinzia.. ho trovato anche informazioni nell'help... avevo guardato,
ma digitando week e settimana non era uscito nulla..
Problema: premesso che lo sto inserendo in una query..., ma con la virgola
tra i campi da errore, allora ho provato ad inserire la formula con il
punto e virgola e quello lo prende, ma se inserisco la formula come me
l'hai data tu e come c'è anche nell'help, i campi vbMondaye
vbFirstFourDays non li riconosce e mi chiede di immettere un dato....
Format("10/03/2005";"ww") e lo trasforma in Format("10/03/2005";"""ww""")
e da come risultato ww, che non è quello che mi aspettavo...
Format("10/03/2005";ww) ma me lo vede come campo e mi chiede di
inserire il valore...
ma il numero che volevo non esce..
Dove sbaglio...devo istallare qualche cosa?
Nessun sbaglio, solo che Cinzia ha scritto la versione per VBA
e tu vuoi usare la funzione in una query dove la sintassi è diversa.
Prova con
Format(#10/03/2005#;"ii";2;2)
o
DatePart("ii",#10/03/2005#)

Certo invece della data puoi anche usare il nome di un campo data:
Format([MioCampoData];"ii";2;2)

Purtroppo tutti e due funzioni hanno un bug che qualche volta
sbaglia con la settimana 53/1:
http://support.microsoft.com/?kbid=200299
--
HTH
Karl
*********
Access FAQ: www.donkarl.com/it + CISA1, Arezzo, 4+5/6/2005
la prima Conferenza Italiana per Sviluppatori di Access
Karl Donaubauer
2005-03-12 11:12:09 UTC
Permalink
... in una query dove la sintassi è diversa.
Prova con
Format(#10/03/2005#;"ii";2;2)
o
DatePart("ii",#10/03/2005#)
...
*Oops*, certo dev'essere punto e virgola:

DatePart("ii";#10/03/2005#)
--
Karl
*********
Access FAQ: www.donkarl.com/it + CISA1, Arezzo, 4+5/6/2005
la prima Conferenza Italiana per Sviluppatori di Access
SergioBS
2005-03-12 12:49:55 UTC
Permalink
Post by Karl Donaubauer
Post by SergioBS
Post by Cinzia
...
Post by SergioBS
Ho necessità di convertire una data nel corrisponedente numero della
settimana e il contrario, ovvero da n. settimana a intervallo
mi spiego meglio: Settimana 12 = dal 07 a 13.03.2005 (basta un dato
l'altro so come calcolarlo :-))
e viceversa ovvero 05.03.2005 = 11
In access ho trovato solo la funzione Mese.. non l'ho vista o c'è un
Barbatrucco?
Dimenticavo, Access 2002 SP3
...
per ricavare dalla data la settimana puoi ricorrere alla funzione
Format("10/3/2005","ww",vbMonday,vbFirstFourDays)
Grazie Cinzia.. ho trovato anche informazioni nell'help... avevo guardato,
ma digitando week e settimana non era uscito nulla..
Problema: premesso che lo sto inserendo in una query..., ma con la virgola
tra i campi da errore, allora ho provato ad inserire la formula con il
punto e virgola e quello lo prende, ma se inserisco la formula come me
l'hai data tu e come c'è anche nell'help, i campi vbMondaye
vbFirstFourDays non li riconosce e mi chiede di immettere un dato....
Format("10/03/2005";"ww") e lo trasforma in Format("10/03/2005";"""ww""")
e da come risultato ww, che non è quello che mi aspettavo...
Format("10/03/2005";ww) ma me lo vede come campo e mi chiede di
inserire il valore...
ma il numero che volevo non esce..
Dove sbaglio...devo istallare qualche cosa?
Nessun sbaglio, solo che Cinzia ha scritto la versione per VBA
e tu vuoi usare la funzione in una query dove la sintassi è diversa.
Prova con
Format(#10/03/2005#;"ii";2;2)
o
DatePart("ii",#10/03/2005#)
Format([MioCampoData];"ii";2;2)
HTH
Karl
*********
Access FAQ: www.donkarl.com/it + CISA1, Arezzo, 4+5/6/2005
la prima Conferenza Italiana per Sviluppatori di Access
Grazie Karl... anche per il link..

Sergio
Continua a leggere su narkive:
Loading...