Foros del Web » Soporte técnico » Ofimática »

Funcion para asignar Caracteres a un Texto con V B

Estas en el tema de Funcion para asignar Caracteres a un Texto con V B en el foro de Ofimática en Foros del Web. Hola, que tal, queria saber si alguno me pueda dar una mano con dos problemitas que estoy teniendo, Les cuanto Tengo una planilla de excel ...
  #1 (permalink)  
Antiguo 22/02/2011, 19:42
 
Fecha de Ingreso: febrero-2011
Mensajes: 5
Antigüedad: 13 años, 9 meses
Puntos: 0
Funcion para asignar Caracteres a un Texto con V B

Hola, que tal, queria saber si alguno me pueda dar una mano con dos problemitas que estoy teniendo, Les cuanto

Tengo una planilla de excel a la cual tengo que llevar a .txt y la cual debe tener una formato determinano (no CSV)

1er Problemilla. Los campo de la planilla son 13, algunos numericos, otros textos y otros alfanumericos

A los campos numericos mediante la funcion numberformat les defini la cantidad de carecteres maximos que debe tener cada uno de esos campos, Ejemplo si la celda A1 dice 1, medianta la funcion numberformat = "0000", pasa a se 0001

Ahora el problema lo tengo con los campos de textos y con los alfanumericos

¿ Alguien me puede decir como solucionar esto?

2do problemilla,
Este archivo tiene que se un texto plano, sin tabulaciones, como hago para que una macro me elimine todas las tabulaciones y solo queden los espacios en blanco correspondientes ?

Gracias por vuesta ayuda
saludos
Mariano
  #2 (permalink)  
Antiguo 23/02/2011, 08:43
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 8 meses
Puntos: 88
De acuerdo Funcion para asignar Caracteres a un Texto con V B

Hola! Mariano
No está muy clara la descripción de tu problema... Por ejemplo:

--> ¿Función numberformat? ¿Habrás querido decir que a la celda le diste ese formato?
Si fuese así, te tengo malas noticias: esa acción no te servirá de nada pues el contenido de la celda sigue siendo el mismo.

--> Muchas veces los campos numéricos se guardan sin los dos decimales (se multiplican por 100): ¿También tienes esa situación?

--> Es probable que tanto los anteriores como los campos alfanuméricos, tengan asociada una longitud específica, ¿Por qué no mencionaste esa cuestión que es tan importante, si efectivamente es así?

--> Cuando hablas de eliminar tabulaciones, ¿a que tabulaciones te refieres?

Esperamos tus aclaraciones y, de preferencia, que brindes el enlace hacia algún archivo de muestra como para entender mejor tu dilema.

Saludos, Cacho.
  #3 (permalink)  
Antiguo 24/02/2011, 09:38
 
Fecha de Ingreso: febrero-2011
Mensajes: 5
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Funcion para asignar Caracteres a un Texto con V B

Hola, que tal !

Yo estoy ejecutando esta macro, la cual pasa de una planilla de excel a un TXT, el cual esta delimitado por tabulaciones, las cuales yo no quiero...

Hoy por hoy, estoy haciendo un reemplanzar de la tabulación por nada, para que me las pueda eliminar dentro del txt ... lo cual es muy lento y engorroso

Existe alguna función que me permita eliminar dichas tabulaciones, el codigo que estoy usando para armar el archivo es el siguiente

Sub Grabar_fichero_de_texto()
On Error Resume Next
Application.ScreenUpdating = False
ActiveSheet.Copy
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "0000000000"
Range("B1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "000000"
Range("C1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "00000000000000000000"
Range("D1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "00000"
Range("E1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "000000"
Range("F1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "00000000"
Range("G1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "00"
Range("H1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "00000000"
Range("I1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "000"
Range("J1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "0000"
Range("K1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "0000000000000"
Range("L1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "000"
Range("M1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "000"
fichero = ThisWorkbook.Name
ruta = ThisWorkbook.Path
fichero = Replace(fichero, ".xlsx", "")
fichero = Replace(fichero, ".xls", "")
ActiveSheet.Select
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=ruta & "\" & fichero & ".txt", FileFormat:=xlText
ActiveWorkbook.Close
Application.ScreenUpdating = True
End Sub



Gracias por la respuesta

Saludos

Mariano
  #4 (permalink)  
Antiguo 24/02/2011, 13:16
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 8 meses
Puntos: 88
De acuerdo Funcion para asignar Caracteres a un Texto con V B

O sea que las respuestas a mis re-preguntas son:

-> Si, quise decir "dar formato" (numberformat no es una función sino una propiedad)

-> No tienes campos numéricos que multiplicar por 100

-> Todos los campos numéricos tienen una longitud especificada

-> Las tabulaciones son del archivo de texto generado
________________________

Para evitar entrar en el problema de generar un archivo de texto con tabulaciones innecesarias, pues -simplemente- no lo generamos así.
Una alternativa sería (considero que tu BD tiene sólo 3 columnas):

Código PHP:
Sub Grabar_fichero_de_texto()
Dim misLongAs BytemiForm As StringFichero As String
misLong 
= Array(10620)
Application.ScreenUpdating False

With ThisWorkbook
  ActiveSheet
.Copy After:=.Sheets(.Sheets.Count)
End With
With Range
([a1], [a1].SpecialCells(xlCellTypeLastCell))
  .
Value = .Value
End With

For 0 To UBound(misLong)
miForm miForm "&Te(" _
  Cells
(11).Address(FalseFalse) & "," _
  CByte
(misLong(i)) & ")"
Next i
With Range
("AA1:AA" & [a1].End(xlDown).Row)
  .
Formula "=" Right(miFormLen(miForm) - 1)
  .
NumberFormat "@"
  
.Value = .Value
End With

[a:z].Delete
ActiveSheet
.Move

Fichero 
ThisWorkbook.FullName
Fichero 
Left(FicheroInStr(Fichero".") - 1) & ".txt"
If Dir(Fichero) <> "" Then Kill Fichero
ActiveWorkbook
.SaveAs Filename:=FicheroFileFormat:=xlText
ActiveWorkbook
.Close False

Application
.ScreenUpdating True
End Sub

Function Te(rng As RangeAs Byte)
Te Format(rngString(Q"0"))
End Function 
Como advierto que conoces del tema, será redundarte comentarte que el Variant "misLong" contiene las longitudes de los campos numéricos.
A tí te queda completar con las 10 restantes.

Además puedes constatar que para generar una sola columna con la información total, utilizo una función personalizada: "Te()".

¿Te sirve la idea?
Saludos, Cacho.

Última edición por mrocf; 24/02/2011 a las 13:22

Etiquetas: asignar, caracteres, funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:12.