Enlazar 2 cuadros de listas

Hola Santiago, tengo un duda, tengo un cuadro de lista con diferentes opciones en un formulario, y necesito que al dar clic en cualquier opción, este se pegue en otro cuadro de lista de otro formulario

1 Respuesta

Respuesta
1
En el evento 'al hacer click' del primer cuadro de lista (supongamos que se llama 'Lista0') tienes que poner que va a ser un 'proocedimiento de evento'. A continuación pulsas el botón con los tres puntos "..." y te lleva al editor de Visual Basic.
Pon el siguiente código:
Private Sub Lista0_Click()
    Const nombreOtroFormulario = "Formulario2"
    Const nombreLista2 = "Lista0"
    Dim f2 As Form
    Dim l1 As Object
    Dim l2 As Object
    Dim i As Integer
    Set l1 = Me.Lista0
    ' Abrimos el otro formulario y accedemos a su lista
    On Error Resume Next
    DoCmd.OpenForm nombreOtroFormulario
    Set f2 = Forms(nombreOtroFormulario)
    Set l2 = f2.Controls(nombreLista2)
    If Err <> 0 Then
        MsgBox "Error al acceder a la lista '" & nombreLista2 & "' del formulario '" & nombreOtroFormulario & "'. Copia cancelada"
        On Error GoTo 0
        Exit Sub
    End If
    On Error GoTo 0
    If l1.ListCount = l2.ListCount And ((l1.MultiSelect = 0) = (l2.MultiSelect = 0)) Then
        For i = 0 To l1.ListCount
            If l1.MultiSelect > 0 Then
                If l1.Selected(i) Then l2.Selected(i) = True
              Else
                If l1.ItemData(i) = l1.Value Then l2.Selected(i) = True
            End If
        Next i
        f2.Repaint
      Else
        MsgBox "ERROR: Las dos listas tiene que contener el mismo número de items y si " & _
               "una admite selección múltiple la otra también." & _
               vbCrLf & vbCrLf & "Copia de la selección cancelada"
    End If
    Set l2 = Nothing
End Sub
Y sustituye el nombre del formulario2 por su correspondiente y el de las dos listas por el que tengan en realidad (en este ejemplo sería 'Lista0')
Hola Santiago, el código me funciono, pero en realidad lo que necesito es que tengo unas opciones en un cuadro de lista, y a medida que el usuario de clic en una, esta se pegue en el otro cuadro. Por ejemplo: En un formulario tengo todas las observaciones que se pueden generar, pero el usuario no necesita siempre imprimir todas las observaciones, entonces necesito que él seleccione solo las que necesita y estas se peguen al otro formulario.
Tengo 10 observaciones, pero en realidad el usurario solo necesita imprimir 2, entonces selecciona las 2 y las envía al otro formulario. Ojala me hayas entendido y me puedas colaborar. Gracias
Suponiendo que en la lista del primer formulario tenga puesta la posibilidad de 'Selección múltiple', el código sería así:
Private Sub Lista0_Click()
    Const nombreOtroFormulario = "Formulario2"
    Const nombreLista2 = "Lista0"
    Dim f2 As Form
    Dim l1 As Object
    Dim l2 As Object
    Dim i As Integer
    Set l1 = Me.Lista0
    ' Abrimos el otro formulario y accedemos a su lista
    On Error Resume Next
    DoCmd.OpenForm nombreOtroFormulario
    Set f2 = Forms(nombreOtroFormulario)
    Set l2 = f2.Controls(nombreLista2)
    If Err <> 0 Then
        MsgBox "Error al acceder a la lista '" & nombreLista2 & "' del formulario '" & nombreOtroFormulario & "'. Copia cancelada"
        On Error GoTo 0
        Exit Sub
    End If
    On Error GoTo 0
    l2.RowSource = "" ' Limpiamos el contenido de la segunda lista
    For i = 0 To l1.ListCount
        If l1.Selected(i) Then l2.AddItem l1.ItemData(i) ' Añadimos el contenido del item marcado
    Next i
    f2.Repaint
    Set l1 = Nothing
    Set l2 = Nothing
    Set f2 = Nothing
End Sub
Hola Santiago, el código me esta funcionando bien hasta el ciclo
For i = 0 To l1.ListCount
        If l1.Selected(i) Then l2.AddItem l1.ItemData(i) ' Añadimos el contenido del item marcado
Next i
ya lo que sucede es que no me agrega el contenido seleccionado, al dar clic en una opcion, pasa al otro formulario pero no pega esta opcion.??
¿Está definida la lista como 'selección múltiple'?
El código que puse obliga a que sea con selección múltiple. Si no la tienes marcada como tal habría que hacerlo de otra forma.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas