Office 2003 vs XP: Variant data type

15/11/2007 - 16:10 por EA | Informe spam
Hola:
¿Saben si el tipo de datos Variant ha sufrido alteraciones en Office 2003
con respecto a XP? Tengo resultados inesperados en el tratamiento de celdas
en las que hay texto con apariencia de fechas. En 2003, si esa fecha es hasta
12/12/2007, la Variant devuelve una fecha de verdad (ya no texto) con
formato mm/dd/yy (mis regionals settings son dd/mm/yy), a partir de
13/10/2007 la Variant devuelve el texto. En XP por el contrario la variant
devuelve siempre fechas con formato el de mi regional settings.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
16/11/2007 - 05:00 | Informe spam
hola, (...) ?

Saben si el tipo de datos Variant ha sufrido alteraciones en Office 2003 con respecto a XP?
Tengo resultados inesperados en el tratamiento de celdas en las que hay texto con apariencia de fechas.
En 2003, si esa fecha es hasta 12/12/2007, la Variant devuelve una fecha de verdad (ya no texto)
con formato mm/dd/yy (mis regionals settings son dd/mm/yy)
a partir de 13/10/2007 la Variant devuelve el texto.
En XP por el contrario la variant devuelve siempre fechas con formato el de mi regional settings.



1) (hasta donde se) VBA es "US-Centrc" y los datos de fechas solo los reconoce en el formato mm/dd/yy
(independientemente de lo que establezcas en la configuracion regional del panel de control de windows)

2) intercambiando en "mi" configuracion regional el formato de fechas entre dd/mm/aa <-> mm/dd/aa
y precediendo por un apostrofo entradas "como fecha" en [A1] '12/12/2007 y en [A2] '13/12/2007
el siguiente codigo devuelve que A2 contiene un "dato fecha" (y lo representa segun configuracion regional)
no importa la version de excel donde lo ejecute y (te confirmo) tampoco lo establecido en la configuracion regional

Sub Probando_datos_variant()
Dim Dato1 As Variant, Dato2 As Variant
Dato1 = [a1]
Dato2 = [a2]
MsgBox "Contenidos:" & vbTab & "Son fecha ?" & vbTab & _
"(conf reg)" & vbTab & "Fecha larga (conf reg)" & vbCr & _
Dato1 & vbTab & IsDate(Dato1) & vbTab & _
Format(Dato1, "short date") & vbTab & vbTab & Format(Dato1, "long date") & vbCr & _
Dato2 & vbTab & IsDate(Dato2) & vbTab & _
Format(Dato2, "short date") & vbTab & vbTab & Format(Dato2, "long date")
End Sub

3) como los imponderables al trabajar con fechas en VBA son mas de dos... (te sugiero)
es conveniente visitar la siguiente exposicion de manejos de fechas (de Stephen Bullen):
-> http://www.bmsltd.ie/ExcelProgRef/Ch22/default.htm

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 EA
16/11/2007 - 12:27 | Informe spam
Muchas gracias Hector Miguel por tu contestación y el interesante enlace que
me/nos das. Ya lo he probado, he encontrado los Language settings del Offcie
y los he modificado en consonancia con lo expresado en el enlace.
Lamentablemente, el comportamiento de la variable Variant no ha cambiado en
absoluto. Yo creo que más que un problema de configuración de Date es un
asunto de un cambio en la programación del comportamiento de esa variable.
¿sería mucho pedir que revisaras y probaras este código?

Public Sub cambio()

Dim vtn800800 As Variant
Dim x As Integer

Sheets("Sheet1").Select
x = Range("A1").CurrentRegion.Rows.Count - 1
vtn800800 = Range(Cells(1, 1), Cells(x, 18)).Value
Sheets("sheet2").Select
Range(Cells(1, 1), Cells(x, 18)).Value = vtn800800

End Sub

Muchas gracias por adelantado,
EA

"Héctor Miguel" wrote:

hola, (...) ?

> Saben si el tipo de datos Variant ha sufrido alteraciones en Office 2003 con respecto a XP?
> Tengo resultados inesperados en el tratamiento de celdas en las que hay texto con apariencia de fechas.
> En 2003, si esa fecha es hasta 12/12/2007, la Variant devuelve una fecha de verdad (ya no texto)
> con formato mm/dd/yy (mis regionals settings son dd/mm/yy)
> a partir de 13/10/2007 la Variant devuelve el texto.
> En XP por el contrario la variant devuelve siempre fechas con formato el de mi regional settings.

1) (hasta donde se) VBA es "US-Centrc" y los datos de fechas solo los reconoce en el formato mm/dd/yy
(independientemente de lo que establezcas en la configuracion regional del panel de control de windows)

2) intercambiando en "mi" configuracion regional el formato de fechas entre dd/mm/aa <-> mm/dd/aa
y precediendo por un apostrofo entradas "como fecha" en [A1] '12/12/2007 y en [A2] '13/12/2007
el siguiente codigo devuelve que A2 contiene un "dato fecha" (y lo representa segun configuracion regional)
no importa la version de excel donde lo ejecute y (te confirmo) tampoco lo establecido en la configuracion regional

Sub Probando_datos_variant()
Dim Dato1 As Variant, Dato2 As Variant
Dato1 = [a1]
Dato2 = [a2]
MsgBox "Contenidos:" & vbTab & "Son fecha ?" & vbTab & _
"(conf reg)" & vbTab & "Fecha larga (conf reg)" & vbCr & _
Dato1 & vbTab & IsDate(Dato1) & vbTab & _
Format(Dato1, "short date") & vbTab & vbTab & Format(Dato1, "long date") & vbCr & _
Dato2 & vbTab & IsDate(Dato2) & vbTab & _
Format(Dato2, "short date") & vbTab & vbTab & Format(Dato2, "long date")
End Sub

3) como los imponderables al trabajar con fechas en VBA son mas de dos... (te sugiero)
es conveniente visitar la siguiente exposicion de manejos de fechas (de Stephen Bullen):
-> http://www.bmsltd.ie/ExcelProgRef/Ch22/default.htm

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



Respuesta Responder a este mensaje
#3 Héctor Miguel
17/11/2007 - 04:22 | Informe spam
hola (...) ?

con el codigo que expones y asumiendo que los datos del "CurrentRegion" son del tipo problematico
(textos con apariencia de fechas en formato diferente al us-centric de mm/dd/yyyy)
efectivamente hay un comportamiento (que pareciera) "bizarro", aunque no creo que se deba al tipo de datos Variant -?-

con el siguiente ejemplo de macro sucede tambien:

Sub Cambio_2()
Dim Filas As Integer, Cols As Byte
With Worksheets("sheet1").Range("a1")
Filas = .CurrentRegion.Rows.Count - 1
Cols = .CurrentRegion.Columns.Count
Worksheets("sheet2").Range("a1").Resize(Filas, Cols).Value = .Resize(Filas, Cols).Value
End With
End Sub

(probablemente) habra algo distinto en las caracteristicas configurables de la version 2003 -?-
voy a ver si encuentro algo de informacion al respecto ;)

saludos,
hector.

__ la consulta original __
... he encontrado los Language settings del Offcie y los he modificado en consonancia con lo expresado en el enlace.
Lamentablemente, el comportamiento de la variable Variant no ha cambiado en absoluto.
Yo creo que mas que un problema de configuracion de Date es un asunto de un cambio en la programacion
del comportamiento de esa variable. seria mucho pedir que revisaras y probaras este codigo?
Public Sub cambio()
Dim vtn800800 As Variant
Dim x As Integer
Sheets("Sheet1").Select
x = Range("A1").CurrentRegion.Rows.Count - 1
vtn800800 = Range(Cells(1, 1), Cells(x, 18)).Value
Sheets("sheet2").Select
Range(Cells(1, 1), Cells(x, 18)).Value = vtn800800
End Sub
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida