Calcular desviación estándar en un formulario access

Tengo un formulario en el que introduzco valores numéricos en un par de campos de cada registro y quiero un control que me muestre la desviación estándar de los valores de esos dos campos en cada registro.

1 respuesta

Respuesta
2

Salva: Creo que éste enlace de Microsoft, lo explica mejor de lo que yo podría hacerlo.

https://support.office.com/es-es/article/Funciones-DDesvEst-DStDev-DDesvEstP-DStDevP-7151211f-d216-4ae1-b42c-f6d1b212b851 

Un saludo >> Jacinto

Gracias, ya la había consultado. El problema es que la sintaxis no me permite incluir dos registros en la misma: en mi formulario un control es r1 el otro es r2. El control calculado ha de determinar la desviación estándar de estos dos valores. He intentado diversos modos de incluir ambos conyroles dento de la expresión desvest (string) y no he conseguido nada. Empleo access 2003

Salva: De esa manera, creo que la las Funciones a las que me referí, al ser de Dominio, no van a ser aplicables a tu caso y la solución es hacer los cálculos paso a paso por sus componentes.

‘Declaramos Variables

Dim MedDatos As Double, SumCuadradDesv As Double, LaDesvest As Double

1.- Calcular la media

MedDatos = (Me.R1Value +Me.R2Value)/2

2.- Suma cuadrados desviaciones

SumCuadradDesv = (Me.R1-MedDatos)^2 + (Me.R2-MedDatos)^2

LaDesvest = SQR(SumaCuadradDesv/2)

Y suponiendo que tu cuadro de Texto donde quieres mostrar el Resultado se llame TxtDesvest >>

Me.TxtDesvest = LaDesvest

Podríamos ahorrar la Variable LaDesvest y hacer el cálculo directo

Ya me contarás. Mis saludos >> Jacinto

¡Gracias! 

Jacinto me indica "Error de compilación. El procedimiento externo no es válido". Me resalta el término me.r1.value

Salva: Le falta un punto a cada una de los TextBox.

MedDatos = (Me.R1Value +Me.R2Value)/2  >> Debe de ser

MedDatos = (Me.R1.Value +Me.R2.Value)/2

Formatea los cuadros de Texto a Número

Si así te sigue el Error >> Cambia los Nombres por ejemplo a TxtR1 y TxtR2 Saludos >> Jacinto

Jacinto, he revisado los puntos, he cambiado los nombres de los campos ValorR1 y ValorR2, son numéricos tipo Single. Me sigue dando el mismo error, y el depurador VBA me sigue señalando en amarillo el término Me de la primera expresión de Me.ValorR1.value cuando me da el error. Te copio el código que estoy usando

Option Compare Database

Dim meddatos As Single, sumcuadraddesv As Single, ladesvest As Single

meddatos = (Me.ValorR1.Value + Me.ValorR2.Value) / 2
sumcuadraddesv = (Me.ValorR1.Value - meddatos) ^ 2 + (Me.ValorR2.Value - meddatos) ^ 2
ladesvest = Sqr(sumacuadraddesv / 2)
Me.Desvest = ladesvest

Jacinto, ya lo he solucionado. Se trataba de poner este código en algún sub de un procedimiento. Lo asociaré al evento al cargar o al actualizar y ya está. Muchísimas gracias!!

Disculpa, ¿qué podría hacer para que este control se recalculara al desencadenar un evento requery del formulario donde están estos controles? ¿Dónde tendría que poner el código?

Salva: Ese código evidentemente ha de estar en un Procedimiento o Función y el lugar más adecuado si no estás guardando los valores en principio es el Form_Current() >> Al actualizar Registro. Antes de que se me olvide Cambia el TextBox Desvest por TxtDesvest o TxtResultado..

Además, si es que en un momento dado quieres que se te recalcule, por cambio de alguno de los valores has de llamar a ese procedimiento y para ello haz de hacerlo en el Evento después de actualizar de cada uno de los dos cuadros de Texto.

REsumiendo. Un procedimiento que se puede llamar >> CalculaDesv

Sub CalculaDesv()

'Aquí el código de cálculo

End Sub

'En el Procedimiento Form_Current >>

Private Sub Form_Current()

Call CalculaDesv

End Sub

Y ahora dos procedimientos más

Private Sub ValorR1_AfterUpdate()

Call CalculaDesv

End Sub

Y para el segundo cuadro de Texto

Private Sub ValorR2_AfterUpdate()

Call CalculaDesv

End Sub

Si copiaras éste código, no te olvides de Activar el Procedimiento de Evento en Propiedades Eventos. Un saludo >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas