No tengo ni idea de VB, y necesito reemplazar un texto (, ) en campos memo de una base por salto de linea, y hacerlo de forma masiva. Buscar y reemplazar no hay problema. El problema es como introducir el salto de linea en la casilla "Reemplazar por". Tengo access 2003.
1 respuesta
Respuesta de Neckkito Nck
1
1
Neckkito Nck, Access... ser o no ser. Esa es la cuestión
Lo que me pides no es lo que se dice "sencillo". Más bien yo diría que tiene un planteamiento bastante complicado. Ni que decir tiene que a través de buscar y reemplazar es imposible hacer lo que comentas. Si se puede hacer se tendría que hacer a través de código VBA. La verdad es que no puedo comprometerme a darte una respuesta, y menos una respuesta rápida. Lo que sí puedo decirte es que en cuanto tenga un momento le daré un par de vueltas a ver si te puedo dar una solución. De una manera u otra te diré si sé cómo hacerlo o no. Sí te agradecería que me indicaras claramente cuál es el texto que se debe reemplazar por salto de línea. Según lo que comentas, ese texto es "paréntesis apertura-coma-espacio-paréntesis cierre". ¿Me lo podrías confirmar? Bueno. Ya me dirás cosas.
Gracias por tu rápida contestación. Pensaba que había algún carácter de estos raros que sustituía en access al salto de línea y que era más fácil. La cadena de caracteres a sustituir es coma seguido de espacio ", " y sería sustituirla por salto de línea. Un saludo y gracias nuevamente.
Te explico cómo podrías hacerlo. Pero antes, y lo más importante, haz la prueba en una copia de tu BD. Como vamos a modificar registros, si la cosa no sale bien y no tienes copia de seguridad, te podrías tirar de los pelos ;) El proceso pilla todo lo que sea -coma, espacio- y lo convierte en salto de línea, tal y como me comentabas :) Te explico los pasos a seguir: - Crea un formulario en blanco - Crea, en ese formulario, un botón de comando. Le das con el botón derecho del ratón y marcas la opción generar evento. - En la pantalla que te sale tienes que copiar y pegar el siguiente código que te paso. Tendrás que modificar algunas cosillas, que te marco en negrita, por los nombres que tú tengas en tu BD. Las equivalencias son: ... Tabla1 -> Debes poner el nombre de la tabla que contiene ese campo memo que quieres modificar ... Memo -> Debes poner el nombre del campo memo que contiene los datos a modificar El código es el siguiente: --- Private Sub Comando0_Click() Dim valorMemo, nuevoMemo As String Dim longMemo, newLongMemo As Long Dim carTrozo As String Dim findMarca As String Dim i, y As Integer Dim trozo As String Dim hayMarca As Boolean Dim dbs As DAO.Database Dim rst As DAO.Recordset 'Asignamos valores inicales a algunas variables nuevoMemo = "" y = 1 hayMarca = False 'Creamos el recordset Set dbs = CurrentDb Set rst = dbs.OpenRecordset("Tabla1", dbOpenTable) 'Situamos el puntero en el primer registro rst.MoveFirst 'Vamos recorriendo los registros uno a uno, realizando 'los cambios pertinentes, si fueran necesarios Do Until rst.EOF 'Asignamos valores a las variables valorMemo = rst.Fields("Memo").Value longMemo = Len(valorMemo) newLongMemo = longMemo For i = 1 To longMemo Step 1 'Miramos los caracteres uno a uno carTrozo = Mid(valorMemo, y, 1) 'Si encontramos una coma... If carTrozo = "," Then 'Miramos si es la marca findMarca = Mid(valorMemo, y, 2) 'Si es la marca (coma-espacio) If findMarca = ", " Then hayMarca = True 'Cogemos el trozo hasta la marca trozo = Left(valorMemo, y - 1) 'Creamos ese valor como nuevoMemo, y si 'hay varios los va añadiendo con salto de 'línea nuevoMemo = nuevoMemo & trozo & vbCrLf 'Determinamos que el valor a analizar sea 'ahora el resto de la frase, a partir del 'espacio de la marca valorMemo = Right(valorMemo, newLongMemo - y - 1) newLongMemo = Len(valorMemo) 'Reiniciamos el contador de caracteres y = 0 End If End If y = y + 1 Next i 'Si hay marca If hayMarca = True Then 'Une la frase que llevaba creada con lo que quedaba 'de frase original nuevoMemo = nuevoMemo & valorMemo ' Asigna el valor obtenido al campo memo rst.Edit rst.Fields("Memo").Value = nuevoMemo rst.Update End If 'Reiniciamos las variables y = 1 hayMarca = False nuevoMemo = "" carTrozo = "" 'Nos movemos al siguiente registro rst.MoveNext Loop 'Establecemos un mensaje para saber que ha finalizado el proceso MsgBox "Proceso finalizado" 'Cerramos conexiones y liberamos memoria rst.Close dbs.Close Set rst = Nothing Set dbs = Nothing End Sub --- Y eso es todo. Ya me dirás si te ha funcionado bien