
Entre tanto ingeniero, yo me considero un albañil de software. No soy informático ni de profesión ni de formación; soy funcionario, mi formación es humanística y soy autodidacta. Sin embargo tengo bastante oficio a base de mucha experiencia porque, durante años, Access ha sido mi gran amor, mi herramienta en el trabajo y mi secretaria.
Los campos Memo en Access 2007 ya no parecen tan memos. Ahora vienen con un par de características que les hacen más interesantes, entre las que destaca el soporte de formato de texto enriquecido. Un año después del lanzamiento de la versión 2007, esto ya no es novedad, pero aún cabe enredar un poco con ellos a ver si nos dan alguna sorpresa.
TextFormat en controles de texto
Ésta, que es la novedad más vistosa, no supone ningún cambio en el tipo de datos, sino que el mérito se lo lleva el nuevo control de texto que es capaz de manejar el "Rich text format". Los campos memos siguen guardando texto plano, pero dependiendo de cómo esté establecida la propiedad "Formato de texto", Textformat, mostrará el formato enriquecido o las etiquetas HTML de éste.
Es decir, si en el cuadro de texto TexFormat = acTextFormatHTMLRichText, podríamos ver algo así:

Pero, si en el cuadro de texto TexFormat = acTextFormatPlain, lo que veríamos sería:

Como la propiedad lo es del cuadro de texto, se aplica no sólo a los memos de 2007, sino también a los de versiones anteriores de Access. Si usamos el formato enriquecido con campos de un archivo en formato MDB desde Access 2007, se comportará igual que con un ACCDB, pero, si lo vemos desde una versión anterior de Access, por ejemplo, 2003, se mostrarían las etiquetas HTML.
TextFormat en campos memo
Pero no sólo los controles de texto tienen la propiedad "Formato de texto" o TexFormat, también la tienen los campos memo. A simple vista, da la impresión de que esto afecta de alguna manera a los datos, pero no es así, sigue siendo texto plano, con o sin etiquetas HTML. Bueno, en cierto modo sí que afecta a los datos: si en un memo con texto enriquecido cambiamos la propiedad TexFormat a acTextFormatPlain, desaparecerán de manera irreversible todas las etiquetas HTML, lo cual puede ser útil para hacerlo legible en versiones anteriores de Access, pero también puede cargarse accidentalmente todo el trabajo de presentación del texto, (así que los experimentos, mejor con gaseosa, o sea, haciendo copias antes).
Si mostramos los datos de la tabla y el formato de texto es enriquecido, se muestra como tal, dando la apariencia de que se ha guardado de una forma especial, pero si en una consulta o en un formulario, creamos un campo calculado cuyo origen sea = MiMemo, veremos que el contenido sigue siendo un archivo de texto con etiquetas HTML.
Al añadir un campo memo a un formulario o informe en modo diseño, el cuadro de texto hereda la propiedad TexFormat del campo, pero podemos cambiarle la propiedad a la contraria y, si no hay datos, ésta prevalecerá. Si existen datos, también prevalecerá la propiedad pero el resultado inmediato sobre los datos existentes seguramente será chocante, pues hay que tener en cuenta que las etiquetas HTML no dejan de ser texto y nos podemos encontrar con etiquetas HTML formando parte del texto formateado.
Resumiendo
1. La propiedad Formato de Texto en un campo memo en el diseño de la tabla sirve para determinar cómo se muestran los datos en la vista Hoja de Datos de la tabla y para ser heredada por los controles que tengan por origen ese campo.
2. La propiedad Formato de Texto en un cuadro de texto determina la forma en que se muestra éste.
3. No tiene por qué coincidir la propiedad TextFormat de un control con la de del campo memo del que dependa, aunque con datos existentes se pueden producir resultados chocantes.
Búsquedas con texto enriquecido
Si en el formato de texto enriquecido lo que se guarda en realidad es texto plano con etiquetas HTML ¿Cómo hacemos las búsquedas? Pues regular.
Desde la interfaz de usuario, en formularios y en vista hoja de datos de las tablas, la opción de búsqueda del menú funciona perfectamente, abstrayéndose del formato, pero si buscamos en un recordset, nos estaremos tropezando con las etiquetas HTML.
En un recordset, si tenemos en un campo "María", nunca lo vamos a encontrar buscando "María", porque el auténtico contenido es: ![]()
El método Application.PlainText nos va a ser de mucha utilidad, pues quita el formato de texto enriquecido y nos devuelve una cadena sin formato.
Busquemos usos distintos
Una forma muy sencilla de mostrar "etiquetas" en texto enriquecido es crearnos una tabla con un memo con formato enriquecido que editamos a nuestro gusto. Para el equivalente de una etiqueta podemos usar un campo calculado con un dLookUp() que busque el registro que queramos. Para que se comporte como una etiqueta, basta con poner las propiedades Bloqueado a Sí y Activado a No. Sustituir a un msgbox puede ser algo casi tan sencillo como eso o darle toda la complejidad que queramos.

Concatenando variables
Es muy frecuente concatenar campos o variables con cadenas de texto para mostrar los resultados en un informe o formulario. Podemos usar, por ejemplo:
= "Estimado Sr. " & [PrimerApellido] & ":"
Para obtener el resultado:
Estimado Sr. Fernández:
Pero nos faltaba una posibilidad sencilla de poder formatear ese campo calculado, por ejemplo, poner en negrilla el apellido. Cómo hemos visto que se trata de etiquetas HTML, basta con añadir éstas a la cadena para conseguir el resultado:
![]()
Y el resultado que obtendríamos sería:
Estimado Sr. Fernández
No hace falta saber HTML para hacer esto. Podemos crearnos un formulario auxiliar con dos cuadros de texto, uno con formato enriquecido y otro sin él cuyo origen sea el primero. Cualquier formato que demos en el primer cuadro, se reflejará en código en el segundo. Sólo hay que copiar y pegar, teniendo en cuenta que
son las marcas de inicio y fin de párrafo y que puede que no necesitemos.


Aún así sigue siendo pesado, de manera que tendremos que ingeniarnos una herramienta distinta. Son sólo tres pasos:
1. Nos creamos una tabla con un campo de Formato, de texto, y otro Muestra, memo, y un formulario para editarla en el que al campo Muestra le ponemos como valor predeterminado, "Muestra" y como Formato de texto, "Texto enriquecido".

2. Le damos a Muestra los formatos que queramos y en Formato ponemos un texto descriptivo para después localizar el formato.
3. Nos creamos una función que busque Formato, lea el contenido de Muestra y en él sustituya la palabra "Muestra" por el contenido que queremos formatear
Public Function FormatoHtml(Cadena As String, Formato As String) As String
Dim vTmp As Variant, sTmp As String
vTmp = DLookup("Muestra", "LocalFormatos", "Formato = '" & Formato & "'")
If Not IsNull(vTmp) Then
sTmp = vTmp
sTmp = Replace(sTmp, "", "")
sTmp = Replace(sTmp, "", "") 'Quitamos las marcas de párrafo que nos sobran
sTmp = Replace(sTmp, "Muestra", Cadena) 'Cambiamos el texto Muestra por nuestra cadena
Else
sTmp = Cadena 'Si no encontramos el formato, devolvemos la cadena sin formato
End If
FormatoHtml = sTmp
End Function
Probando en la ventana de inmediato, tendríamos:
De la misma manera, en el primer ejemplo, podríamos poner algo así:
="Estimado Sr. " & FormatoHtml([PrimerApellido];"negrita") & ":"
y el resultado sería:
Estimado Sr. Fernández:
Ahora le toca jugar a cada uno.
Evidentemente, la función es un apaño que tendríamos que mejorar. Un DLookUp () en cada registro de una consulta, bajaría notablemente el rendimiento; en su lugar podríamos cargar la tabla de formatos en una matriz o en un objeto Dictionary y buscar ahí.
También nos podría interesar una composición más compleja abriendo y cerrando formatos. Nos seguiría valiendo la misma tabla y la misma búsqueda; haciendo un Split() del resultado usando como separador la palabra "Muestra", tendríamos en el primer elemento de la matriz resultante las etiquetas de apertura, y en el segundo, las de cierre.
Se le puede sacar mucho partido al nuevo formato de los campos Memo. Es cosa de pasarse un rato jugando con ellos y viendo posibilidades.
Página del autor: http://jbengoechea.com/ y http://jbchea.net