Llamar función desde consulta selección Access

Recurro a ustedes porque ya no se ni donde buscar. Tengo un Access en donde registro análisis de calidad de cereales. Pero necesito emitir un informe diario de los mismos. Para ello procedí a realizar una consulta de selección y sobre esta consulta realizar el informe. Pero necesito agregar una columna adicional y que la misma realice un calculo sobre los valores de las columnas anteriores. Como es un calculo complejo (muchas sentencias if) procedí a realizar un modulo en VBA. Pero no logro llamar a este modulo desde la consulta de ACCESS.

Este es el código:

Public Function calcularFactorSoja(tierra As Double, materiaExtraña As Double, gPartido As Double, gDañado As Double, gAveria As Double, verdes As Double, olor As Double, revolcadoTierra As Double, amohosado As Double, otros As Double) As Double

Dim TIERRA2 As Double
Dim MATERIAEXTRAÑA1 As Double
Dim MATERIAEXTRAÑA2 As Double
Dim QUEBRADO2 As Double
Dim DAÑADOYAVERIA As Double
Dim VERDES2 As Double
Dim FACTORR As Double

If (tierra > 0.5) Then
TIERRA2 = (tierra - 0.5) * 1.5
Else
TIERRA2 = 0
End If
If (tierra <= 0.5) Then
MATERIAEXTRAÑA1 = (materiaExtraña + tierra)
Else
MATERIAEXTRAÑA1 = (materiaExtraña + 0.5)
End If
If (MATERIAEXTRAÑA1 <= 1) Then
MATERIAEXTRAÑA2 = 0
ElseIf (MATERIAEXTRAÑA1 > 1 And MATERIAEXTRAÑA1 <= 3) Then
MATERIAEXTRAÑA2 = (MATERIAEXTRAÑA1 - 1)
ElseIf (MATERIAEXTRAÑA1 > 3) Then
MATERIAEXTRAÑA2 = (((MATERIAEXTRAÑA1 - 3) * 1.5) + 2)
End If
If (gPartido <= 20) Then
QUEBRADO2 = 0
ElseIf (gPartido > 20 And gPartido <= 25) Then
QUEBRADO2 = ((gPartido - 20) * 0.25)
ElseIf (gPartido > 25 And gPartido <= 30) Then
QUEBRADO2 = (((gPartido - 25) * 0.5) + 1.25)
ElseIf (gPartido > 30) Then
QUEBRADO2 = (((gPartido - 30) * 0.5) + 3.75)
End If
If (gDañado <= 5 And gAveria <= 1) Then
DAÑADOYAVERIA = 0
ElseIf (gDañado > 5 And gAveria <= 1) Then
DAÑADOYAVERIA = ((gDañado + gAveria - 5) * 0.5)
ElseIf (gDañado > 5 And gAveria > 1) Then
DAÑADOSYAVERIA = ((gDañado + gAveria - 5) * 0.5)
ElseIf (gDañado <= 5 And gAveria > 1 And (gDañado + gAveria) > 5) Then
DAÑADOSYAVERIA = ((gDañado + gAveria - 5) * 0.5)
Else
DAÑADOSYAVERIA = (gAveria - 1)
End If
If (verdes > 20) Then
VERDES2 = ((verdes - 20) * 0.5)
Else
VERDES2 = 0
End If
FACTORR = 100 - (MATERIAEXTRAÑAS2 + TIERRA2 + QUEBRADO2 + DAÑADOSYAVERIA + VERDES2 + olor + revolcadoTierra + amohosado + otros)
calcularFactorSoja = FACTORR

End Function

No es un código complejo, pero no se como llamarlo en la consulta ACCESS

1 respuesta

Respuesta
1

De acuerdo con la imagen no veo que le pase los parámetros a la función, si no estoy mal son 9.

Así como lo tiene en la cuadricula pero algo como:

Factor:calcularFactorSoja ([campo1];[campo2];[campo3];[campo4];[campo5];[campo6];[campo7];[campo8];[campo9])

En donde son los respectivos parámetros que recibe la función, de acuerdo con la función todos son requeridos, no hay opcioanales.

Eduardo, muchísimas gracias por su respuesta. 

Ya había probado pasando parámetros pero también me daba errores. Le muestro lo que me arroja al ejecutar la consulta:

Que otra cosa podría ser? 

Si quiere envíeme la base de datos con información ficticia a [email protected] así le puedo dar una respuesta más acertada. Favor en el asunto anotar la consulta.

¿Se me olvido decirle si probó la función desde la ventana de inmediato?

Eduardo, te voy a enviar la BD porque seguí probando sin éxitos. Desde ya le agradezco mucho por su predisposición !

Solucionado el problema radica en que le asignó a nombre del módulo el mismo nombre de la función, esto hace que al llamarlo en una consulta Access se confunda, cambie el nombre del módulo VBA calcularFactorSoja por vbFunciones y listo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas