Macros...

Te cuento a grandes rasgos...
Necesito mediante una Macro hacer un programa automático que me coja un archivo txt de un directorio concreto, lo trate, y después lo grabe en excel..
Al tratarlo, me doy cuenta que tiene errores
Uno de ellos es que introducen saltos de línea donde no deberían...
Preguntando por aquí.. Me ayudaron a hacer una macro desde word que me solucionaba este problema, pero necesito hacerla desde excel..
Tengo el código de la macro en Word, pero necesito pasarlo a excel...
¿Podrías ayudarme?
Gracias de antemano

7 Respuestas

Respuesta
1
Que tal frodo bueno te dejo mi correo pásame el archivo y lo miramos haber que se puede hacer, lo que quieres hacer es básicamente manipular un array String y VBA tiene muchas funciones para hacerlo así que algo le buscaremos
correo [email protected]
También te cuento que se pueden trabajar con xml que genéricamente es lo mismo pero xml soporta una estructura de elementos preestablecidos y también que puedes generan vos, pero bueno esto es a titulo informativo
Bueno... Creo que estoy más cerca...
Lo tengo casi casi casi casi... jajaja
A ver de los 2 problemas que tengo uno esta solucionado y era facilísimo... con una grabadora de macro lo tengo hecho
Necesito sustituir el carácter "=" por un "." para que no me lo tome como una fórmula y se me lie en las celdas...
Cells.Replace What:="=", Replacement:=",", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Así se me soluciona éste problema...
Por otro lado para los saltos de línea lo tengo fácil... ya está pensado pero no sé programarlo...
Tdos mis registros deben comenzar por la palabra cours, puesto que es el id...
Entonces lo que hago es... a todos los saltos de linea tengo que sustituirlos por el carácter "|" ( que es mi separador... )
Y después... cada vez que m encuentre "|cours" pues introduzco un salto de linea y lo remplazo por "cours"
en word facil.... el codigo es asi
With Selection.Find
.Text = "^p"
.Replacement.Text = "|"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^p"
.Replacement.Text = "|"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Ahora bien... ¿Cuál es el carácter en Excel para buscar un salto de línea?
Porque "^p" no es...
Teniendo esto... zanjo mi problema...
Muchas gracias por contestar!
1 saludo
Como estas proba con el salto de página "\n" esto en algunos lenguajes es el salto de página si te sirve usalo.
Por lo demás a tu dispoción.
Respuesta
1
Ya te he contestado antes, intenta no duplicar/triplicar las preguntas.
Revisa la información que te pido.
Respuesta
1
Tendría que ver el código.
[email protected]
Respuesta
1
Si, pega el código de VBA de Word y lo modificamos p/ usarlo en VBA de Excel. Frodo debes cerrar el post anterior y continuar en este.
¿Qué post anterior?
No se cual dices, pues tengo bastantes...
Eso es lo que quiero, mi problema es... el salto de linea en Word es sencillo, le das a buscar pones ^p y te coge los saltos de linea y los puedes reemplazar por lo que quieras
En Excel no lo consigo hacer...
Un saludo y gracias por contestar
Trate de realizar una macro que controle el archivo abriéndolo como un doc de word, realizar el reemplazo y luego importar... PERO :-( no lo logre. Disculpa, busca ayuda en el tablón, te paso de igual manera el intento. Tal vez alguien pueda terminarlo, pero supero mis conoc, debo replantear ser un experto o solo solicitar ayuda. Éxitos y Saludos
Sub prueba()
'abre_arhivo()
Documents.Open Filename:="BSsc080814_VISA.TXT", ConfirmConversions:=False, _
ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", _
PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
WritePasswordTemplate:="", Format:=wdOpenFormatAuto, XMLTransform:="", _
Encoding:=1252
'debería buscar y reemplazar
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^p"
.Replacement.Text = ";" 'utilizo ; como separador
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
'grabar documento
ActiveDocument.Save
'Abrir la conexion desde excel - Importar datos
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;\\RUTA_NOMBRE_ARCHIVO.TXT" _
, Destination:=Range("A1"))
.Name = "NOMBRE_ARCHIVO"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 932
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 2, 2, 2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
Respuesta
1
Cuando pasas la información del archivo txt, en excel te deja saltos de página, en esas lineas de salto de página que información tienes... para pasarte el código que te elimine esas lineas y te ordene los registros..
Ya me lo ha resuelto otro experto de ahí...
No hay que eliminarlas, digamos que tenia...
1 2 3 4 5
1 2 3 4 5
1 2 3
4 5
1 2 3 4 5
Pues esa donde se hace el salto donde no debería habría que arreglarla..
Ahora te pregunto otra cosa...
Si quiero importar otro archivo ( aparte de éste ), mediante el cual luego tengo que hacer validaciones con el otro...
¿Cómo lo puedo importar en la hoja 2?
Un saludo y gracias
Este Código lo hace
Pégalo en el código de tu macro y cambiale las rutas de acuerdo como tu las tienes... yo realice el ejemplo con dos archivos .txt que tengo en mis documentos
Workbooks.OpenText Filename:= _
"C:\Documents and Settings\Compaq_Propietario\Mis documentos\Prueba1.txt", _
Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1))
Sheets.Add
Sheets("Prueba1").Select
Sheets("Prueba1").Move After:=Workbooks("Prueba.xls").Sheets(2)
Explicación:
Lo que ago yo es lo siguiente...
tengo dos archivos .txt
Prueba.txt
Prueba1.txt
Para abrir el primero habro excel y desde excel habro el archivo prueba
me lopone como hoja uno...
Ahora a tu pregunta
Desde ese archivo de excel la macro habré nuevamente excel y desde excel habré el archivo prueba1.txt
meló pone tambienen la hoja1
Hasta aquí tengo dos libros de excel abiertos
el primerocon prueba en hoja1 y el segundo con prueba1 también en hoja1
me ubico en el seguido archivo el que tiene prueba1 en hoja1, inserto una hoja nueva
activo la la hoja Prueba1
En la parte inferior del donde esta el titulo de la hoja le pones mover o copiar hoja, ella ventanita de arriba seleccionas el archivo donde tienes guardado el otro archivo y de esta manera tendrás en un solo archivo las dos hojas de los dos archivos txt en un solo archivo de excel.
¿Pero qué contiene tu archivo?
No es tan fácil...
El archivo que me pasan es más complejo, separador |, tabulaciones, etc
Me ha costado muchísimo sacarlo
Pero bueno, gracias por tu interés
Respuesta
Como te va disculpa la tardanza en contestarte, pues le pregunto ¿usted ha hecho el proceso manualmente?, pues si lo ha hecho le recomiendo que lo haga con el fin de que la grabadora de macros que dispone Excel le ayude con este proceso generando el código y asignándolo a un botón, si word le permite hacer dicho proceso Excel debe dejárselo hacer, ya que la hoja de calculo es más compatible con la base de datos que el procesador de palabra Word.
Éxitos
Respuesta
Necesitaría ver el código y un ejemplo del archivo para poder ayudarte disculpa la tardanza

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas