2011-11-30 16 views
16

¿Hay alguna manera de obtener el número entero subyacente para la función Date en VBA? Me refiero al número entero almacenado por Excel para describir las fechas en la memoria en términos de número de días (cuando el tiempo está incluido puede ser un flotante, entonces supongo). Sin embargo, solo estoy interesado en la parte entera. ¿Hay solo otra función para eso?VBA Fecha como número entero

Por ejemplo, para el día de hoy() Me gustaría ser capaz de volver 40877 ..

Gracias chicos;)

Respuesta

24

La fecha no es un entero en VB (A), es un doble.

Puede obtener el valor de una Fecha pasándola al CDbl().

CDbl(Now())  ' 40877.8052662037 

Para obtener la parte entera, utilice

Int(CDbl(Now())) ' 40877 

que devolver un largo doble sin decimales (es decir, lo que haría Floor() en otros idiomas).

El uso de CLng() o Round() daría lugar al redondeo, que devolverá un "día en el futuro" cuando se llame después de las 12:00 del mediodía, por lo tanto, no haga eso.

+0

Int (CDbl (Now())) no devuelve un largo, devuelve un doble. El valor del doble simplemente representa un número entero, pero su tipo de datos sigue siendo el doble. – phoog

+0

@phoog: 'TypeName (VarType (Int (CDbl (Now())))) =" Long "' en mi sistema – Tomalak

+0

@Tomalek por supuesto, porque 'VarType (Int (CDbl (Now())))' regresa 5, que es el valor de 'vbDouble', pero es en sí mismo un' Long'. Pruebe 'TypeName (Int (CDbl (Now())))'. – phoog

9

sólo tiene que utilizar CLng(Date).

Tenga en cuenta que es necesario utilizar Long no Integer para este como el valor de la fecha actual es> 32767

+0

¡De hecho, no pensé en el problema de Long/Integer! Gracias ! – Jerome

+2

CLng redondeará los valores de la tarde hasta el día siguiente. – phoog

+0

@phoog. He usado 'Fecha' no' Ahora'. 'Date' no tiene componente de tiempo, por lo tanto' CLng' está bien y es seguro. –

1
Public SUB test() 
    Dim mdate As Date 
    mdate = now() 
    MsgBox (Round(CDbl(mdate), 0)) 
End SUB 
0

Puede utilizar ejemplo de código abajo para cadena de fecha como mdate y ahora() como el de hoy, también se puede calcular la deferencia entre tanto la fecha como el envejecimiento

Public Sub test(mdate As String) 
    Dim toDay As String 
    mdate = Round(CDbl(CDate(mdate)), 0) 
    toDay = Round(CDbl(Now()), 0) 
    Dim Aging as String 
    Aging = toDay - mdate 
    MsgBox ("So aging is -" & Aging & vbCr & "from the date - " & _ 
    Format(mdate, "dd-mm-yyyy")) & " to " & Format(toDay, "dd-mm-yyyy")) 
End Sub 

NB: Se utiliza CDate para convertir la cadena de fecha a fecha válida

Estoy usando esto en Office 2007 :)

Cuestiones relacionadas