Discussione:
Problema con DateDif()
(troppo vecchio per rispondere)
Pico1965
2008-11-20 08:17:38 UTC
Permalink
Salve a tutti !!

In Excel 2K ho installato i componenti aggiuntivi strumenti di analisi
e strumenti di analisi VBA.
Penso che la cosa sia andata a buon fine perchè nel riquadro progetto
VBA mi trovo i due nuovi progetti atpvbaen.xla e funcres.xla.
Però ho notato che se dalla finestra Strumenti -> Componenti
aggiuntivi -> Sfoglia, mi si apre la cartella %APPDATA%\Microsoft
\Componenti aggiuntivi che però è vuota.

Premesso questo veniamo al problema:
se scrivo (giusto per semplificare...) nella cella A1

= DATA.DIFF(OGGI();OGGI();"d")

OTTENGO COME RISULTATO 0

Se in una macro scrivo:

[A1]= DateDif(date,date,"d")

mi segnala l'errore di funzione non definita datedif.

Dove sbaglio?
Mauro Gamberini
2008-11-20 08:40:47 UTC
Permalink
In Excel 2K ho installato i componenti aggiuntivi strumenti di analisi
e strumenti di analisi VBA.
Penso che la cosa sia andata a buon fine perchè nel riquadro progetto
VBA mi trovo i due nuovi progetti atpvbaen.xla e funcres.xla.
Però ho notato che se dalla finestra Strumenti -> Componenti
aggiuntivi -> Sfoglia, mi si apre la cartella %APPDATA%\Microsoft
\Componenti aggiuntivi che però è vuota.

Premesso questo veniamo al problema:
se scrivo (giusto per semplificare...) nella cella A1

= DATA.DIFF(OGGI();OGGI();"d")

OTTENGO COME RISULTATO 0

Se in una macro scrivo:

[A1]= DateDif(date,date,"d")

mi segnala l'errore di funzione non definita datedif.
*************************************************

Utilizza la funzione DateDiff del vb.
Scrivi DateDiff su di un modulo e premi F1
per visualizzare la guida.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
Mauro Gamberini
2008-11-20 08:44:11 UTC
Permalink
....partito un coplpo...

In pratica:

Public Sub m()
Dim sh As Worksheet
Set sh = Worksheets("Foglio1")
With sh
.Range("A1").Value = _
DateDiff("d", Date, Date)
End With
End Sub
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
Pico1965
2008-11-20 09:19:07 UTC
Permalink
Grazie dell'interessamento!!!

Scusami ma forse ho semplificato troppo...

Se non ho capito male DateDif è diverso da DateDiff, nel senso che
quest'ultimo non accetta i parametri "misti" tipo "ym" che sono quelli
che devo usare
(in pratica devo trasformare in macro questa procedura:
http://groups.google.it/group/microsoft.public.it.office.excel/browse_thread/thread/5d33f02331a27147/6b09bff1930989ac?hl=it&lnk=gst&q=numero+di+giorni#6b09bff1930989ac).

Da eXcel funziona perfettamente... in VBA non ci riesco.
Mauro Gamberini
2008-11-20 09:47:03 UTC
Permalink
Scusami ma forse ho semplificato troppo...

Se non ho capito male DateDif è diverso da DateDiff, nel senso che
quest'ultimo non accetta i parametri "misti" tipo "ym" che sono quelli
che devo usare
(in pratica devo trasformare in macro questa procedura:
http://groups.google.it/group/microsoft.public.it.office.excel/browse_thread/thread/5d33f02331a27147/6b09bff1930989ac?hl=it&lnk=gst&q=numero+di+giorni#6b09bff1930989ac).

Da eXcel funziona perfettamente... in VBA non ci riesco.
**************************************************

Public Sub m()

Dim sh As Worksheet
Dim dData1 As Date
Dim dData2 As Date

dData1 = "2008/11"
dData2 = "2008/10"

Set sh = Worksheets("Foglio2")
With sh
.Range("A1").Value = _
DateDiff("d", _
dData1, dData2)
End With

Set sh = Nothing

End Sub
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
Mauro Gamberini
2008-11-20 10:04:38 UTC
Permalink
Se(se) i pc sono tutti in italiano:

Public Sub m()

Dim sh As Worksheet
Dim s As String
Set sh = Worksheets("Foglio1")
With sh
.Range("A1").FormulaLocal = _
"=DATA.DIFF(" & Date & ";" _
& Date & ";""d"")"
End With
Set sh = Nothing

End Sub


Altrimenti (consigliato!):

Public Sub m()

Dim sh As Worksheet
Dim s As String
Set sh = Worksheets("Foglio2")
With sh
.Range("A12").Value = _
"=DATEDIF(" & Date & "," _
& Date & ",""d"")"
End With
Set sh = Nothing

End Sub
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
Pico1965
2008-11-20 15:55:02 UTC
Permalink
Grazie dell'aiuto !!!

Il tuo codice:
Public Sub m()
Dim sh As Worksheet
Dim s As String
Set sh = Worksheets("Foglio2")
With sh
.Range("A12").Value = _
"=DATEDIF(" & Date & "," _
& Date & ",""d"")"
End With
Set sh = Nothing
End Sub


Deve essere modificato in:
.Range("A12").Value = _
"=DATEDIF(""" & Date & """,""" _
& Date & """,""d"")"

e funziona.

Ma qual'è l'errore di questa riga di codice?

MSGBOX "Sono trascorsi " & DateDif(Date-60,Date,"y") & " anni, " &
DateDif(Date-60,Date,"ym") & " mesi e " & DateDif(Date-60,Date,"md") "
giorni."?

Grazie
Mauro Gamberini
2008-11-20 16:06:39 UTC
Permalink
Ma qual'è l'errore di questa riga di codice?

MSGBOX "Sono trascorsi " & DateDif(Date-60,Date,"y") & " anni, " &
DateDif(Date-60,Date,"ym") & " mesi e " & DateDif(Date-60,Date,"md") "
giorni."?
************************************************

Che non hai letto i miei post.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
Pico1965
2008-11-20 18:09:24 UTC
Permalink
On 20 Nov, 17:06, "Mauro Gamberini"
Post by Pico1965
Ma qual'è l'errore di questa riga di codice?
MSGBOX "Sono trascorsi " & DateDif(Date-60,Date,"y") & " anni, " &
DateDif(Date-60,Date,"ym") & " mesi e " & DateDif(Date-60,Date,"md") "
giorni."?
************************************************
Che non hai letto i miei post.
Mi sembra che 6 stato un po' troppo drastico.

Probabilmente e + semplicemente non avrò capito.

Il senso della mia domanda è il seguente:
Visto che dataInizio e DataFine si trovano già in due celle ... per
quale motivo devo andare a scrivere in altre 3 celle i 3 calcoli
DateDif() per poi messaggiarli?

O, meglio perchè questa funziona:
MSGBOX "Oggi è il giorno " & Format(date,"dd") & " del mese di " &
Format(date,"mmmm") & " dell'anno " & Format(date,"yyyy")
e quella no?

Magari la risposta sarà banale ma mi sfugge...
Mauro Gamberini
2008-11-20 18:41:37 UTC
Permalink
Post by Pico1965
Mi sembra che 6 stato un po' troppo drastico.
Sorry, fretta.

Da un post precedente:

With sh
.Range("A1").Value = _
DateDiff("d", _
dData1, dData2)
End With

Guarda i parametri di DateDiff che *non è*
una funzione di Excel, ma di vb.

Se vuoi utilizzare quella di Excel:

With sh
.Range("A12").Value = _
"=DATEDIF(" & Date & "," _
& Date & ",""d"")"
End With

I parametri sono passato diversamente.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
Pico1965
2008-11-20 19:47:25 UTC
Permalink
    With sh
        .Range("A1").Value = _
            DateDiff("d", _
            dData1, dData2)
    End With
Guarda i parametri di DateDiff che *non è*
una funzione di Excel, ma di vb.
Ora sono a casa ma vedo di ricordarmi le prove del pomeriggio.
DateDif *funziona* per come interesserebbe a me ma da risultati
*inidonei*

Dava qualcosa del genere:
Data inizio: 01/01/2001
Data fine: 02/02/2001

MSGBOX "Sono passati " & DateDiff("yyyy", DataInizio,DataFine) & "
anni " & DateDiff("m", DataInizio,DataFine) & " mesi e " & DateDiff
("d", DataInizio,DataFine) & "giorni"
Sono passati 0 anni 1 mesi e 32 giorni
Il risultato è *giusto*
Nel senso che la differenza tra le due date e di un mese o 32 giorni.
Questo perchè alla funzione mancano quei parametri "ym" ecc propri
della funzione dateDif()
    With sh
        .Range("A12").Value = _
            "=DATEDIF(" & Date & "," _
            & Date & ",""d"")"
    End With
Quindi, se ho ben capito, l'unica strada per utilizzare il risultato
di datedif() è quello di appoggiarsi su 3 celle (anni/mesi/giorni) e
poi messaggiare il loro valore.

Grazie per la pazienza

Loading...