Dar formato a un campo del subformulario en función de un desplegable

Tengo un formulario con subformulario. En este subformulario, tengo un combo en el que elijo un artículo. Cada artículo tiene asociado una categoría. Si la categoría del artículo es "Recargas", debe mostrar dos campos más en el subformulario para meter datos asociados a esa recarga (número de referencia y el teléfono).

Bien, pues no consigo que en el evento "Después de actualizar" el artículo, cuando sea "Recarga", me muestre esos dos campos.

Me cuesta hacer ver cómo lo tengo montado con palabras. Así que voy a tirar de un vídeo para enseñarte cómo lo he hecho:

https://www.dropbox.com/s/h6ebisfiagdlmpx/Video.mp4?dl=0 

1 Respuesta

Respuesta
2

Chico, lo siento, pero el vídeo apenas se oye, y eso que pongo el volumen en 100. Pero antes de empezar quisiera decirte que en un formulario continuo aunque veas varios registros, realmente sólo existe uno, el registro activo. Los demás son imágenes virtuales. Por eso, si le dices algo a un control, "lo traslada" a todos los registros. Dicho esto, si construyo un subformulario

Donde los controles Telefono y direccion en sus propiedades los pongo como ocultos. Cuando abro el formulario Compras y elijo un producto de la categoría Bebidas

Donde le digo que si el producto es de la categoría Bebidas me muestre Teléfono y Dirección

Relleno los valores

Me paso al siguiente registro y elijo algo de Confitería

Entonces me lo oculta

Pero en la tabla Detalle de compra me lo ha guardado

En este caso, el código del evento Después de actualizar del combinado Producto es

Private Sub Producto_AfterUpdate()
If Producto.Column(1) = "Bebidas" Then
Telefono.Visible = True
Direccion.Visible = True
Else
Telefono.Visible = False
Direccion.Visible = False
End If
Precio.SetFocus
End Sub

Ya que la columna dependiente es la 0. Sería conveniente que esa misma instrucción la pusieras en el evento Al activar el registro

Vale. Perfecto, Julián. Ya he conseguido hacerlo funcionar. Pero tengo otra duda. Como me tiene que funcionar, no solo al elegir el artículo del desplegable, sino que, cuando pase entre registros (del formulario principal), me muestre/oculte los campos en función de si hay recargas o no, tengo que dividir en dos el código.

Public Function DarFormatoCondicionalALasRecargas(FormatoCondicionalCodigoRecarga As Boolean, Optional FName As Form, Optional SubForm As Boolean)
    On Error Resume Next 'Pongo esto para que no me de error si quiero entrar en el subformulario
    Dim ColorFondoRed As Double, ColorFondoGreen As Double, ColorFondoBlue As Double
    ColorFondoRed = DLookup("[ColorFondoRed]", "[T00Configuracion]")
    ColorFondoGreen = DLookup("[ColorFondoGreen]", "[T00Configuracion]")
    ColorFondoBlue = DLookup("[ColorFondoBlue]", "[T00Configuracion]")
    If FormatoCondicionalCodigoRecarga = False Then
        If SubForm = True Then
            FName.TxtCodigoRecarga.Visible = False
            FName.TxtCodigoRecarga.TabStop = False
            FName.TxtCodigoRecarga.BackColor = RGB(ColorFondoRed, ColorFondoGreen, ColorFondoBlue)
            FName.TxtCodigoRecarga.ForeColor = RGB(ColorFondoRed, ColorFondoGreen, ColorFondoBlue)
            FName.TxtTelefonoMovil.Visible = False
            FName.TxtTelefonoMovil.TabStop = False
            FName.TxtTelefonoMovil.BackColor = RGB(ColorFondoRed, ColorFondoGreen, ColorFondoBlue)
            FName.TxtTelefonoMovil.ForeColor = RGB(ColorFondoRed, ColorFondoGreen, ColorFondoBlue)
        Else
            Forms![F10TPV]![TPVSubformulario].Form!TxtCodigoRecarga.Visible = False
            Forms![F10TPV]![TPVSubformulario].Form!TxtCodigoRecarga.TabStop = False
            Forms![F10TPV]![TPVSubformulario].Form!TxtCodigoRecarga.BackColor = RGB(ColorFondoRed, ColorFondoGreen, ColorFondoBlue)
            Forms![F10TPV]![TPVSubformulario].Form!TxtCodigoRecarga.ForeColor = RGB(ColorFondoRed, ColorFondoGreen, ColorFondoBlue)
            Forms![F10TPV]![TPVSubformulario].Form!TxtTelefonoMovil.Visible = False
            Forms![F10TPV]![TPVSubformulario].Form!TxtTelefonoMovil.TabStop = False
            Forms![F10TPV]![TPVSubformulario].Form!TxtTelefonoMovil.BackColor = RGB(ColorFondoRed, ColorFondoGreen, ColorFondoBlue)
            Forms![F10TPV]![TPVSubformulario].Form!TxtTelefonoMovil.ForeColor = RGB(ColorFondoRed, ColorFondoGreen, ColorFondoBlue)
        End If
    Else 'Activar las recargas
        If SubForm = True Then
            FName.TxtCodigoRecarga.Visible = True
            FName.TxtCodigoRecarga.TabStop = True
            FName.TxtCodigoRecarga.BackColor = RGB(255, 255, 255)
            FName.TxtCodigoRecarga.ForeColor = RGB(255, 255, 255)
            FName.TxtTelefonoMovil.Visible = True
            FName.TxtTelefonoMovil.TabStop = True
            FName.TxtTelefonoMovil.BackColor = RGB(255, 255, 255)
            FName.TxtTelefonoMovil.ForeColor = RGB(255, 255, 255)
        Else
            Forms![F10TPV]![TPVSubformulario].Form!TxtCodigoRecarga.Visible = True
            Forms![F10TPV]![TPVSubformulario].Form!TxtCodigoRecarga.TabStop = True
            Forms![F10TPV]![TPVSubformulario].Form!TxtCodigoRecarga.BackColor = RGB(255, 255, 255)
            Forms![F10TPV]![TPVSubformulario].Form!TxtCodigoRecarga.ForeColor = RGB(64, 64, 64)
            Forms![F10TPV]![TPVSubformulario].Form!TxtTelefonoMovil.Visible = True
            Forms![F10TPV]![TPVSubformulario].Form!TxtTelefonoMovil.TabStop = True
            Forms![F10TPV]![TPVSubformulario].Form!TxtTelefonoMovil.BackColor = RGB(255, 255, 255)
            Forms![F10TPV]![TPVSubformulario].Form!TxtTelefonoMovil.ForeColor = RGB(64, 64, 64)
        End If
    End If
End Function

Como puedes ver, es una función que tengo en un módulo, para no tener todo ese código dos veces. Le paso una variable boolean para indicarle si es subformulario o no. Si es subformulario, directamente es Me.Campo; pero si no es subformulario, tiene que ser Forms![F10TPV]![TPVSubformulario].Form!Campo.

¿Hay alguna manera de simplificar eso?

¡Muchas gracias!

Personalmente, lo que haría sería dejar visibles los cuadros de texto Teléfono y dirección. Pero pondría, en el evento Después de actualizar del combinado Producto

If producto.column(1)<>"Bebidas" then

telefono.enabled=false

direccion.enabled=false

else

telefono.enabled=true

direccion.enabled=true

end if

De forma, que si elige algo que no sea bebidas(alcohólicas, of course), no le deja escribir nada en los cuadros de texto. Pondría la misma instrucción en el evento Al activar el registro del subformulario.

Con respecto a los colores, usaría el formato condicional. Por ejemplo, le digo que si elijo bebidas, me ponga los controles de un color

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas