Actualizar valor de textbox al cambiar el valor de un cuadro combinado

tengo un tablero en el cual hay 5 cuadros combinados y 5 cuadros de texto.Cada cuadro combinado tiene 5 opciones a elegir: Ocupado, Disponible, Proceso, Libre ,Sin Autorizar. ( de una tabla estados).Cada campo de texto independiente contabiliza el valor de cada opcion de los cuadro por ejemplo supongamos todos los cuadros combinados tienen escogida la opcion Libre, el cuadro de texto Libres muestra 5, el cuadro de texto Ocupado =0, Disponible =0, Proceso =0  Sin autorizar=0. Supongqmos 3 cuadros combinados tienen seleccionada la Opcion Disponible y 2 cuadros combinados tienen el valor Ocupado.. El cuadro de texto Disponible =3, cuadro de texto Ocupado= 2, Proceso =0, libre=0 Sin autorizar =0. Quiero que al cambiar los valores de los cuadros combinados se actualice automaticamente  los valores de los cuadros de texto. Ibtente con requery y refresh  propiedad al cambiar y despues de actualizar pero no se actualiza el textbox.

3 Respuestas

Respuesta
2

Otra idea, sin necesidad de añadir un botón al formulario:

1º/ En el mismo módulo asociado al formulario, creas una procedimiento que haga las cuentas, por ejemplo éste:

Private Sub Recuenta()
    Dim ctl As Control
    Dim vOcupados As Byte, vDisponibles As Byte, vLibres As Byte
    Dim vSinAutorizar As Byte, vProcesos As Byte
    For Each ctl In Me.Controls
        If ctl.ControlType = acComboBox Then
            Select Case ctl.Value
                Case 1 'Ocupado
                    vOcupados = vOcupados + 1
                Case 2 'Disponible
                    vDisponibles = vDisponibles + 1
                Case 3 'Proceso
                    vProcesos = vProcesos + 1
                Case 4 'Libre
                    vLibres = vLibres + 1
                Case 5 'Sin Autorizar
                    vSinAutorizar = vSinAutorizar + 1
                Case Else
            End Select
        End If
    Next ctl
    Me.txtDisponibles = vDisponibles
    Me.txtLibres = vLibres
    Me.txtOcupados = vOcupados
    Me.txtProcesos = vProcesos
    Me.txtSinAutorizar = vSinAutorizar
End Sub

2º/ En los eventos "después de actualizar" de cada uno de los 5 cuadros combinados, llamas al procedimiento anterior:

Private Sub cboDisponible_AfterUpdate()
    Recuenta
End Sub
Private Sub cboLibre_AfterUpdate()
    Recuenta
End Sub
Private Sub cboOcupado_AfterUpdate()
    Recuenta
End Sub
Private Sub cboProceso_AfterUpdate()
    Recuenta
End Sub
Private Sub cboSinAutorizar_AfterUpdate()
    Recuenta
End Sub

3º/ Y ¡voilá!

He supuesto que los combinados se llaman cboLibre, cboDisponible... y los cuadros de texto txtLibres, txtxOcupados... Además, he supuesto que los cuadros combinados, al depender de otra tabla, trabajan con un ID y no con los valores de texto, pero si no fuera el caso, bastaría con cambiar los case 1, case 2... por Case "Disponible", Case "Ocupado"...

Te dejo un ejemplo para que lo veas en funcionamiento de las dos formas (Formulario1 trabaja con IDs numéricos, Formulario2 con valores de texto): http://www.filebig.net/files/LKNGvmsGtM

Verás que uses el sistema que uses, la suma de los cinco cuadros de texto siempre te dará 5, cosa que con el código de Icue no ocurre si una vez pulsado el botón haces cambios en los combinados y pulsas de nuevo el botón...

Un saludo.


Respuesta
2

Rosario: Tu citas 5 combos e imagino que cada uno es un "Recurso" del que quieres controlar su "Estado Actual". Al hablar de Recurso, para mi es indiferente que sea la mesa de un bar, un tractor, una habitación de hotel, una sala de reuniones o...

Si fuera así, en lugar de 5 puedes tener 20 o 50 o...

No es complicado, pero si un poco largo de explicar, por lo que he hecho un complemento en el ejemplo que te preparé para los tiempos por zona. Verás que está en el botón de: Estado Recursos.

http://www.mediafire.com/file/7bbp6l64wdzfbcu/TiemposPorZonasDeHotel.accdb/file 

Espero sea eso lo que necesitas. Un saludo >> Jacinto

Muchas gracias es precisamente lo que buscaba pero hay alguna alternativa sin usar dcounts pretendo usar 100 cuadros combinados y se va a alentar la aplicación.

Rosario: De acuerdo atexto de tu pregunta, no se me ocurre otra solución.

Si son 100 Registros no veo que ese proceso sea lento. Si hablaramos de 25000 ... sería otro tema.

Lo que no veo son 100 controles ComboBox en un Formulario, pero tus razones tendrás.

Quizá si me explicas algo más nos de una idea. Un saludo >> Jacinto

Respuesta
2

Si tengo el formulario

Y en los combinados elijo

Cuando pulso el botón

El código del botón es

Private Sub Comando20_Click()
For Each Control In Form.Controls
If Control.ControlType = acComboBox Then
If Control.Value = "Ocupado" Then
Ocupados = Nz([Ocupados]) + 1
ElseIf Control.Value = "disponible" Then
Disponibles = Nz([Disponibles]) + 1
ElseIf Control.Value = "proceso" Then
Proceso = Nz([Proceso]) + 1
ElseIf Control.Value = "Libre" Then
Libres = Nz([Libres]) + 1
Else
SinAutorizar = Nz([SinAutorizar]) + 1
End If
End If
Next
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas