2011-11-22 25 views
6

Estoy tratando de encontrar la diferencia entre la fecha del sistema y la fecha almacenada en la hoja de trabajo. Si la diferencia entre ellos es> 30 días, el resultado es verdadero, lo demás el resultado es falsoCómo encontrar la diferencia entre las fechas en VBA

Dim result as boolean 
Dim sDate as string 
sDate = Date 
if Worksheets("dates").Cells(1,1) - sDate > 30 then 'how do I do this? 
    result = true 
else 
    result = false 
end if 

¿Cómo puedo saber la diferencia en días entre la fecha del sistema y la fecha almacenada en la hoja de cálculo? La fecha en la hoja de trabajo también puede ser una fecha pasada.

+0

¿Cómo se almacena el valor de la fecha en la hoja de cálculo? es decir, 1 de abril de 2010, 30 de enero de 2010, etc. – brettdj

+0

Como texto, supongo. mm/dd/aaaa – Ank

Respuesta

23

Me pregunto por qué rara vez veo a la gente que usa las funciones de fecha.

Puede también utilizar esto:

if DateDiff("d", date1, date2) > 30 then 

en este caso, sería fecha1 CDate y fecha2 sería sdate (ya sea fundido con (Hojas de trabajo ("fechas") Las células (1,1)). CDate o declaradas con sentencias dim como una fecha como dijo Jeff

"D" significa que estamos obteniendo la diferencia en días Estos son los intervalos de años, meses, etc., en VBA:..

yyyy - Year 
q - Quarter 
m - Month 
y - Day of year 
d - Day 
w - Weekday 
ww - Week 
h - Hour 
n - Minute 
s - Second 
3

Prueba esto:

if CDate(Worksheets("dates").Cells(1,1)) - sDate > 30 then 
+0

¡No sabía algo así como CDate existía! jaja .. Déjame intentarlo ... – Ank

+0

CDate (Hojas de trabajo ("fechas"). Células (1,1)) da un tipo no coincidente! – Ank

+0

@Ankur - Oh, sDate debe ser una cita también. Veo que es una cadena. En realidad, si cambia sDate a una fecha, es posible que no necesite el lanzamiento CDate. –

1

SDATE es un STRI ¡NG, que NO es una Fecha Real!

Convierta su cadena en una fecha, usando la función CDate() o la función DateValue().

Sin embargo, hay una advertencia en este tipo de conversión. Estos conversión se encargará de las siguientes estructuras:

yyyy/mm/dd 
yyyy/m/d 
mm/dd/yyyy 
m/d/yyyy 

éstos no se convertirán correctamente

dd/mm/yyyy 
d/m/yyyy 

y evitar el uso de cualquier año de 2 dígitos.

Aconsejaría utilizar la función DateSerial() para la conversión de fechas.

Por lo tanto, en cuanto a su código, suponiendo que los valores de su hoja son en realidad fechas (para estar seguro, simplemente seleccione la columna y cambie el Formato de número a GENERAL. Si son fechas reales, cada una mostrará un NÚMERO PURO. para hacer clic en DESHACER para recuperar su formato de fecha)

Dim result As Boolean 

If Worksheets("dates").Cells(1, 1).Value - Date > 30 Then 
    result = True 
Else 
    result = False 
End If 
Cuestiones relacionadas