Problemas con comas y puntos al guardar de excel a un archivo txt mediante VB

08/02/2008 - 14:40 por Mclaud | Informe spam
Saludos,

Hemos creado una macro para poder procesar rapidamente unos archivos
de texto tabulado mediante espacios. Contienen varias columnas de
números, en las que los decimales están marcados por comas. El codigo
que utilizamos para abrir los documentos es el siguiente:

Workbooks.OpenText Filename:= _
"c\origen.txt"_
, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited,
TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True,
Semicolon:=False, _
Comma:=False, Space:=True, Other:=False,
FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6,
1), Array(7, 1), Array(8, 1), _
Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1),
Array(13, 1)), _
DecimalSeparator:=",", ThousandsSeparator:=".",
TrailingMinusNumbers:=True

A continuación realizamos varias operaciones de borrado de columnas,
nunca tocamos los números en si. Finalmente guardamos lo realizado
mediante el siguiente codigo.

ActiveWorkbook.SaveAs Filename:="c\prueba.txt",
FileFormat:=xlText, CreateBackup:=False

La macro corre perfectamente, realizando las operaciones esperadas y
guardando lo obtenido. El problema está en que al guardar el archivo
como txt convierte las comas que señalan los decimales en puntos.
Curiosamente, si detenemos la macro justo antes de guardar el archivo
y lo hacemos manualmente SÍ que guarda las comas correctamente.

Hemos comprobado que la configuración regional del Excel y del equipo
es la correcta. También se ha usado la macro en otros ordenadores, sin
que cambie el problema.

Dado que tenemos que trabajar con muchos archivos no se hace práctico
entrar a sustituir el punto por la coma mediante el block de notas.

¿Alguien tiene idea de donde puede estar produciendose el error?.

Muchas gracias.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
08/02/2008 - 23:33 | Informe spam
hola, !

dado que las acciones por vba son (generalmente) usando convencionalismos US-Centric (fechas, separdores, etc.)
prueba cambiando el tipo de archivo en la salida al grabarlo (p.e.) a: FileFormat:=xlTextPrinter

hay mas tipos de formatos para vba, consulta en la ayuda en linea {F1} por si necesitaras probar con mas de uno -?-

saludos,
hector.

__ la consulta original __
Hemos creado una macro para poder procesar rapidamente unos archivos de texto tabulado mediante espacios.
Contienen varias columnas de numeros, en las que los decimales estan marcados por comas.
El codigo que utilizamos para abrir los documentos es el siguiente:
Workbooks.OpenText Filename:= _
"c\origen.txt"_
, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1)), _
DecimalSeparator:=",", ThousandsSeparator:=".", TrailingMinusNumbers:=True
A continuación realizamos varias operaciones de borrado de columnas, nunca tocamos los numeros en si.
Finalmente guardamos lo realizado mediante el siguiente codigo.
ActiveWorkbook.SaveAs Filename:="c\prueba.txt", FileFormat:=xlText, CreateBackup:=False
La macro corre perfectamente, realizando las operaciones esperadas y guardando lo obtenido.
El problema esta en que al guardar el archivo como txt convierte las comas que senalan los decimales en puntos.
Curiosamente, si detenemos la macro justo antes de guardar el archivo y lo hacemos manualmente SI que guarda las comas correctamente.
Hemos comprobado que la configuracion regional del Excel y del equipo es la correcta.
Tambien se ha usado la macro en otros ordenadores, sin que cambie el problema.
Dado que tenemos que trabajar con muchos archivos no se hace practico entrar a sustituir el punto por la coma mediante el block de notas.
Alguien tiene idea de donde puede estar produciendose el error?.
Respuesta Responder a este mensaje
#2 Mclaud
09/02/2008 - 09:12 | Informe spam
En su momento ya probamos con distintos tipos de FileFormat, incluido
el que me dices, y siempre se exportaba el archivo cambiando las comas
por puntos.

Gracias en cualquier caso.

On 8 feb, 23:33, "Héctor Miguel"
wrote:
hola, !

dado que las acciones por vba son (generalmente) usando convencionalismos US-Centric (fechas, separdores, etc.)
prueba cambiando el tipo de archivo en la salida al grabarlo (p.e.) a: FileFormat:=xlTextPrinter

hay mas tipos de formatos para vba, consulta en la ayuda en linea {F1} por si necesitaras probar con mas de uno -?-

saludos,
hector.
Respuesta Responder a este mensaje
#3 Héctor Miguel
09/02/2008 - 22:37 | Informe spam
hola, !

En su momento ya probamos con distintos tipos de FileFormat, incluido el que me dices
y siempre se exportaba el archivo cambiando las comas por puntos.



otra (posible) alternativa es que le agregues al metodo "SaveAs" el argumento "Local" establecido en "True"
asumiendo que usas excel 2002 en adelante (por lo del "TrailingMinusNumbers" del metodo "OpenText") -?-

o sea, cambia la instruccion con la que haces el guardarcomo +/- asi:

de: ActiveWorkbook.SaveAs Filename:="c\prueba.txt", FileFormat:=xlText, CreateBackup:=False
a: ActiveWorkbook.SaveAs Filename:="c\prueba.txt", FileFormat:=xlText, CreateBackup:=False, Local:=True

saludos,
hector.
Respuesta Responder a este mensaje
#4 Mclaud
10/02/2008 - 13:24 | Informe spam
Acabo de probarlo y funciona.

Muchas gracias por la ayuda.

On 9 feb, 22:37, "Héctor Miguel"
wrote:
hola, !

> En su momento ya probamos con distintos tipos de FileFormat, incluido el que me dices
> y siempre se exportaba el archivo cambiando las comas por puntos.

otra (posible) alternativa es que le agregues al metodo "SaveAs" el argumento "Local" establecido en "True"
asumiendo que usas excel 2002 en adelante (por lo del "TrailingMinusNumbers" del metodo "OpenText") -?-

o sea, cambia la instruccion con la que haces el guardarcomo +/- asi:

de: ActiveWorkbook.SaveAs Filename:="c\prueba.txt", FileFormat:=xlText, CreateBackup:=False
a: ActiveWorkbook.SaveAs Filename:="c\prueba.txt", FileFormat:=xlText, CreateBackup:=False, Local:=True

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