Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

VBA: La API FoldString o como eliminar tildes

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:

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


This post first appeared on EXCEL FORO: EJERCICIOS, EJEMPLOS, SOLUCIONES, DUDA, please read the originial post: here

Share the post

VBA: La API FoldString o como eliminar tildes

×

Subscribe to Excel Foro: Ejercicios, Ejemplos, Soluciones, Duda

Get updates delivered right to your inbox!

Thank you for your subscription

×