Discussion:
Llamar función VBA desde consulta
(demasiado antiguo para responder)
Fer
2004-06-28 12:31:01 UTC
Permalink
Hola a todos,
Aprendiendo el uso (o no uso) de CASE leí una exposición de Emilio en donde habla de crear una función en VBA y llamarla desde una consulta en lenguaje SQL. Alguién podría darme un ejemplo sencillo.
Desde ya muchas gracias. En particular a Eduardo, Emilio, Chea, Flashman y Victor
que me ayudaron con mi duda del sabado.
karlitox
2004-06-28 12:55:07 UTC
Permalink
Muy sencillo:

Por ejemplo:

Tenemos una función pública en un módulo

Public Function EsPCoCT(Tipo As Long) As String
Select Case NumPCoCT
Case 1
EsPCoCT = "PC"
Case 2
EsPCoCT = "CT"
Case 3
EsPCoCT = "MN"
Case 4
EsPCoCT = "OT"
Case Else
EsPCoCT = "--"
End Select
End Function

Ahora queremos hacer una consulta, incluyendo un campo [Tipo] que guarda un
valor numérico (entre 1 y 4). Cada valor codifica unas siglas, que son
precisamente las que descodifica la función del módulo.

Podemos crear un campo de la consulta que llame a la función:

TipoCliente: EsPCoCT([Tipo])

En el resultado de la consulta aparecerán los valores descodificados, esto
es "PC", "CT", ... etc, en lugar del código 1, 2, ... etc.

Saludos
Chea
2004-06-28 14:02:24 UTC
Permalink
Normalmente, llamas a una función para crear un campo calculado o para
establecer un criterio de filtrado. En el primer caso, debes crear una nueva
columna y en la primera fila, "Campo", pones el nombre que quieres que tenga
el campo calculado seguido de dos puntos y la función. Por ejemplo:

Campocalculado: Date()+1

Si en esa función debes tomar algún valor de otro campo de la consulta, no
olvides meterlo entre corchetes. Por ejemplo:

Campocalculado: Dateserial([año];[mes];[día])

No obstante, en el hilo anterior surgieron distintas propuestas y alguna,
por ejemplo la de Víctor, puede resultar mejor que usar una función
dependiendo de qué sea lo que realmente quieres hacer.
--
Saludos.

José Bengoechea Ibaceta [MS-MVP Access]
http://perso.wanadoo.es/j.bchea
Post by Fer
Hola a todos,
Aprendiendo el uso (o no uso) de CASE leí una
exposición de Emilio en donde habla de crear una función en VBA y llamarla
desde una consulta en lenguaje SQL. Alguién podría darme un ejemplo
sencillo.
Post by Fer
Desde ya muchas gracias. En particular a Eduardo, Emilio, Chea, Flashman y Victor
que me ayudaron con mi duda del sabado.
Flashman
2004-06-28 17:03:44 UTC
Permalink
Hola Fer.

PRIMERO: Creamos la función a medida con código VBA.
SEGUNDO: Invocamos la funcion anterior desde una SELECT, exactamente igual
a como lo hariamos con una función predefinida.

Por ejemplo:

La siguiente SELECT utiliza la función UCASE predefinida en VBA (pruebala)

SELECT Nombre, UCASE(Nombre) AS NombreMayuscula
FROM Clientes

Del mismo modo, puedes sustituir la función predefinida UCASE por otra
definida a medida por ti mismo:

SELECT Nombre, MiFuncionUCASE(Nombre) AS NombreMayuscula
FROM Clientes

Para ello deberas crear tu funcion MiFuncionUCASE en un módulo, de la
siguiente manera:

Public Function MiFuncionUCASE(ByVal cadena as string) as string
MiFuncionUCASE = Ucase(cadena)
End Function

Por supuesto, dentro de esta función puedes poner el codigo que quieras,
por ejemplo una estructura CASE como decias antes.

Procura que no sea un código muy complejo, ya que se ejecutara tantas
veces como registros devuelva tu consulta, y por tanto puede ralentizarla
mucho.

Muy importante: aunque parezca obvio, el principal error que cometemos en
estos casos es no declarar la funcion como Public. Si no es Public, la
Select no "reconocera" la función y por tanto dará un error.

Un saludo y no dudes en preguntar si te da problemas.
Flashman.
Post by Fer
Hola a todos,
Aprendiendo el uso (o no uso) de CASE leí una
exposición de Emilio en donde habla de crear una función en VBA y llamarla
desde una consulta en lenguaje SQL. Alguién podría darme un ejemplo sencillo.
Post by Fer
Desde ya muchas gracias. En particular a Eduardo, Emilio, Chea, Flashman y Victor
que me ayudaron con mi duda del sabado.
Loading...