Validar la suma de varios campos en formulario access

Tengo un formulario con varios campos para introducir un valor de porcentaje, y lo que necesito es que me valide cuando guarde el registro o bien poniendo un botón de validación que los valor que se introducen en dichos campos de porcentaje sean igual a 100 (100%).

2 Respuestas

Respuesta
1

No dices si aparte de esos cuadros de texto hay otros. Si estuvieran solos podrías usar lo de For each control in form.controls...

Así que te digo lo que haría, anularía el botón cerrar del formulario y le pondría uno como en la imagen

Cuando lo pulso

Al aceptar el cursor se vuelve para que cambies los valores. El código del botón es simplemente

If Nz([Texto5]) + Nz([Texto7]) + Nz([Texto9]) + Nz([Texto11]) <> 100 Then
MsgBox "Nene, es imposible, no suman 100", vbOKOnly, "Señor, señor, ¡que cabeza!"
DoCmd.CancelEvent
End If
Respuesta
1

Julio: Al salirme ésta pregunta sugerida, te cito ua solución que haría.

Siendo un poco ordenado y Nombrando los Controles como Pct1,... PctN y el Acumulado por ejemplo >> SumPorcent

Declaras una variable a nivel de Formulario >> Después del Option Compare...

Option Compare Database
Option Explicit
Dim Ctrl As Access.Control

En el Form_Load del Formulario, pones >>

Private Sub Form_Load()
'Añado al evento OnLostFocus a todos los controles
For Each Ctrl In Me.Controls
        If Ctrl.ControlType = acTextBox And Left(Ctrl.Name, 3) = "Pct" Then
                Ctrl.OnLostFocus = "=SumaLosPorcentajes()"
        End If
Next Ctrl
End Sub

Y para que te haga los Cálculos>>

Public Function SumaLosPorcentajes()
SumaLosPorcentajes = 0
On Error GoTo SumaLosPorcentajes_TratamientoErrores
'Sumo los TextBoxes cuyo Nombre Comience por "Pct"
For Each Ctrl In Me.Controls
        If Ctrl.ControlType = acTextBox And Left(Ctrl.Name, 3) = "Pct" Then
                SumaLosPorcentajes = SumaLosPorcentajes + Nz(Ctrl.Value, 0)
        End If
Next Ctrl
Me.SumPorcent = SumaLosPorcentajes
MsgBox "La suma de los valores de Porcentajes es >>  " & SumaLosPorcentajes
'Opcionalmente aquí podemos poner un código que sea
If SumaLosPorcentajes > 100 Then
    'Aqui lo que querramos que haga si pasa de 100
Else
    'Aquí no hacer nada o programar lo que necesitemos
End If
SumaLosPorcentajes_Salir:
On Error GoTo 0
Exit Function
SumaLosPorcentajes_TratamientoErrores:
MsgBox "Error " & Err & " en Funcion.: SumaLosPorcentajes de Documento VBA: Xxxxxxxxxx (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume SumaLosPorcentajes_Salir
End Function

Mis saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas