Forums Últimos mensajes - Powered by IBM
 

Problema con comprobacion de fechas desde VBA

15/12/2004 - 01:01 por Jose | Informe spam
Tengo el siguiente problema:
en la celda A1 el valor dado en fx es 27/12/2004 pero con formato de fecha
largo en la celda A1 es decir me aparece en la celda el valor
lunes, 27 de diciembre del 2004
Cuando hago una comprobacion del dia desde VBA del tipo;

Range("A1").NumberFormat = "[$-C0A]dddd, dd"" de ""mmmm"" del ""yyyy"
fecha = Range("A1").Value
dosprimerasletrasfecha = left(fecha, 2)
if dosprimerasletrasfecha = "lu" then dia= "Lunes"

Deberia ser correcto pero sin embargo el valor de dosprimerasletrasfecha es
27 osea el formato de fecha corto a pesar de que declaro en VBA el formato
de fecha largo.
Si a esto le añadimos que cuando intento comparar una fecha con otra para
dilucidar cual es la más tardia tambien se confunde el tema (osea yo) porque
suma valores al parecer
de cadenas de texto Ejemplo y da que el dia 29/12/2004 es mayor que el
03/12/2004.

fecha = 29/12/2004 'es un miércoles
fecha2 = 03/01/2005 'es un lunes
If fecha > fecha2 then
msgbox fecha & " es mayor que " & fecha2
Else
msgbox fecha2 & " es mayor que " & fecha
End If

Alguien sabe como solucionar alguno o ambos problemas?.
Agradecido de antemano.
 

Leer las respuestas

#1 KL
15/12/2004 - 00:23 | Informe spam
Jose,


en la celda A1 el valor dado en fx es 27/12/2004 pero con formato de fecha
largo en la celda A1 es decir me aparece en la celda el valor
lunes, 27 de diciembre del 2004...



Aqui es donde te has confundido! El valor para VBA sigue siendo #27/12/2004#
(38348 para la hoja de calculo). Mientras q "lunes, 27 de diciembre del
2004" es solo una forma mas de representarlo, o sea formato.

Range("A1").NumberFormat = "[$-C0A]dddd, dd"" de ""mmmm"" del ""yyyy"
fecha = Range("A1").Value
dosprimerasletrasfecha = left(fecha, 2)
if dosprimerasletrasfecha = "lu" then dia= "Lunes"



Dich lo de arriba, solo tienes q cambiar la siguiente line de tu codigo:
de "fecha = Range("A1").Value" a "fecha = Range("A1").Text"

La otra manera de obtener el nombre del dia es:
dia=Format(Range("A1").Value,"dddd")

Si a esto le añadimos que cuando intento comparar una fecha con otra para
dilucidar cual es la más tardia tambien se confunde el tema (osea yo)
porque
suma valores al parecer
de cadenas de texto Ejemplo y da que el dia 29/12/2004 es mayor que el
03/12/2004.

fecha = 29/12/2004 'es un miércoles
fecha2 = 03/01/2005 'es un lunes
If fecha > fecha2 then
msgbox fecha & " es mayor que " & fecha2
Else
msgbox fecha2 & " es mayor que " & fecha
End If



Sintaxis incorrecta. Lo q ocurre aqui es q en la primera variable 29 se
divide por 12 y luego por 2004, y en la segunda 3 por 1 por 2005. Para
representar un valor de fecha deberias usar #dd/mm/yyyy#, o sea:

fecha = #29/12/2004# 'es un miércoles
fecha2 = #03/01/2005# 'es un lunes
If fecha > fecha2 then
msgbox fecha & " es mayor que " & fecha2
Else
msgbox fecha2 & " es mayor que " & fecha
End If

Saludos,
KL

Preguntas similares