Añadir Signos automáticamente al final del texto

Tengo una serie de controles en un formulario a los que me gustaría añadir automáticamene con código vba un signo concreto que sería ";" sin necesidad de escribirlo.

Ejemplo:

Si relleno un control "Autor" con el texto "Gabriel García Márquez" debería aparecer

Gabriel García Márquez;

Es decir el texto que escribo y el ";"

Los controles donde quiero que aparezca el ";" al final del texto que escribo, son:

"AUTOR", "TITULO", "IDIOMA" del formulario "FLibros"

Nota:

Como ya tengo muchos registros rellenados, el código a usar debería poner ";" tanto en los registros ya rellenados del formulario como en los que vaya a rellenar de ahora en adelante.

Había pensado que tal vez con una función podría hacerlo, no sé ...

1 respuesta

Respuesta
1

Puedes programar el evento "Después de actualizar" de cada uno de esos campos, para que compruebe si acaba en ";" y en caso de que no, lo añada.

Por ejemplo, para el campo autor:

Private Sub Autor_AfterUpdate()

If Right(Me.Autor,1)<>";" Then Me.Autor=Me.Autor & ";"

End Sub

Y así con el resto.

Para que te actualice los registros existentes, puedes hacer una consulta de actualización para añadir el ";" a los campos que no lo tengan, por ejemplo, ara el campo autor:
UPDATE TLibros SET Autor= [Autor] & ";"
WHERE ((Right([Autor],1)<>";"));

Otra alternativa sería poner un botón, actualizar todos los registros por medio de un recordset, y luego borrar el botón. El código sería algo así:

Dim rst as DAO.Recordset

rst.MoveFirst

Do Until rst.EOF

rst.Edit

If Right(rst("Autor"),1)<>";" Then rst("Autor")=rst("Autor") & ";"

If Right(rst("Titulo"),1)<>";" Then rst("Titulo")=rst("Titulo") & ";"

If Right(rst("Idioma"),1)<>";" Then rst("Idioma")=rst("Idioma") & ";"

rst.Update

rst.MoveNext

Loop

Para los nuevos registros el código vba que me detallas para el evento "Después de actualizar" funciona perfectamente.

En cuanto a lo del botón, me parece una buena idea pero me indica el siguiente error.

"se ha producido el error "91" en tiempo de ejecución.

Variable de objeto o bloque with no establecido"

Lo que hice fue poner el código tal cual que indicas, en un botón en evento "al hacer clic" pero aparece este error y me subraya en amarillo "rst.MoveFirst".

Uso access 2003 por si tiene algo que ver.

Por cierto cómo podría mandarte las preguntas  a ti particularmente como experto, además de ponerlas en público, creo que se puede incluir enviárselas a un experto además, pero no conozco la forma para enviártelas a ti también. Creo que aparece en tu caso "experto no disponible". Si me puedes indicar...

Ya me cuentas y un saludo.

Sí, disculpa, se me pasó ponerte una línea que es fundamental...:

Dim rst as DAO.Recordset

Set rst=CurrentDb.OpenRecordset("TLibros")

rst.MoveFirst

Do Until rst.EOF

rst.Edit

If Right(rst("Autor"),1)<>";" Then rst("Autor")=rst("Autor") & ";"

If Right(rst("Titulo"),1)<>";" Then rst("Titulo")=rst("Titulo") & ";"

If Right(rst("Idioma"),1)<>";" Then rst("Idioma")=rst("Idioma") & ";"

rst.Update

rst.MoveNext

Loop

La linea que faltaba es la segunda, la que está en cursiva. Lo que está en negrita es el nombre de la tabla, que tendrás que poner el que tu tienes si no es ese.

Mientras tenga el estado "no disponible" (y aún lo mantendré un tiempo, por problemas de tiempo) no me puedes hacer directamente una pregunta. Lo que sí, puedes hacerla en el tablón y luego recomendármela, que viene a ser parecido.

Genial, ahora funciona perfectamente, muchas gracias.

Sobre el "tablón" te refieres a enviarla "públicamente" y lo de "recomendármela" te refieres a seleccionar "compartir" que aparece en la esquina inferior derecha de la pregunta. Perdona es que no conozco muy bien la nueve interfaz de Todoexpertos.

En todo caso te quería pedir un favor más... Hay una pregunta que he puesto en la web, que necesitaría tu ayuda para resolverla. Se trata de ver si con código o de alguna otra manera puedo situar cuadros de texto en determinadas posiciones, por ejemplo si tengo 3 cuadros de texto, situar el segundo donde finaliza el primero (en cuanto a su longitud) y situar el tercero donde finaliza el segundo. Todos estarían a la misma altura pero en distinta posición determinada por la posición final del anterior cuadro de texto.

El problema es que esos cuadros de texto se autoajustan mediante un código, a lo que escribo, o sea tienen el tamaño en función del texto insertado, por eso no puedo determinar "a priori", una posición exacta de cada cuadro de texto, en propiedades, porque el tamaño se justifica, se autoajusta al meter los datos, no es fijo.

Me gustaría si fuera posible con código o de alguna manera, que sabiendo por ejemplo que el textbox2 se posiciona a la derecha, al final del textbox1... si habría alguna forma de  automatizar la posición teniendo en cuenta que uno empieza donde acaban el otro.

La pregunta en la que necesito tu ayuda se llama "Posición de cuadro de texto en función de otro" hecha por "Deprofundis", el 26 de Mayo.

Ya me indicas si cierro esta pregunta y me contestas si pudieras a lo último en el otro tema del 26 de Mayo o lo haces aquí mismo.

Te rogaría que me pudieras dar alguna solución a esta pregunta porque estoy un poco desesperado la verdad.

Gracias por tu ayuda y tu paciencia.

Sí, me refería a eso (antes las preguntas se publicaban en el llamado "tablón"). Creo que tienes en la parte inferior de tu pregunta un icono de una rueda dentada, con la opción de "preguntar a más expertos". Me parece que esa es la opción para recomendar (no hice ninguna pregunta con la nueva interfaz y no estoy 100% seguro). Si no, puedes intentarlo con la opción de compartir que comentas.

La otra pregunta ya la había visto, y medio se me ocurrió algo, pero aún no tuve tempo de probarlo y no sé si funcionará. Finaliza y valora esta respuesta, que ya quedó lista, y si logro algo ya te contesto en la otra.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas