Generador de expresiones con variables

Tengo 4 cuadros de texto, que quiero que se sumen entre sí, cuando tengan valores y se haga una media de los mismos.
De este modo, si sólo el cuadro A y B tienen valores, el resultado será (A+B)/2
Si por el contrario, todos los cuadros tienen valores, el resultado sería (A+B+C+D)/4
Para ello, cuando los cuadros se actualizan, recojo en una variable que se han activado y los voy sumando. A esta vble. La llamo tareasTotales, de modo que la fórmula anterior me queda (A+B+C+D)/tareasTotales.
Quiero que en el cuadro de texto del formulario se muestre, y por lo tanto en sus propiedades, en origen del control le he puesto que sume los cuadros A, B, C, D pero no sé cómo hacer, para pasarle la vble. TareasTotales.
¿Se puede hacer?
Como no estaba seguro, he creado esta función, ya que he visto que funciones, sí admite, pero aún así no me devuelve el valor al cuadro de texto.
Ahí va la función:
Public Function devolverTarea() As Integer
If GBL_tareas <> 0 Then
devolverTarea = (Form_01EvaluacionEmp.Marco277.Value + Form_01EvaluacionEmp.Marco290.Value + Form_01EvaluacionEmp.Marco296.Value + Form_01EvaluacionEmp.Marco302.Value + ) / GBL_tareas
End If
End Function
La idea es que devuelva el valor de la media, y este aparezca en el cuadro de texto de resultado.

1 Respuesta

Respuesta
1
Si entiendo bien el problema, lo único que te falta es un signo igual en el Origen de control,
Para que tu función sea el origen de tu campo debes escribir:
=devolverTarea()
Probé de las dos maneras, en el generador de expresiones y ninguna de las dos funciona.
1)
= (Form_01EvaluacionEmp.Marco277.Value + Form_01EvaluacionEmp.Marco290.Value + Form_01EvaluacionEmp.Marco296.Value + Form_01EvaluacionEmp.Marco302.Value + ) / GBL_tareas
2)
=devolverTarea()
Para entender mejor el problema, parto de que ya tienes una variable GBL_tareas declarada (Public GBL_tareas as integer), y que tu función se encuentra en un modulo:
Lo mejor seria tu funcion este dentro del mismo formulario y uses la segunda opcion,  y para mejorar la funcion que tienes adiciona la opcion else
else
   devolverTarea=0
por otro lado, si esta la funcion en el mismo formulario simplemente podrias usar Me.Marco277.value en vez de Form_01EvauacionEmp.Marco277.Value
sin embargo hay otro problemita en la funcion por que si en valor es nulo, o no se ingreso ningun valor la division generara un error por lo que deberias validar y forzar que sea un valor numerico esto se puede lograr con la funcion val(me.marco277 &"") si trabajas con valores enteros
Si es necesario que la función se encuentre fuera del formulario, (en un modulo) lo que puedes hacer es redefinir tu función para pasarle los valores desde el ORIGEN DEL CONTROL entonces tu función seria
Public Function devolverTarea(a as integer, b as integer, c as integer, d as integer) as integer
....  devolverTerea= (a+b+c+d)/GBL_tares
el valor de GBL_tareas no lo envias porque suponemos que esta definida como publica )o Global)
entonces en el origen de control usas
= devolverTares(val([Marco227].value & ""),....,...,....)
El &"" lo usas para que no error si contiene un valor nulo
espero haberte ayudado...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas