jueves, 5 de junio de 2014

VBA: Cambiar color de la fuente dentro de una celda...

Quizá te preguntes de qué voy a hablar hoy... El asunto es sencillo, mediante un procedimiento Sub vamos a conseguir cambiar el color de la fuente dentro de una celda, pero para caracteres específicos (NO para todos).
Se trata por tanto de conseguir 'remarcar' ciertos caracteres dentro de una celda. Y como una imagen vale más que mil palabras, este es el objetivo y resultado:



Probablemente la idea esté algo más clara ahora...

En un módulo cualquiera de nuestro proyecto de VBA insertamos el siguiente procedimiento:

Sub CambiaFuentePalabra()
'para palabras y Letras.
Dim Rng As Range, celda As Range, posicion As Integer
Dim palabra As String

'rango donde actuamos
Set Rng = Range("B1:B11")
On Error Resume Next
palabra = Application.InputBox(Prompt:="Introduce una palabra o letra", Title:="Para cambiar el color de la fuente de una palabra o letra", Type:=2)
'si se queda vacío salimos del proceso....
If palabra = "" Then Exit Sub

'realizamos la búsqueda para celda del rango
For Each celda In Rng
    'encontramos la posición donde comienza la palabra o letra
     posicion = InStr(1, celda, palabra, vbTextCompare)
        'lanzamos un bucle dentro de cada celda del rango
        'hasta que no encontremos nada
        Do Until posicion = 0
             'cambiamos la Fuente de la palabra o letra a color azul y negrita
             With celda.Characters(posicion, Len(palabra)).Font
                .Color = vbBlue
                .Bold = True
             End With
             'y seguimos buscando en la celda a partir de la última posición encontrada
             posicion = InStr(posicion + 1, celda, palabra, vbTextCompare)
        Loop
Next celda
End Sub



Vemos que el procedimiento es simple, nos pregunta el texto (palabra, letra o caracter) a buscar, y a continuación recorre celda por celda del rango dado (en mi caso B1:B11); y dentro de cada celda realiza un barrido de los caracteres mediante la función de VBA: InStr.

Esta función, bastante empleada, tiene la siguiente sintáxis:
InStr([inicio,] cadena1, cadena2[, comparación])
siendo los argumentos:
inicio (opcional): Expresión numérica que establece la posición inicial para cada búsqueda. Si se omite, la búsqueda comienza en la posición del primer carácter. Si inicio contiene un valor Null, se produce un error. El argumento inicio se requiere si se especifica 'comparación'.
cadena1 (obligatorio): Expresión de cadena en la que se busca.
cadena2 (obligatorio): Expresión de cadena buscada.
comparación (opcional): Especifica el tipo de comparación de cadena. Si compare es Null, ocurre un error. Si se omite 'comparación', el valor Option 'comparación' determina el tipo de comparación, que puede ser:
  1. vbUseCompareOption ó valor -1 := Realiza una comparación con los valores de la instrucción Option 'comparación'.
  2. vbBinaryCompare ó valor 0 := Realiza una comparación binaria.
  3. vbTextCompare o valor 1 := Realiza una comparación textual.
  4. vbDatabaseCompare ó valor 2 := Sólo para Microsoft Access. Realiza una comparación basada en la información en las bases de datos.

No hay comentarios:

Publicar un comentario en la entrada