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.

Preguntas similare

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
Respuesta Responder a este mensaje
#2 KL
15/12/2004 - 00:29 | Informe spam
Jose,

Por si no ha quedado lo suficintemente claro, la linea

dia=Format(Range("A1").Value,"dddd")

sustituye to el codigo siguiente (no es necesario ni formatear la celda):

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

Saludos,
KL

"KL" <lapink2000(at)hotmail.com> wrote in message
news:
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


Respuesta Responder a este mensaje
#3 KL
15/12/2004 - 00:30 | Informe spam
Jose,

Por si no ha quedado lo suficintemente claro, la linea

dia=Format(Range("A1"),"dddd")

sustituye to el codigo siguiente (no es necesario ni formatear la celda):

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

Saludos,
KL

"KL" <lapink2000(at)hotmail.com> wrote in message
news:
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


Respuesta Responder a este mensaje
#4 KL
15/12/2004 - 00:52 | Informe spam
No hay de que. Vete a la cama q ya es la una :))

KL

"Jose" wrote in message
news:%
Oye muy agradecida tu ayuda, solución y aclaración
Bueno, Bonito, Barato y sobretodo Rápido¡¡¡
Gracias de nuevo.

"KL" <lapink2000(at)hotmail.com> escribió en el mensaje
news:
Jose,

Por si no ha quedado lo suficintemente claro, la linea

dia=Format(Range("A1"),"dddd")

sustituye to el codigo siguiente (no es necesario ni formatear la celda):

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

Saludos,
KL

"KL" <lapink2000(at)hotmail.com> wrote in message
news:
> 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
>
>







Respuesta Responder a este mensaje
#5 Jose
15/12/2004 - 01:45 | Informe spam
Oye muy agradecida tu ayuda, solución y aclaración
Bueno, Bonito, Barato y sobretodo Rápido¡¡¡
Gracias de nuevo.

"KL" <lapink2000(at)hotmail.com> escribió en el mensaje
news:
Jose,

Por si no ha quedado lo suficintemente claro, la linea

dia=Format(Range("A1"),"dddd")

sustituye to el codigo siguiente (no es necesario ni formatear la celda):

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

Saludos,
KL

"KL" <lapink2000(at)hotmail.com> wrote in message
news:
> 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
>
>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida