Hoy veremos un uso interesante de la función API de Windows FoldString para conseguir limpiar de tildes y otros signos nuestros textos.
Generaremos una función personalizada o UDF que hace uso de esa API, y así poder emplearla en nuestras celdas...
Para ello abrimos la ventana de código de nuestro módulo estándar y añadimos el siguiente código:
El resultado se observa en la imagen:
Comprobamos como ha eliminado los signos más frecuentes: tildes, diéresis o la virgulilla de la eñe...
Esta función API de Windows tiene cinco argumentos:
dwMapFlags: tipos de transformación
lpSrcStr: direcciona a la fuente de la cadena
cchSrc: tamaño de la cadena (en bytes o número de caracteres)
lpDestStr: direcciona al destino
cchDest: tamaño del destino (en bytes o número de caracteres).
siendo especialmente relevante el primero de ellos, donde identificamos el tipo de transformación. Pueden ser:
MAP_COMPOSITE: este asigna caracteres acentuados a caracteres compuestos (lo que necesitamos).
MAP_EXPAND_LIGATURES
MAP_FOLDCZONE
MAP_FOLDDIGITS
MAP_PRECOMPOSED
Generaremos una función personalizada o UDF que hace uso de esa API, y así poder emplearla en nuestras celdas...
Para ello abrimos la ventana de código de nuestro módulo estándar y añadimos el siguiente código:
Private Declare Function FoldString Lib "kernel32" Alias "FoldStringA" _ (ByVal dwMapFlags As Byte, _ ByVal lpSrcStr As Long, _ ByVal cchSrc As Long, _ ByVal lpDestStr As Long, _ ByVal cchDest As Long) As Long Private Const MAP_COMPOSITE As Long = &H40 ' Function NoTildes(Texto As String) As String Dim x As Integer 'generamos una cadena con un número de espacio igual al número de caracteres del texto NoTildes = Space(Len(Texto)) 'empleamos una función 'StrPtr' sin documentación 'que suele emplearse en ocasiones en nuestros proyectos de VBA 'cuando usamos ciertas funciones API 'sirven para obtener la dirección de memoria subyacente de las variables. For x = 0 To (Len(Texto) * 2 - 2) Step 2 'empleamos la API FoldString con sus cinco argumentos FoldString MAP_COMPOSITE, StrPtr(Texto) + x, 1, StrPtr(NoTildes) + x, 1 Next x End Function
El resultado se observa en la imagen:
Comprobamos como ha eliminado los signos más frecuentes: tildes, diéresis o la virgulilla de la eñe...
Esta función API de Windows tiene cinco argumentos:
dwMapFlags: tipos de transformación
lpSrcStr: direcciona a la fuente de la cadena
cchSrc: tamaño de la cadena (en bytes o número de caracteres)
lpDestStr: direcciona al destino
cchDest: tamaño del destino (en bytes o número de caracteres).
siendo especialmente relevante el primero de ellos, donde identificamos el tipo de transformación. Pueden ser:
MAP_COMPOSITE: este asigna caracteres acentuados a caracteres compuestos (lo que necesitamos).
MAP_EXPAND_LIGATURES
MAP_FOLDCZONE
MAP_FOLDDIGITS
MAP_PRECOMPOSED
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.