Formato Fecha

02/01/2008 - 17:58 por Andrés | Informe spam
Hola

Tengo un problema que se me ha presentado en varias macros, pero esta vez si
necesito resolverlo pues es de vital importancia para el correcto
funcionamiento.

El formulario creado tiene un control DTPicker que captura la fecha y luego
la debe registar en una hoja del libro para crear una base de datos. Todo
funciona bien, pero me está cambiando el formato para los primeros días de
cada mes. Lo expreso más claro y resumido:

Para los primeros días del mes (Inferiores al día 13) me pone el formato
mm/dd/aaaa y para los días iguales o superiores al 13 el formato es:
dd/mm/aaaa

Lo que quiero es hallar una forma en la cual no me cambie el formato y todas
las fechas, desde el día 1 hasta el día 31 me queden en el mismo formato.

MUCHAS GRACIAS POR SU AYUDA.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
03/01/2008 - 00:33 | Informe spam
hola, Andrés !

... formulario... un control DTPicker que captura la fecha... la debe registar en una hoja... para crear una base de datos.
Todo funciona bien, pero me esta cambiando el formato para los primeros dias de cada mes.
Lo expreso mas claro y resumido:
Para los primeros dias del mes (Inferiores al dia 13) me pone el formato mm/dd/aaaa
y para los dias iguales o superiores al 13 el formato es: dd/mm/aaaa
Lo que quiero es hallar una forma en la cual no me cambie el formato y todas las fechas
desde el dia 1 hasta el dia 31 me queden en el mismo formato.



1) quieres decir que el control DTPicker "decide" el formato que le va a poner a la fecha (a su entera y absoluta discrecion) ?

2) (hasta donde se) si el control deposita la fecha en alguna celda SIN formato especifico...
dicha celda "asume" el formato establecido por la configuracion regional del equipo para la "fecha corta" (por lo cual)...

3) serviria si comentas que instrucciones (precisas) son las que hacen actuar a dicho control (DTPicker)
o si estas aplicando/modificando/... el formato numerico a la/ celda/s donde el control deposita la fecha -?-

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Andrés
04/01/2008 - 15:51 | Informe spam
Hola Hector. mil gracias por la respuesta!!!

Te aclaro un poco:

1) quieres decir que el control DTPicker "decide" el formato que le va a
poner a la fecha (a su entera y absoluta discrecion) ?

Tanto como a su entera disposición, no, ya está identificado que es para los días inferiores al día 13, en ese caso es como si él se confundiera y no identificara bien cual es el día y cual es el mes.







2) dicha celda "asume" el formato establecido por la configuracion regional
del equipo para la "fecha corta" (por lo cual)...

Efectivamente, eso fue lo primero que revisé y hasta le puse formato texto para que lo documentara tal cual como lo había capturado, pero ni siquiera de esta forma me funcionó.







3) serviria si comentas que instrucciones (precisas) son las que hacen
actuar a dicho control (DTPicker)

Inicialmente solo capturaba el valor del DTPicker y lo copiaba en la base de datos, pero no funcionó, luego le cambié el formato para que me documentara sólo la fecha corta, y tampoco funcionó, luego lo cambié a formato string y tampoco.







ActiveCell.Value = Me.DTPicker1.Value

ActiveCell.Value = FormatDateTime(Me.DTPicker1.Value, vbShortDate)

ActiveCell.Value = CStr(Me.DTPicker1.Value)



Finalmente lo he solucionado pero dando una vuelta muy larga, pues capturo
la fecha, la convierto a texto, separo los dos primeros caracteres desde la
izquierda, los convierto a número y analizo si es menor que 13; de ser
verdad; entonces con la fecha en formato texto juego con los caracteres y los
cambio de orden y creo la fecha correcta.

Espero haya sido lo suficientemente claro, si conoces alguna forma para no
tener que dar tanta vuelta, te lo agradezco.

Andrés


"Héctor Miguel" escribió:

hola, Andrés !

> ... formulario... un control DTPicker que captura la fecha... la debe registar en una hoja... para crear una base de datos.
> Todo funciona bien, pero me esta cambiando el formato para los primeros dias de cada mes.
> Lo expreso mas claro y resumido:
> Para los primeros dias del mes (Inferiores al dia 13) me pone el formato mm/dd/aaaa
> y para los dias iguales o superiores al 13 el formato es: dd/mm/aaaa
> Lo que quiero es hallar una forma en la cual no me cambie el formato y todas las fechas
> desde el dia 1 hasta el dia 31 me queden en el mismo formato.

1) quieres decir que el control DTPicker "decide" el formato que le va a poner a la fecha (a su entera y absoluta discrecion) ?

2) (hasta donde se) si el control deposita la fecha en alguna celda SIN formato especifico...
dicha celda "asume" el formato establecido por la configuracion regional del equipo para la "fecha corta" (por lo cual)...

3) serviria si comentas que instrucciones (precisas) son las que hacen actuar a dicho control (DTPicker)
o si estas aplicando/modificando/... el formato numerico a la/ celda/s donde el control deposita la fecha -?-

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.



Respuesta Responder a este mensaje
#3 Héctor Miguel
04/01/2008 - 21:30 | Informe spam
hola, Andrés !

asumo que tu configuracion regional utiliza un orden de fechas del tipo: dd/mm/aa -?-

de las instrucciones que expones, (a mi) las siguientes dos formas me funcionan bien
(sin importar si hago cambios en el orden de fechas en mi configuracion regional)...
ActiveCell = Me.DTPicker1
ActiveCell = CDate(CLng(Me.DTPicker1))

te comento (hasta donde se) algunos inconvenientes al trabajar con fechas en vba...
y si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

1) si aplicas formatos personalizados a las celdas donde deposites un cambio "directo" de un control DTPicker...
una vez que se han bien-comunicado excel-vba-usuario no se requieren de mayores peripecias en la interfase con el usuario
es suficiente con "poner" en las celdas el contenido del control (p.e.) -> ActiveCell = DTPicker1

2) al usar funciones (vba) del tipo CSTr, Format..., no pierdas de vista que devuelven -> cadenas de texto
por lo que pudiera ser necesario andar des/re/convirtiendo fechas segun la configuracion regional -?-

3) (hasta donde se) existen algunas situaciones donde es necesario respetar la configuracion regional (p.e.)
a) el separador decimal o el de miles (en algunos casos de autofiltros y otras caracteristicas como en los formatos condicionales)
b) VBA (siendo US-Centric) ESPERA y trabaja -siempre/solo- con el formato de fechas mm-dd-yy
c) si en la configuracion regional el formato de fechas es NO-USA... hay conflictos con la interpretacion EN VBA
d) CDate(texto_fecha) utiliza el formato/orden de fechas que se tiene en la configuracion regional de windows
e) si (al fin de cuentas en excel) las fechas SON numeros seriales...
-> una nueva re/conversion con el tipo de datos CLng(CDate(...)) +/- te asegura la transparencia entre VBA-usuario
f) que sucederia si (por costumbre) se hace una "conversion" de fecha usando literales en ingles/castellano en el idioma equivocado ?
-> revisa: http://www.bmsltd.ie/ExcelProgRef/Ch22/default.htm

4) en el peor de los casos (usando macros y formatos de fecha que dependen de la configuracion regional)...
prueba re/convirtiendo a formatos largos (p.e.) CLng(CDate(<formato de fecha regional>))
o depositando "textos" en formatos "regionales" (p.e.) ActiveCell = CDate(CLng(DTPicker1))

__ la consulta original __
1) quieres decir que el control DTPicker "decide" el formato que le va a poner a la fecha (a su entera y absoluta discrecion) ?
Tanto como a su entera disposicion, no, ya esta identificado que es para los dias inferiores al dia 13
en ese caso es como si el se confundiera y no identificara bien cual es el dia y cual es el mes.







2) dicha celda "asume" el formato establecido por la configuracion regional del equipo para la "fecha corta" (por lo cual)...
Efectivamente, eso fue lo primero que revise y hasta le puse formato texto para que lo documentara tal cual como lo habia capturado
pero ni siquiera de esta forma me funciono.







3) serviria si comentas que instrucciones (precisas) son las que hacen actuar a dicho control (DTPicker)
Inicialmente solo capturaba el valor del DTPicker y lo copiaba en la base de datos, pero no funciono
luego le cambie el formato para que me documentara solo la fecha corta, y tampoco funciono
luego lo cambie a formato string y tampoco.






ActiveCell.Value = Me.DTPicker1.Value
ActiveCell.Value = FormatDateTime(Me.DTPicker1.Value, vbShortDate)
ActiveCell.Value = CStr(Me.DTPicker1.Value)

Finalmente lo he solucionado pero dando una vuelta muy larga, pues capturo la fecha
la convierto a texto, separo los dos primeros caracteres desde la izquierda
los convierto a numero y analizo si es menor que 13; de ser verdad
entonces con la fecha en formato texto juego con los caracteres y los cambio de orden y creo la fecha correcta.
Espero haya sido lo suficientemente claro, si conoces alguna forma para no tener que dar tanta vuelta...
Respuesta Responder a este mensaje
#4 Andrés
06/01/2008 - 03:55 | Informe spam
Hector
MUCHAS GRACIAS por tu respuesta fue de gran ayuda...

te debo una

Andrés.
Colombia


"Héctor Miguel" escribió:

hola, Andrés !

asumo que tu configuracion regional utiliza un orden de fechas del tipo: dd/mm/aa -?-

de las instrucciones que expones, (a mi) las siguientes dos formas me funcionan bien
(sin importar si hago cambios en el orden de fechas en mi configuracion regional)...
ActiveCell = Me.DTPicker1
ActiveCell = CDate(CLng(Me.DTPicker1))

te comento (hasta donde se) algunos inconvenientes al trabajar con fechas en vba...
y si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

1) si aplicas formatos personalizados a las celdas donde deposites un cambio "directo" de un control DTPicker...
una vez que se han bien-comunicado excel-vba-usuario no se requieren de mayores peripecias en la interfase con el usuario
es suficiente con "poner" en las celdas el contenido del control (p.e.) -> ActiveCell = DTPicker1

2) al usar funciones (vba) del tipo CSTr, Format..., no pierdas de vista que devuelven -> cadenas de texto
por lo que pudiera ser necesario andar des/re/convirtiendo fechas segun la configuracion regional -?-

3) (hasta donde se) existen algunas situaciones donde es necesario respetar la configuracion regional (p.e.)
a) el separador decimal o el de miles (en algunos casos de autofiltros y otras caracteristicas como en los formatos condicionales)
b) VBA (siendo US-Centric) ESPERA y trabaja -siempre/solo- con el formato de fechas mm-dd-yy
c) si en la configuracion regional el formato de fechas es NO-USA... hay conflictos con la interpretacion EN VBA
d) CDate(texto_fecha) utiliza el formato/orden de fechas que se tiene en la configuracion regional de windows
e) si (al fin de cuentas en excel) las fechas SON numeros seriales...
-> una nueva re/conversion con el tipo de datos CLng(CDate(...)) +/- te asegura la transparencia entre VBA-usuario
f) que sucederia si (por costumbre) se hace una "conversion" de fecha usando literales en ingles/castellano en el idioma equivocado ?
-> revisa: http://www.bmsltd.ie/ExcelProgRef/Ch22/default.htm

4) en el peor de los casos (usando macros y formatos de fecha que dependen de la configuracion regional)...
prueba re/convirtiendo a formatos largos (p.e.) CLng(CDate(<formato de fecha regional>))
o depositando "textos" en formatos "regionales" (p.e.) ActiveCell = CDate(CLng(DTPicker1))

__ la consulta original __
> 1) quieres decir que el control DTPicker "decide" el formato que le va a poner a la fecha (a su entera y absoluta discrecion) ?
>>>> Tanto como a su entera disposicion, no, ya esta identificado que es para los dias inferiores al dia 13
>>>> en ese caso es como si el se confundiera y no identificara bien cual es el dia y cual es el mes.
>
> 2) dicha celda "asume" el formato establecido por la configuracion regional del equipo para la "fecha corta" (por lo cual)...
>>>> Efectivamente, eso fue lo primero que revise y hasta le puse formato texto para que lo documentara tal cual como lo habia capturado
>>>> pero ni siquiera de esta forma me funciono.
>
> 3) serviria si comentas que instrucciones (precisas) son las que hacen actuar a dicho control (DTPicker)
>>>> Inicialmente solo capturaba el valor del DTPicker y lo copiaba en la base de datos, pero no funciono
>>>> luego le cambie el formato para que me documentara solo la fecha corta, y tampoco funciono
>>>> luego lo cambie a formato string y tampoco.
> ActiveCell.Value = Me.DTPicker1.Value
> ActiveCell.Value = FormatDateTime(Me.DTPicker1.Value, vbShortDate)
> ActiveCell.Value = CStr(Me.DTPicker1.Value)
>
> Finalmente lo he solucionado pero dando una vuelta muy larga, pues capturo la fecha
> la convierto a texto, separo los dos primeros caracteres desde la izquierda
> los convierto a numero y analizo si es menor que 13; de ser verdad
> entonces con la fecha en formato texto juego con los caracteres y los cambio de orden y creo la fecha correcta.
> Espero haya sido lo suficientemente claro, si conoces alguna forma para no tener que dar tanta vuelta...



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