fechas VBA

15/05/2007 - 02:25 por Ivan | Informe spam
hola a todos,

aunque se que es un tema muy tratado en el foro (de hecho creo haber leído
unas cuantas conversaciones al respecto, sobre todo de y/o entre Hector
Miguel y KL, en incluso puede que yo mismo haya estado implicado en alguna),
he estado buscando y no acabo de aclararme con mi duda.

se trata de lo siguiente: he hecho una función para que me devuelva la fecha
en formato valido para VB < espero no equivocarme al pensar que es
'mm/dd/yy' >, para poder usar estas en diversos procesos (pej autofiltros)
sin tener que formatearla directamente cada vez, y SOBRE TODO para poder
usarla sin que importe la configuración regional del sistema del usuario.

en esto ultimo es donde tengo mis mayores dudas. En mi equipo tengo la
configuración (creo que) europea ['dd/mm/yyyy], y en un principio pensé que
con formatearla así Format(fecha, "mm/dd/yyyy") me valdría, y de hecho
parece valerme, pero

¿y si la configuración del sistema es p.ej: 'mm/dd/yyyy'? ¿que ocurriría con
el formateo?¿ lo invertiría, creyendo ponerlo bien, o directamente lo
reconoce y lo mantiene tal cual?

bueno, ante estas dudas, esta es la función, pero como solo la he probado en
mi configuración, en la que parece funcionar bien, no se hasta que punto
pueden surgir problemas en otras configuraciones, o si existen tros factores
a tener en cuenta, o una forma de simplificarlo

Function FechaVba(ByVal fecha As Date) As Date
Select Case Application.International(xlDateOrder)
Case 0: FechaVba = DateValue(fecha)
Case Else: FechaVba = Format(fecha, "mm/dd/yyyy")
End Select
End Function

lo dicho, si podéis echarme una mano o facilitarme un link 'esclarecedor',
os lo agradezco

un saludo y hasta pronto
Ivan
 

Leer las respuestas

#1 Héctor Miguel
15/05/2007 - 07:04 | Informe spam
hola, Ivan !

1) al usar la funcion [vba] Format, no pierdas de vista que devuelve -> cadenas de texto
por lo que pudiera ser necesario andar des/re/convirtiendo fechas segun la configuracion regional -?-

2) [hasta donde se] existen algunas 'situaciones' donde es necesario 'respetar' la configuracion regional [p.e.]
el separador decimal en algunos casos de autofiltros, y otras caracteristicas como en los formatos condicionales
[por si estuvieran estos incluidos en tus 'diversos procesos' (pej autofiltros)] -?-

3) todas formas, no creo que te resulte perjudicial si te comento [hasta donde se] algunos 'trabajos' con fechas en vba...
a) si en tu configuracion regional, el orden de fecha-corta es dd-mm-aa... para VBA [que es 'US-Centric'] ES mm-dd-aa
b) CDate(texto_fecha) utiliza el formato/orden de fechas que se tiene en la configuracion regional de windows
c) VBA [siendo US-Centric) ESPERA y 'trabaja' -siempre/solo- con el formato de fechas mm-dd-yy
d) si en la configuracion regional el formato de fechas es NO-USA... hay 'conflictos' con la interpretacion EN VBA
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 :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
... he estado buscando y no acabo de aclararme con mi duda.
... he hecho una funcion para que me devuelva la fecha en formato valido para VB
< espero no equivocarme al pensar que es 'mm/dd/yy' >
para poder usar estas en diversos procesos (pej autofiltros) sin tener que formatearla directamente cada vez
y SOBRE TODO para poder usarla sin que importe la configuracion regional del sistema del usuario.
en esto ultimo es donde tengo mis mayores dudas. En mi equipo tengo la configuracion (creo que) europea ['dd/mm/yyyy]
y en un principio pense que con formatearla asi Format(fecha, "mm/dd/yyyy") me valdria, y de hecho parece valerme, pero
y si la configuracion del sistema es p.ej: 'mm/dd/yyyy'? que ocurriria con el formateo?
lo invertiria, creyendo ponerlo bien, o directamente lo reconoce y lo mantiene tal cual?
... esta es la funcion, pero como solo la he probado en mi configuracion, en la que parece funcionar bien
no se hasta que punto pueden surgir problemas en otras configuraciones
o si existen tros factores a tener en cuenta, o una forma de simplificarlo
Function FechaVba(ByVal fecha As Date) As Date
Select Case Application.International(xlDateOrder)
Case 0: FechaVba = DateValue(fecha)
Case Else: FechaVba = Format(fecha, "mm/dd/yyyy")
End Select
End Function
lo dicho, si podeis echarme una mano o facilitarme un link 'esclarecedor', os lo agradezco

Preguntas similares