Jump to content
Pirtrafilla

Problema con copiar datos de Listbox no repetidos

Recommended Posts

Hola de nuevo a todos.

Necesito si es posible ayuda con este asunto. He puesto el siguiente código en el evento click de un botón para copiar los datos seleccionados del Listbox2 al Listbox4, solo con los item seleccionados. El Listbox2 permito multiseleccionar.

El problema que tengo es que no se como hacer para una vez copie los datos del Listbox2 al Listbox4 no me repita los que ya he copiado. Tampoco tengo claro que la forma en la que he puesto el código sea la más eficiente, es la que he hecho con los conocimientos que tengo y después de leer en el foro.

Si es posible me ayudéis os lo agradezco, como de costumbre.

Private Sub CommandButton3_Click()
'macro para copiar los datos seleccionado del listbox2 al listbox4
If ListBox2.ListIndex = -1 Then Exit Sub
Dim i, j
    With ListBox2
    For i = 0 To .ListCount - 1
        If .Selected(i) = True Then
            ListBox4.AddItem ListBox2.List(ListBox2.ListIndex, 0)
             For j = 1 To .ColumnCount - 1
              ListBox4.List(contador, j) = ListBox2.List(i, j)
             Next
              contador = contador + 1
        End If
    Next
    End With
End Sub

He declarado esta variable como Pública.

Public contador As String

Y cada vez que cambio el Listbox1 aprovecho para vaciar la variable y limpiar el Listbox4

Private Sub ListBox1_Change()
contador = 0
ListBox4.Clear
End Sub

Gracias por vuestra ayuda.

Moisés.

Share this post


Link to post
Share on other sites

@Antoni, perdona, tienes razón. No lo he subido porque me parecía un problema que no precisaba de ver el archivo completo, sino de una idea para ver que puedo hacer para verificar que no se repita los item de un Listbox a otro.

Voy a ver como lo hago porque esto es parte de un fichero grande que además, hasta llegar al botón se ha de salvar otro formulario.

Y para colmo es un Excel que toma los datos de un Acces.

Lo dicho, perdona, a ver si doy como hacerlo y dejo la información lo más reducido posible.

Moisés.

 

Share this post


Link to post
Share on other sites

Hola, envío los archivos con muy pocos datos.

https://drive.google.com/open?id=182M2xP2gSYQd7v5AerC3EU1-VYmJpFO6

Es un Excel y un Access.

Una vez abrimos el Excel le hacemos click a "Checklist". Nos pedirá la ruta nueva de la base de datos, la del Access.

En el combobox "OT" ponemos 12810159.

En el combobox "PERIODO OT" ponemos 201901.

A la derecha, arriba, le damos a "REPLICAR A OTRO PERIODO".

Se abre otro formulario. 

Dentro del Listbox1, el de en medio, seleccionamos el primer item, ALQUILERES.

En el Listbox2, el de la izquierda, seleccionamos cualquier item, o varios a la vez y luego hacemos click en COPIAR SELECCIÓN.

Es aquí donde quiero que cuando los item "viajen" al Listbox4, el de abajo, no se repitan si vuelvo a hacer click.

Hay más botones, pero no funcionan, están por desarrollar.

Ya veis que es un poco lioso, por eso no había enviado el adjunto.

Si podéis darme una idea de como hacerlo o ayudarme, os lo agradezco.

Saludos,

Moisés.

 

 

 

Share this post


Link to post
Share on other sites

Hola de nuevo.

Sigo sin poder solucionar este problema. Si alguien me puede ayudar se lo agradezco.

Lo que necesito es pasar los datos de un listbox a otro, previamente seleccionando un item y que no se repita en el listbox de destino. Es decir que si vuelvo a enviar un item que ya haya enviado que no me lo cargue en el segundo listbox.

Envié un archivo de prueba y de verdad que necesito ayuda.

Muchas gracias de antemano.

Moisés.

Share this post


Link to post
Share on other sites

Hola de nuevo.

Ya he conseguido hacerlo funcionar.

Private Sub CommandButton3_Click()
'macro para copiar los datos seleccionado del listbox2 al listbox4
If ListBox2.ListIndex = -1 Then Exit Sub
Dim i, j, k, salir As Boolean
    With ListBox2
    For i = 0 To .ListCount - 1
        salir = False
        If .Selected(i) = True Then
        
          For k = 0 To ListBox4.ListCount - 1
           If Val(ListBox2.List(i, 0)) = Val(ListBox4.List(k, 0)) Then salir = True: Exit For
          Next k
        
          If salir = False Then
            ListBox4.AddItem ListBox2.List(ListBox2.ListIndex, 0)
             For j = 0 To .ColumnCount - 1
              ListBox4.List(contador, j) = ListBox2.List(i, j)
             Next j
              contador = contador + 1
          End If
          
        End If
    Next
    End With
    
 'ponemos los totales
TotalesListbox
End Sub

Este bucle ya lo había probado entes, pero no me funcionaba porque comparaba los item de los dos listbox pero sin poner delante "Val". Así que nunca los evaluaba como repetidos.

For k = 0 To ListBox4.ListCount - 1
    If Val(ListBox2.List(i, 0)) = Val(ListBox4.List(k, 0)) Then salir = True: Exit For
Next k

De todos modos agradezco a los que os habéis interesado. La solución la tengo gracias a investigar en el foro con otras preguntas parecidas a la mía y adaptando los códigos a mi necesidad.

En especial en este tema: 

Evitar datos duplicados en ListBox en la segunda columna

Moisés.

 

Share this post


Link to post
Share on other sites

Antoni podrías explicar paso a paso lo que hiciste en el código de ordenar los datos? o sea que significa cada línea de codigo. Muchas gracias!

Private Sub OrdenarLista()
   With ListBox1
      ListBox2.List = .List
      .Clear
      Do Until ListBox2.ListCount = 0
         x1 = 0
         For x2 = 0 To ListBox2.ListCount - 1
            If ListBox2.List(x2, 1) < ListBox2.List(x1, 1) Then x1 = x2
         Next
         .AddItem
         For y = 0 To 4: .List(.ListCount - 1, y) = ListBox2.List(x1, y): Next
         ListBox2.RemoveItem (x1)
      Loop
   End With
End Sub

Share this post


Link to post
Share on other sites
Hace 13 minutos , giordancisco dijo:

Antoni podrías explicar paso a paso lo que hiciste en el código de ordenar los datos? o sea que significa cada línea de codigo. Muchas gracias!

Private Sub OrdenarLista()
   With ListBox1
      ListBox2.List = .List
      .Clear
      Do Until ListBox2.ListCount = 0
         x1 = 0
         For x2 = 0 To ListBox2.ListCount - 1
            If ListBox2.List(x2, 1) < ListBox2.List(x1, 1) Then x1 = x2
         Next
         .AddItem
         For y = 0 To 4: .List(.ListCount - 1, y) = ListBox2.List(x1, y): Next
         ListBox2.RemoveItem (x1)
      Loop
   End With
End Sub

Mil disculpas me confundí de hilo, lo tenia abierto en la pestaña de al lado. Era esta direccion: 

Casualmente Antoni también había respondido. Recién me doy cuenta que ese hilo esta cerrado. Si pueden eliminar estos mensajes mejor. Gracias y nuevamente disculpas.

Share this post


Link to post
Share on other sites
En 27/2/2019 at 0:44 , Pirtrafilla dijo:

De todos modos agradezco a los que os habéis interesado. La solución la tengo gracias a investigar en el foro con otras preguntas parecidas a la mía y adaptando los códigos a mi necesidad.

Hola

Mira mi versión

 

Saludos

Agregar registros no repetidos a otro Listbox_GP.zip

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.



×
×
  • Create New...

Important Information

Privacy Policy