Excel - código VBA

 
Vista:

código VBA

Publicado por pelukyn (3 intervenciones) el 29/08/2006 12:57:46
Buenos días.

He hecho una macro que guarda un fichero .xls a .txt, el problema que tengo es que me convierte las comas de las celdas que contienen valores numéricos en puntos, ejemplo: 23,4 ->24.3, he provado a guardar en diferentes códigos como ASCII, UTF-8, ISO occidental, etc y me sigue pasando lo mismo.
Otra posibilidad que he probado fue convertir los valores de la celda como una cadena de caracteres entonces en el .txt aparecen unas comillas entre los valores numéricos, ejemplo:
23,4->"23,4"

Aquí pongo una porción del código principal:

wb_temporal.SaveAs Filename:=ThisWorkbook.Path & "\" & nombre_fichero_temp & ".txt", FileFormat:= _xlText, CreateBackup:=False

¿Alquien sabe como pasar de .xls a .txt y no realize el cambio de comas por puntos?

Gracias y un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:código VBA

Publicado por José Luis (700 intervenciones) el 30/08/2006 09:45:37
¿Has probado a poner formato número a la celda, P.ej. 2 decimales, separador de miles, etc?

Otra solución es que hagas una grabación del fichero txt directamente por código (como se hacía antes en Basic ...) Open namefile for output as #1 etc etc.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:código VBA

Publicado por pelukyn (3 intervenciones) el 30/08/2006 10:16:38
Hola Jose Luis.

Gracias por contestar, la solución que me dió un compañero de trabajo (J.P.) coincidió con tu idea. Adjunto el código:

Dim strContenido As String

'Se abre el fichero para lectura
Open ThisWorkbook.Path & "\" & nombre_fichero_temp & ".txt" For Input As #1
'Recogemos el contenido del fichero
strContenido = Input(LOF(1), #1)
'Cerramos fichero
Close #1

'Reemplazamos el punto por la coma.
strContenido = Replace(strContenido, ".", ",")

'Se abre el fichero para escritura
Open ThisWorkbook.Path & "\" & nombre_fichero_temp & ".txt" For Output As #1
'Escribimos en el fichero
Print #1, strContenido
Close #1

Solo una pequeña duda y es conecer el tamaño de la variable tipo string por si el fichero fuera de dimensiones grandes....

Un saludo y gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:código VBA

Publicado por José Luis (700 intervenciones) el 30/08/2006 12:23:36
Habitualmente no realizo una lectura completa del fichero sino línea a línea o registro a registro.
Abre un segundo fichero y vas grabando uno a uno los registros.

LOF(#) te da el largo de todo el fichero, es un poco arriesgado hacer lo todo de una vez porque podrías tener problemas de memoria, si es muy grande.

EOF(#) te da el aviso de fin del fichero.

Mira esto
'----------------------------------------------------------------------------------
'Se abre el fichero para lectura
Open ThisWorkbook.Path & "\" & nombre_fichero_temp & ".txt" For Input As #1
'Se abre el fichero de escrituta
Open ThisWorkbook.Path & "\" & nombre_fichero_temp & ".out" For Output As #2

'Recogemos el contenido del fichero y grabamos en el otro fichero
While not(eof(1))
Line Input #1,strContenido
strContenido = Replace(strContenido, ".", ",")
print #2,strContenido
Wend
'Cerramos ficheros
Close

'Borrar el fichero original
Kill ThisWorkbook.Path & "\" & nombre_fichero_temp & ".txt"

'Renombrar el fichero
Name ThisWorkbook.Path & "\" & nombre_fichero_temp & ".out" as _ ThisWorkbook.Path & "\" & nombre_fichero_temp & ".txt"
'-----------------------------------------------------------------------------

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:código VBA

Publicado por pelukyn (3 intervenciones) el 31/08/2006 09:29:36
José Luis!

Gracias nuevamente. te comento que hay que realizar una pequeña correción (as _) a tu código, adjunto código corregido:

Name ThisWorkbook.Path & "\" & nombre_fichero_temp & ".out" As ThisWorkbook.Path & "\" & nombre_fichero_temp & ".txt"

Al final he ralizado una condicional en funcion del valor devuelto (número de bytes) por la lectura del primer fichero LOF(1), si es menor de 65000 bytes entonces aplico el método propuesto para tratar el fichero de una sola vez, si es mayor o igual a 65000 entonces aplico el método línea a línea, con el fin que la máquina ejecute el proceso lo más rápidamente posible.

Gracias y un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:código VBA

Publicado por José Luis (700 intervenciones) el 31/08/2006 23:04:56
Me alegro que te haya funcionado.
Respecto a la corrección, es debido al truncaniento de la línea al pegar el código en post, tuve que poner el " _ " tal como lo hace VBA para poner en dos o más líneas lo que no cabe en una única línea.

Hasta otra.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar