Sustituir caracteres por saltos de linea

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
1
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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas