|
|
|
Con Acentos Módulo para realiza búsquedas
con independencia de la acentuación. Lo mismo encuentra Fernández
que Fernandez. Llamando a la función desde una macro de teclado
funciona en cualquier formulario, subformulario u hoja de datos.
Puedes usarlo como una librería, registrándolo en
"Referencias", o importar módulo y macro. La forma más sencilla de usarlo es marcarlo como "Referencia" en el diseño del Módulo, en el Menú "Herramientas". A partir de ese momento, podemos llamar desde donde queramos a la funcion busca(repite), donde repite tiene valor verdadero o falso, indicando si es nueva búsqueda (true) o repetimos la anterior (false) Si importamos desde "Conacentos" la macro "AsignarTeclas" las teclas de función F3 y Mayúsculas+F3 se encargarán de llamar a la función busca(0) y busca(-1) con sólo pulsarlas en cualquier formulario, subformulario u hoja de datos. Comentaremos sólo las funciones más interesantes. Se plantean las siguientes cuestiones: Cómo saber en qué campo tenemos que buscar.Como saber si nos encontramos en un formulario, subformulario u hoja de datos.Cómo hacer que Access busque texto con independencia de los acentos. Es fácil, utilizamos el operador Like con corchetes "[]". La siguiente función sustituye cualquier cadena de texto por otra donde hemos sustituido cada vocal por unos corchetes con las distintas posibilidades de acentuación de esa vocal. Por ejemplo "o" lo sustituimos por "oóòöô0"; nótese que también hemos metido el cero, que suele confundirse, de manera que lo mismo podríamos hacer con cualquier letra con cualquier posible confusión.
Function Buscaacent(X) Dim i As Variant, A As Integer, l As Integer, busc As Variant Static letras(5) As Variant l = Len(X) busc = X A = 1 letras(1) = "AÁÀÂÄ" letras(2) = "EÉÈÊË" letras(3) = "IÍÌÎÏ" letras(4) = "OÓÒÔÖ0" letras(5) = "UÚÙÛÜ" While A <= l
Wend If busc = "" Then Buscaacent = X Else Buscaacent = busc End If ' J.Bengoechea End Function
saber en qué campo tenemos que buscar. En formularios y subformularios usaremos Screen.ActiveControl.Name para saber el nombre del campo, pero luego, para referirnos a él tendremos que hacerlo dentro de un Form o SubForm y necesitamos saber cuales son. En una hoja de datos el nombre del campo lo sabremos con Screen.ActiveDatasheet.Form.ActiveControl.Name, pero debemos cerciorarnos primero de que hay un Datasheet abierto o nos dará un error. La función Fbusca localiza si estamos en un Datasheet, un formulario o un subformulario y realiza distintas acciones dependiendo de ello para buscar el en RecordsetClone correspondiente y situarnos en el registro correspondiente. No la incluimos aquí porque hace llamadas a otras funciones y, por eso, es más fácil de seguir en la misma base de datos. Cómo saber si nos encontramos en un formulario, subformulario u hoja de datos. Lo de la hoja de datos es fácil, la función AbiertoDatasheet trata de abrir un objeto en el Screen.ActiveDatasheet y si da un error es que no hay hoja de datos abierta. Public Function AbiertoDatasheet () As Boolean
End Function
Screen.Activeform.name nos da el nombre del formulario activo, pero si estamos buscando en un Subformulario, el formulario activo sigue siendo el principal. Debemos, pues, averiguar en primer lugar si estamos en un subformulario y, en tal caso, el nombre del objeto que lo contiene. El procedimiento SubFrmActivo asciende desde el control activo buscando el .parent hasta encontrar uno que sea tipo formulario o subformulario y si es subformulario devuelve el nombre de éste y el del control que lo contiene.
Sub SubFrmActivo(Subf, cont) Dim micontrol As Control, vale As Boolean, Ctrl As Control, miform As String vale = False miform = Screen.ActiveForm.Name Set micontrol = Screen.ActiveControl Set Ctrl = Screen.ActiveControl While Not vale If EsFrmAbierto(micontrol.Parent.Name) Then vale = True Else
If 'ES un subformulario Subf = micontrol.Parent.Name vale = True Else Set micontrol = micontrol.Parent End If End If Wend 'Después de que hemos comprobado si el control activo está 'en un subformulario, recorremos el formulario 'principal 'buscando el control que contiene el subformulario
If Subf <> "" Then
End If
cont = micontrol.Name ' J.Bengoechea End Sub
J.Bengoechea, 01/03/06 |