Como buscar y reemplazar parte de una cadena de texto en vba access

Tengo una tabla con varios campos y quiero que en uno de ellos, llamado "curso", se reemplace parte del texto de cada registro por otro texto. Esto se tendría que hacer, como he dicho, en el campo "curso" y en todos los registros de la tabla.

Esta idea la hago de forma manual seleccionando toda la columna de la tabla y pulsando Ctrl+B, y luego reemplazar, pero lo que necesito es que se haga automáticamente desde vba access.

1 Respuesta

Respuesta
1

No dices lo que hay que reemplazar ni por lo que hay que sustituirlo. Si tengo una tabla

Y un formulario basado en esa tabla(da igual que sea único o continuo)

Si pulso el botón

En el botón le digo que cambie la cadena lem por 333. El código del botón es

Private Sub Comando7_Click()
DoCmd.GoToRecord , , acFirst
Dim i As Integer
For i = 1 To Me.Recordset.RecordCount
Pais = Replace([Pais], "lem", 333)
End Sub

Gracias Icue. La idea es justo la que has expuesto, pero no me funciona. Me da el error 2465 y me dice que Acces no encuentra el campo '|1' al que se hace referencia en la expresión:  Te doy más datos por si he omitido algo:

- El campo es [Curso].
- El código lo he puesto en el evento "Al salir" del Subformulario.
- La tabla está vinculada a un cuadro combinado para que haga de filtro y sólo muestre los alumnos de un determinado colegio. De todas formas, no me importa que revise la tabla completa.

El código que he metido en el evento "Al salir" es el siguiente:

Private Sub Subformulario_ficha_alumno_Exit(Cancel As Integer)
    DoCmd.GoToRecord , , acFirst
    Dim i As Integer
    For i = 1 To Me.Recordset.RecordCount
    Curso = replace([Curso], "duc.Prima.", "duc. Prima.")
    DoCmd.GoToRecord , , acNext
    Next
    DoCmd.GoToRecord , , acFirst
End Sub

He puesto el texto que se reemplaza en comillas porque si no me daba error.

Ese mensaje suele salir cuando se hace referencia a un control, que no se llama así. Habría que repasar en las propiedades de los controles, solapa Otras como se llaman realmente.

Por otro lado, para ser honesto, prácticamente a partir de " la tabla está vinculada..." no he entendido nada. Por eso, casi prefiero, que crees, si tienes la tabla anterior

Una consulta de actualización donde debajo del campo Paísen actualizar a: le pongo la expresión que ves en la ventana

Con lo cual la tabla te quedaría

Y en el evento Al salir del formulario sólo tendrías que poner

Docmd. Openquery"consulta1"

Esta segunda opción funciona perfectamente. Lo único que no me gusta es que me pide confirmación para realizar los cambios. ¿Hay alguna forma de evitar que me pregunte y haga los cambios de forma automática, sin pedir confirmación?

En relación a lo que dije antes y que quizás no expresé bien, lo voy a explicar bien poniendo la imagen del formulario:

Como se ve, en un formulario principal tengo una tabla llamada  "Config_datos". Uno de los campos de esta tabla se llama [Centro] y el contenido de este campo es el que aparece en el desplegable que está justo encima del subformulario

Pues bien, lo que hago es vincular este campo del desplegable con un campo del mismo nombre en el subformulario de abajo. De esta forma hago una especie de filtro para que en dicho subformulario se muestre sólo el colegio ([centro]) que selecciono en el desplegable de arriba.

Lo que no entiendo es por qué me da el error que te he comentado. Como se ve en el subformulario, el nombre del campo es [Curso], y en la propiedad "Otras", también se llama Curso.

En fin, te lo comento por si la primera respuesta que me diste fuese la única opción para evitar que Access me muestre la advertencia de que se va a cambiar todos los registros.

Por partes, en un formulario no puede haber ninguna tabla. Lo que tienes es un subformulario en vista hoja de datos.

Segundo, supongo que en el evento Después de actualizar del combinado Centro( al que supondré que sólo tiene una columna con Centro) tendrás puesto algo como

Me.nombredelformulario!nombredelsubformulario.form.recordsource="select  * from tablaorigendelsubform where centro='" & me.centro & "'"

De forma que cuando elijas un centro en el combinado, el origen de registros del subformulario serán aquellos registros de su tabla origen en que el valor de su campo Centro coincida con el que has elegido.

Para evitar la dichosa ventanita de aviso, o bien pulsas- Archivo-Opciones-Configuración de cliente- Confirmar y desmarca la casilla Consultas de acción. Yo lo tengo así pero no lo recomiendo. Es preferible que la instrucción la dejes como

Docmd.setwarnings false

Docmd. Openquery"consulta1"

Muchas gracias. El problema ya está solucionado.

En relación a lo del campo combinado, realmente el único código que tengo es, cuando cambia, que se ejecute Me.Refresh. Tan sólo he vículado el campo Centro del subformulario, con el campo Centro del combinado.

Así, cada vez que cambio el combinado se cambia los registros que se muestran en el  subformulario.

Sigo pillado con la primera solución que me gusta mucho y me puede venir muy bien para solucionar otro problema, pero como quizás sea otro tema diferente lo meteré en otra pregunta.

Muchas gracias de nuevo.

Cuando quieres que al elegir un valor en un combinado, te muestre sólo los registros relacionados por ese valor es preferible usar la función

Me. Rowsource

O si es un subformulario

Me.nombredelsubform.form.recordsource

Por ejemplo, voy a decirle que el formulario me muestre sólo aquellos registros de la tabla Clientes en que pais sea igual al valor que elijo en el combinado llamado Elegir

me.recordsource="select * from Clientes where pais='" & me.elegir & "'"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas