Seleccionar un registro de varios subformularios

Tengo un formulario que se llama A con tres subformularios continuos B, C y D los tres subformularios están relacionados con un campo que se llama código. ¿Si yo seleccionara un registro del subformulario B como se podría hacer para que en aquellos que coincidiera el código los subrayara de alguna manera? Bien con un color o desactivando el resto y si vuelvo a hacer click sobre ese mismo registro lo quitara.

Respuesta
1

La respuesta que le dan es totalmente inadecuada e indica la falta de conocimiento de VBA de quien lo hace y menos hablar de "consumo de recursos" y "estética", personalmente opino que no lo puede hacer con los subformularios y menos utilizando formato condicional. Por si de pronto lo interesa lo hago con cuadros de lista, Observe la imagen.

Al hacer doble clic sobre el idcodigo 2 del cuadro de lista 1 se resaltan los idcodigo de los cuadros de lista 2 y 3. Ahora, limpio y hago doble clic sobre el idcodigo 3 del cuadro de lista 3 y obtengo

Ahora limpio y hago doble clic sobre el idcodigo1 del cuadro de lista 2 y obtengo

Utilizo el siguiente procedimiento para deseleccionar los items de los 3 cuadros de lista.

Sub deselecciona()
 Dim varPos As Variant
     For Each varPos In lst01.ItemsSelected
         Me.lst01.Selected(varPos) = False
     Next varPos
     For Each varPos In lst02.ItemsSelected
         Me.lst02.Selected(varPos) = False
     Next varPos
     For Each varPos In lst03.ItemsSelected
         Me.lst03.Selected(varPos) = False
     Next varPos
End Sub

Llamo el procedimiento en evento Al entrar en cada cuadro de lista y al hacer clic en el botón Limpiar.

 Call deselecciona

CÓDIGO DEL EVENTO Al hacer doble clic sobre una fila del cuadro de lista 1

Private Sub lst01_DblClick(Cancel As Integer)
  Dim intNumAct As Integer
  Dim intCodigo As Integer
   intCodigo = Me.lst01.Column(1)
     For intNumAct = 1 To Me.lst02.ListCount - 1
      If Me.lst02.Column(1, intNumAct) = intCodigo Then
        Me.lst02.Selected(intNumAct) = True
      End If
     Next intNumAct
     For intNumAct = 1 To Me.lst03.ListCount - 1
      If Me.lst03.Column(1, intNumAct) = intCodigo Then
        Me.lst03.Selected(intNumAct) = True
      End If
     Next intNumAct
End Sub

CÓDIGO DEL EVENTO Al hacer doble clic sobre una fila del cuadro de lista 2

Private Sub lst02_DblClick(Cancel As Integer)
  Dim intNumAct As Integer
  Dim intCodigo As Integer
   intCodigo = Me.lst02.Column(1)
     For intNumAct = 1 To Me.lst01.ListCount - 1
      If Me.lst01.Column(1, intNumAct) = intCodigo Then
        Me.lst01.Selected(intNumAct) = True
      End If
     Next intNumAct
     For intNumAct = 1 To Me.lst03.ListCount - 1
      If Me.lst03.Column(1, intNumAct) = intCodigo Then
        Me.lst03.Selected(intNumAct) = True
      End If
     Next intNumAct
End Sub

CÓDIGO DEL EVENTO Al hacer doble clic sobre una fila del cuadro de lista 3

Private Sub lst03_DblClick(Cancel As Integer)
  Dim intNumAct As Integer
  Dim intCodigo As Integer
   intCodigo = Me.lst03.Column(1)
     For intNumAct = 1 To Me.lst01.ListCount - 1
      If Me.lst01.Column(1, intNumAct) = intCodigo Then
        Me.lst01.Selected(intNumAct) = True
      End If
     Next intNumAct
     For intNumAct = 1 To Me.lst02.ListCount - 1
      If Me.lst02.Column(1, intNumAct) = intCodigo Then
        Me.lst02.Selected(intNumAct) = True
      End If
     Next intNumAct
End Sub

Observe que el código es muy parecido en los 3 cuadros de lista, lo cual indica que se pueden hacer unas mejoras para reducirlo. Esta una idea seguro que deben existir otras.

1 respuesta más de otro experto

Respuesta

Si el formulario se utiliza en su modo continuo o en modo hoja de datos, el método para que presente diferencias estéticas entre sus registros consiste en aplicar 'formato condicional'.

No conviene utilizaren exceso esta metodología, porque la estética consume muchos recursos y ralentiza la ejecución (aplicar lo de: 'use pero no abuse').

¡Gracias! Realmente no tiene porque ser diferencias estéticas, comenté lo del color pero también puede ser poniendo como desactivadas las líneas no seleccionadas.

Admite variantes, pero no modifica las propiedades (solo el formato <==> estética que aplica en base a la condición).
Los formularios continuos muestran varios registros pero solo uno es real -el activo-.
El resto simple ilusión óptica.
Lo demuestran los campos calculados: repiten el valor del registro activo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas