Visual Basic para Aplicaciones - Busqueda en listbox, seleccionar un item y pasar info a otro form

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 306
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por fjpg (93 intervenciones) el 22/08/2019 22:23:59
Hola buenas. Acudo a ustedes para otra duda.
Tengo este codigo (lo encontre en internet y lo adapte):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Private Sub txt_buscar_Change()
 
    'Declaramos variables
        Dim fin As Long, i As Long, n As Long
        Dim sproducto As String
 
    'Filtramos por sección
        With Sheets("ARTICULOS")
            fin = Application.CountA(.Range("A:A"))
                If txt_buscar = "" Then
                        Me.ListBox1.RowSource = ("A2:G") & Worksheets("ARTICULOS").Range("A" & Rows.Count).End(xlUp).Row
                    Exit Sub
                End If
 
            Me.ListBox1.RowSource = Clear
            For i = 2 To fin
                sproducto = .Cells(i, 2).Value
                    If UCase(sproducto) Like "*" & UCase(txt_buscar.Value) & "*" Then
                        Me.ListBox1.AddItem
                        Me.ListBox1.List(n, 0) = .Cells(i, 1).Value
                         Me.ListBox1.List(n, 1) = .Cells(i, 2).Value
                        Me.ListBox1.List(n, 2) = .Cells(i, 3).Value
                        Me.ListBox1.List(n, 3) = .Cells(i, 4).Value
                        Me.ListBox1.List(n, 4) = .Cells(i, 5).Value
                        Me.ListBox1.List(n, 5) = .Cells(i, 6).Value
                        Me.ListBox1.List(n, 6) = .Cells(i, 7).Value
                        n = n + 1
                    End If
            Next
 
            Me.ListBox1.ColumnWidths = "60 pt;250 pt;100 pt;80 pt;30 pt;80 pt;30 pt"
    End With
End Sub
 
 
Private Sub UserForm_Initialize()
    'Indicamos el número de columnas que tendrá el listbox
        Me.ListBox1.ColumnCount = 7
    'Definimos tamaño de los espacios
        Me.ListBox1.ColumnWidths = "60 pt;250 pt;100 pt;80 pt;30 pt;80 pt;30 pt"
    'Cargamos listbox
        Me.ListBox1.RowSource = ("A2:G") & Worksheets("ARTICULOS").Range("A" & Rows.Count).End(xlUp).Row
End Sub


Con ese codigo relleno el listbox del frm_articulos y mientras escribo en un textbox me filtra la busqueda.

La idea ahora sería, seleccionar un item de ese listbox y pasar los datos a otro form.

En ese form, donde tendria que ir la info, tengo 7 texbox, donde iria la info de las siete columnas del item seleccionado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de MIGUEL
Val: 489
Plata
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por MIGUEL (101 intervenciones) el 23/08/2019 03:40:16
Buenas fjpg

en el evento doble clic pones lo siguiente

1
2
3
4
5
6
7
8
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    UserForm1.TextBox1 = Me.ListBox1.List(Me.ListBox1.ListIndex, 0) 'cero es la primer columna del listbox1
    UserForm1.TextBox2 = Me.ListBox1.List(Me.ListBox1.ListIndex, 1)
    UserForm1.TextBox3 = Me.ListBox1.List(Me.ListBox1.ListIndex, 2)
    UserForm1.TextBox4 = Me.ListBox1.List(Me.ListBox1.ListIndex, 3)
    'y asi con los demos texbox que faltan
    Unload Me
End Sub

Cabe mencionar que el userform de los textbox tiene que estar visible, de lo contrario te marcara un error en tiempo de ejecucion, si no debe o no quieres que este visible tendras que mandar los datos a unas variables publicas o a una hoja de calculo para despues poder mostrarlas en los texbox que estan en diferente userform, de todos modos te dejo el archivo para que lo revises.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 306
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por fjpg (93 intervenciones) el 23/08/2019 12:18:16
Perfect, funciona...

MUCHAS GRACIAS Miguel-!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 306
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por fjpg (93 intervenciones) el 23/08/2019 18:32:48
Hola, de nuevo. Ya que esta pregunta tiene que ver con ese mismo codigo de rellenar el listbox, la hago aqui.


Como seria para seleccionar un item y eliminarlo de la hoja excel??

Tenia otra forma de rellenarlo y de modificar/ eliminar items del listbox.

Pero al cambiar el codigo de rellenar el listbox ahora no me funciona el codigo para eliminar items.

Alguna ayuda??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 306
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por fjpg (93 intervenciones) el 23/08/2019 19:00:02
Hola.
No llega a funcionar del todo.

Necesito que una vez pasada la info del "frm_articulos" a "frm_articulos_modificar", cuando haga las modificaciones que necesite, click en boton o label y el articulo seleccionado el el primer form, modifique las celdas requeridas.

Antes rellenaba el listbox de otra forma, pero no me terminaba de convencer.

Dejo un archivo con varios txt.

A ver si pueden ayduarme.

GRACIAS!!!

P.D. En el "frm_articulos" hay un label para eliminar el articulo seleccionado. Tampoco me funciona el anterior codigo.
Intente adaptarlo pero supera mis bajos conocimientos de vba.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alfredo
Val: 120
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por Alfredo (37 intervenciones) el 23/08/2019 22:01:24
Hola fjpg

te sugiero agregues una columna mas en Column Count y al llenar el ListBox pon el numero de fila del dato que esta leyendo.
Este numero lo utilizas luego para guardar los datos en la hoja
P. ej:

1
Me.ListBox1.List(n, 7) = i 'segun veo i es el contador de filas de tu aplicación

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 306
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por fjpg (93 intervenciones) el 23/08/2019 22:31:48
Gracias por la respuesta, pero me he perdido.!!! XD...

Podrias ser mas especifico, por favor??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alfredo
Val: 120
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por Alfredo (37 intervenciones) el 23/08/2019 22:49:19
Pon en txt_buscar_Change()

en cada una de tus opciones

'En teoría la variable i tiene el numero de fila en que esta leyendo tus datos, entonces

Me.ListBox1.List(n, X) = i 'Uso X por que no se que columna lo deses asignar tu (dale un ancho de 1)

en frm_articulos_modificar declara una variable publica P.ej:

Public Fila as integer

y le pasas el numero de la fila desde ListBox1_DblClick

Fila=Me.ListBox1.List(Me.ListBox1.ListIndex, X)

y para grabar (veo que te falta la rutina) usas

Worksheets("ARTICULOS").Cells(Fila, TuColumna)=El_Dato_Del_Textbox_Que_Corresponda

Espero haberme explicado, si necesitas mas ayuda me avisas y lo preparo en tu archivo, solo que seria hasta mañana (perdón hoy estoy algo ocupado)

Saludos

PD. Me avisas si te resulto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alfredo
Val: 120
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por Alfredo (37 intervenciones) el 24/08/2019 00:50:52
Fjpg

te adjunto tu archivo modificado (resumí algo de código en txt_Buscar para que fuera mas pequeño y no tan repetitivo), en el form "frm_articulos_modificar" tienes una variable llamada FILA, en la cual siempre estará el numero de la fila donde se encuentran los datos de tu registro a modificar

Te dejo de tarea () la rutina para grabar las modificaciones y borrar registros

Buen fin de semana

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de MIGUEL
Val: 489
Plata
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por MIGUEL (101 intervenciones) el 24/08/2019 06:37:07
Buenas fjpg

te dejo el archivo modificado.

se agrego el modulo Funciones con la macro que se requiere para buscar y poder modificar/eliminar

se cambio la forma de llenar el listbox1 para que no requieras activar la hoja con los datos.

se cambio la forma de filtrar en la busqueda, ahora no es necesario seleccionar una opcion, traera el dato que coincida con lo escrito sin importar si se encuentra en la columna codigo o en la columna nombre o en la del proveedor.

se agregaron la macro en el label editar del userform para modificar y en el label eliminar del userfor de articulos.

Espero te sirva.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 306
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por fjpg (93 intervenciones) el 24/08/2019 13:03:57
Funciona perfecto. Solo le hize unas pequeñas modificaciones a los msgbox.

Lo unico, que al hacer una busqueda y en dejar en blanco el textbox, parpadea unos 4 o 5 segundos.

Supongo que habrá alguna linea de codigo para quitar ese parpadeo.

MUCHAS GRACIAS MIGUEL!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de MIGUEL
Val: 489
Plata
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por MIGUEL (101 intervenciones) el 24/08/2019 15:57:08
Es por el Doevents, se lo puse porque mi pc se ponía lenta a la hora de buscar, si quieres quitárselo no le afecta al funcionamiento de la macro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 306
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por fjpg (93 intervenciones) el 24/08/2019 18:51:30
PERFECT!!!!

AGRADECIDO!!!XD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 306
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por fjpg (93 intervenciones) el 24/08/2019 13:44:34
Alfredo, no habia visto tu mensaje.
La opcion de busqueda del compañero MIGUEL me gusta mas.
Aunque se AGRADECE un monton toda la aydua que se recibe.!!!!!!
GRACIAS!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 306
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por fjpg (93 intervenciones) el 25/08/2019 19:11:49
Hola de nuevo..

Sigo mejorando, o intentando mi busqueda.

Agregue esta linea de codigo a mi busqueda:

1
Label1 = ListBox1. ListCount

Funciona perfecto pero va algo mas lento.

Mi pregunta es se podría añadir o quitar alguna linea de codigo para que fuera la busqueda mas rápida??

Dejo el codigo del texbox donde se hace la busqueda:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Private Sub txt_buscar_Change()
 
    Dim ultfila As Long
    Dim codigo As String
    Dim produ As String
    Dim prov As String
    Dim ubicacion As String
    Dim f As Long
    Dim y As Long
 
 
    Me.ListBox1.Clear
    Image1.Picture = Nothing
    Application.ScreenUpdating = False
 
 
    ultfila = Sheets("ARTICULOS").Range("A" & Rows.Count).End(xlUp).Row
    f = 2
    y = 0
    Do While f <> ultfila + 1
        codigo = Sheets("ARTICULOS").Range("A" & f)
        produ = Sheets("ARTICULOS").Range("B" & f)
        prov = Sheets("ARTICULOS").Range("C" & f)
        ubicacion = Sheets("ARTICULOS").Range("D" & f)
 
        If UCase(codigo) Like "*" & UCase(Me.txt_buscar) & "*" Or UCase(produ) Like "*" & UCase(Me.txt_buscar) & "*" Or UCase(prov) Like "*" & UCase(Me.txt_buscar) & "*" Or UCase(ubicacion) Like "*" & UCase(Me.txt_buscar) & "*" Then
            Me.ListBox1.AddItem
            Me.ListBox1.List(y, 0) = Sheets("ARTICULOS").Range("A" & f).Text
            Me.ListBox1.List(y, 1) = Sheets("ARTICULOS").Range("B" & f).Text
            Me.ListBox1.List(y, 2) = Sheets("ARTICULOS").Range("C" & f).Text
            Me.ListBox1.List(y, 3) = Sheets("ARTICULOS").Range("D" & f).Text
            Me.ListBox1.List(y, 4) = Sheets("ARTICULOS").Range("E" & f).Text
            Me.ListBox1.List(y, 5) = Sheets("ARTICULOS").Range("F" & f).Text
            Me.ListBox1.List(y, 6) = Sheets("ARTICULOS").Range("G" & f).Text
            Me.ListBox1.List(y, 7) = Sheets("ARTICULOS").Range("H" & f).Text
            f = f + 1
            y = y + 1
 
        Else
            f = f + 1
        End If
    Loop
Label12 = ListBox1.ListCount & " artículos"
End Sub

Alguna ayuda?
P.D: He probado en ponerlo fuera y dentro del Do while/Loop y va igual de rapido o lento, segun se vea .
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de MIGUEL
Val: 489
Plata
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por MIGUEL (101 intervenciones) el 26/08/2019 05:29:29
Buenas fjpg

Pues depende de que tan grande sea tu bd por ejemplo yo uso esta macro para filtrar los productos de una bd de + 4600 registros con 27 columnas, ya te imaginarás cuanto se a de tardar, lo que hice fue pasar el código a un botón para poder escribir el criterio de búsqueda libremente en el textbox y después pulsar el botón para traer los resultados, y si esta en blanco no hace nada aunque pulse el botón ya que se tarda un buen en llenar el listbox con los 4600 y pico de productos.

Otra forma es pasar el código al evento exit del textbox y al pulsar tab o enter se ejecutará la macro pero igual tendrás que hacer que la macro no corra si el textbox está en blanco.

Pero en lo personal no lo uso ya que si al dar enter o tab el cursor se pasa a otro frame dentro del userform la macro no se ejecuta, no se porque!!.

Otra seria agregar una columna de activo, que fue lo que hice para los usuarios que no son admin en la app, y la macro es mucho más rápido si solo busca los artículos que están marcados como activos, o si son compatibles o si son sustitutos o si busco por marca, dentro de esos 3600 registros.

Otra que no se si sea verdad o fue solo mi imaginación es que yo tenía mi bd como tu, en tabla, y cuando convertí la tabla en rangos la macro fue más rápida, no pierdes nada en probar y otra es que en lo personal no me gusta usar fórmulas en las hojas de excel ya que se alenta mucho la macro a la hora de editar valores aunque puedes pasar el calculo automático a manual antes de hacer los cambios prefiero evitar las fórmulas

Y la ultima que te comentaría seria pasar las bd a sql server así las consultas serian mucho mas rápidas.

Y ya el excel solo lo utilizarías como interfaz de usuario, aunque sería mejor el visual studio.


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 306
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por fjpg (93 intervenciones) el 26/08/2019 18:31:57
Ufff... Eso supera mis conocimientos.

Bueno, me quedo esperando esos segundillos.!!!!! XD XD XD XD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alfredo
Val: 120
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por Alfredo (37 intervenciones) el 26/08/2019 20:54:39
Hola de nuevo fjpg

intenta cambiando las referencias de " Sheets("ARTICULOS").Range("A" & f) " por el nombre nativo de la hoja (Hoja2), también usar Cells en lugar de Range (Evitas la traducción de {"A" & f } a texto )
Lo probé de las dos formas y se acelera un poco así

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Do While f <> ultfila + 1
    codigo = Hoja2.Cells(f, 1)
    produ = Hoja2.Cells(f, 2)
    prov = Hoja2.Cells(f, 3)
    ubicacion = Hoja2.Cells(f, 4)
 
    If UCase(codigo) Like "*" & UCase(Me.txt_buscar) & "*" Or UCase(produ) Like "*" & UCase(Me.txt_buscar) & "*" Or UCase(prov) Like "*" & UCase(Me.txt_buscar) & "*" Or UCase(ubicacion) Like "*" & UCase(Me.txt_buscar) & "*" Then
        Me.ListBox1.AddItem
        Me.ListBox1.List(y, 0) = Hoja2.Cells(f, 1).Text
        Me.ListBox1.List(y, 1) = Hoja2.Cells(f, 2).Text
        Me.ListBox1.List(y, 2) = Hoja2.Cells(f, 3).Text
        Me.ListBox1.List(y, 3) = Hoja2.Cells(f, 4).Text
        Me.ListBox1.List(y, 4) = Hoja2.Cells(f, 5).Text
        Me.ListBox1.List(y, 5) = Hoja2.Cells(f, 6).Text
        Me.ListBox1.List(y, 6) = Hoja2.Cells(f, 7).Text
        Me.ListBox1.List(y, 7) = Hoja2.Cells(f, 8).Text

Ya nos comentaras después

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 306
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por fjpg (93 intervenciones) el 27/08/2019 18:09:55
Apenas noto cambio. Se queda como está..
La busqueda me gusta como ha quedado

GRACiAS!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 306
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por fjpg (93 intervenciones) el 30/08/2019 18:36:50
Hola, buenas. Gracias por ayudarme a sacar mi proyecto, poco a poco, adelante.

Coloco aqui esta otra duda porque es referente al mismo codigo.

Me facilitaron este codigo (el compañero MIGUEL)para hacer una busqueda mediante un textbox, un listbox y un modulo. Y dando doble click a algun item del listbox se me abre un form para modificar el item seleccionado.

Lo adapte a mi form de proveedores, quedando asi (funciona perfecto):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
Private Sub txt_buscar_Change()
 
    Dim ultfila As Long
    Dim codigo As String
    Dim cif As String
    Dim nombre As String
    Dim provincia As String
    Dim f As Long
    Dim y As Long
 
 
    Me.ListBox1.Clear
    Application.ScreenUpdating = False
 
 
    ultfila = Sheets("PROVEEDORES").Range("A" & Rows.Count).End(xlUp).Row
    f = 2
    y = 0
    Do While f <> ultfila + 1
 
        codigo = Sheets("PROVEEDORES").Range("A" & f)
        cif = Sheets("PROVEEDORES").Range("B" & f)
        nombre = Sheets("PROVEEDORES").Range("C" & f)
        provincia = Sheets("PROVEEDORES").Range("G" & f)
 
        If UCase(codigo) Like "*" & UCase(Me.txt_buscar) & "*" Or UCase(cif) Like "*" & UCase(Me.txt_buscar) & "*" Or UCase(nombre) Like "*" & UCase(Me.txt_buscar) & "*" Or UCase(provincia) Like "*" & UCase(Me.txt_buscar) & "*" Then
            Me.ListBox1.AddItem
            Me.ListBox1.List(y, 0) = Sheets("PROVEEDORES").Range("A" & f).Text
            Me.ListBox1.List(y, 1) = Sheets("PROVEEDORES").Range("B" & f).Text
            Me.ListBox1.List(y, 2) = Sheets("PROVEEDORES").Range("C" & f).Text
            Me.ListBox1.List(y, 3) = Sheets("PROVEEDORES").Range("D" & f).Text
            Me.ListBox1.List(y, 4) = Sheets("PROVEEDORES").Range("E" & f).Text
            Me.ListBox1.List(y, 5) = Sheets("PROVEEDORES").Range("F" & f).Text
            Me.ListBox1.List(y, 6) = Sheets("PROVEEDORES").Range("G" & f).Text
            Me.ListBox1.List(y, 7) = Sheets("PROVEEDORES").Range("H" & f).Text
            Me.ListBox1.List(y, 8) = Sheets("PROVEEDORES").Range("I" & f).Text
            f = f + 1
            y = y + 1
            Label12 = ListBox1.ListCount & " proveedores"
        Else
            f = f + 1
        End If
    Loop
 
End Sub
 
Private Sub UserForm_Initialize()
 
'Indicamos el número de columnas que tendrá el listbox
    Me.ListBox1.ColumnCount = 9
'Definimos tamaño de los espacios
    Me.ListBox1.ColumnWidths = "70 pt;70 pt;150 pt;200 pt;120 pt;70 pt;100 pt;70 pt;70 pt"
'Cargamos listbox
 
    Dim ultfila As Long
    Dim f As Long
    Dim y As Long
 
 
    ultfila = Sheets("PROVEEDORES").Range("A" & Rows.Count).End(xlUp).Row
    f = 2
    y = 0
    Do While f <> ultfila + 1
        Me.ListBox1.AddItem
        Me.ListBox1.List(y, 0) = Sheets("PROVEEDORES").Range("A" & f).Text
        Me.ListBox1.List(y, 1) = Sheets("PROVEEDORES").Range("B" & f).Text
        Me.ListBox1.List(y, 2) = Sheets("PROVEEDORES").Range("C" & f).Text
        Me.ListBox1.List(y, 3) = Sheets("PROVEEDORES").Range("D" & f).Text
        Me.ListBox1.List(y, 4) = Sheets("PROVEEDORES").Range("E" & f).Text
        Me.ListBox1.List(y, 5) = Sheets("PROVEEDORES").Range("F" & f).Text
        Me.ListBox1.List(y, 6) = Sheets("PROVEEDORES").Range("G" & f).Text
        Me.ListBox1.List(y, 7) = Sheets("PROVEEDORES").Range("H" & f).Text
        Me.ListBox1.List(y, 8) = Sheets("PROVEEDORES").Range("I" & f).Text
        f = f + 1
        y = y + 1
    Loop
    Label12 = ListBox1.ListCount & " proveedores"
    txt_buscar.SetFocus
End Sub

Tengo este codigo en el doble click del listbox: 'AQUI ES DONDE TENGO EL PROBLEMA.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    With frm_proveedores_modificar
        .txt_codigo = Me.ListBox1.List(Me.ListBox1.ListIndex, 0)
        .txt_cif = Me.ListBox1.List(Me.ListBox1.ListIndex, 1)
        .txt_nombre = Me.ListBox1.List(Me.ListBox1.ListIndex, 2)
        .txt_direccion = Me.ListBox1.List(Me.ListBox1.ListIndex, 3)
        .txt_poblacion = Me.ListBox1.List(Me.ListBox1.ListIndex, 4)
        .txt_cp = Me.ListBox1.List(Me.ListBox1.ListIndex, 5)
        .cbx_provincia = Me.ListBox1.List(Me.ListBox1.ListIndex, 6)
        .txt_telf1 = Me.ListBox1.List(Me.ListBox1.ListIndex, 7)
        .txt_telf2 = Me.ListBox1.List(Me.ListBox1.ListIndex, 8)
        .txt_correo = Me.ListBox1.List(Me.ListBox1.ListIndex, 9)
        .txt_www = Me.ListBox1.List(Me.ListBox1.ListIndex, 10)
        .txt_contacto = Me.ListBox1.List(Me.ListBox1.ListIndex, 11)
        .txt_contacto_telf = Me.ListBox1.List(Me.ListBox1.ListIndex, 12)
        .cbx_pago = Me.ListBox1.List(Me.ListBox1.ListIndex, 13)
        .txt_cuenta = Me.ListBox1.List(Me.ListBox1.ListIndex, 14)
        .txt_observaciones = Me.ListBox1.List(Me.ListBox1.ListIndex, 15)
        .Show
    End With
End Sub


Se o creo, que un listbox solo puede almacenar 10 columnas. Solo filtro 9 columnas, no necesito filtrar mas.
Pero mi form de proveedores tiene 16 y al dar coble click a un item del listbox, el codigo falla, Si solo traspaso 9 columnas el codigo funciona perfecto pero si trapaso todas las columnas da error:
"Error tiempo de ejecucion, no se puede obtener la propiedad list, Argumento no valido." Y justo lo da en la columna 10.

Alguna ayuda??? XDX DXDXDXDXD

GRACIAS!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de MIGUEL
Val: 489
Plata
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por MIGUEL (101 intervenciones) el 31/08/2019 23:33:22
Buenas fjpg.

El problema es que solo cargas 9 columnas en tu listbox y cuando le das doble clic le solicitas 16, marca error porque no existe la columna 10 en este caso la 9 del listbox, nesecitas hacer uso de la funcion que esta en el modulo Funciones quedaria asi tu macro

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim existe as long
    existe=fep("PROVEEDORES",Me.ListBox1.List(Me.ListBox1.ListIndex, 0),"A1:A10000")
    With frm_proveedores_modificar
        .txt_codigo = Me.ListBox1.List(Me.ListBox1.ListIndex, 0)
        .txt_cif = Me.ListBox1.List(Me.ListBox1.ListIndex, 1)
        .txt_nombre = Me.ListBox1.List(Me.ListBox1.ListIndex, 2)
        .txt_direccion = Me.ListBox1.List(Me.ListBox1.ListIndex, 3)
        .txt_poblacion = Me.ListBox1.List(Me.ListBox1.ListIndex, 4)
        .txt_cp = Me.ListBox1.List(Me.ListBox1.ListIndex, 5)
        .cbx_provincia = Me.ListBox1.List(Me.ListBox1.ListIndex, 6)
        .txt_telf1 = Me.ListBox1.List(Me.ListBox1.ListIndex, 7)
        .txt_telf2 = Me.ListBox1.List(Me.ListBox1.ListIndex, 8)
        .txt_correo =Sheets("PROVEEDORES").Range("ColumnaDondeEstaElDato" & existe) 'Me.ListBox1.List(Me.ListBox1.ListIndex, 9)
        .txt_www = Sheets("PROVEEDORES").Range("ColumnaDondeEstaElDato" & existe) 'Me.ListBox1.List(Me.ListBox1.ListIndex, 10)
        .txt_contacto = Sheets("PROVEEDORES").Range("ColumnaDondeEstaElDato" & existe) 'Me.ListBox1.List(Me.ListBox1.ListIndex, 11)
        .txt_contacto_telf = Sheets("PROVEEDORES").Range("ColumnaDondeEstaElDato" & existe) 'Me.ListBox1.List(Me.ListBox1.ListIndex, 12)
        .cbx_pago =Sheets("PROVEEDORES").Range("ColumnaDondeEstaElDato" & existe) ' Me.ListBox1.List(Me.ListBox1.ListIndex, 13)
        .txt_cuenta = Sheets("PROVEEDORES").Range("ColumnaDondeEstaElDato" & existe) 'Me.ListBox1.List(Me.ListBox1.ListIndex, 14)
        .txt_observaciones = Sheets("PROVEEDORES").Range("ColumnaDondeEstaElDato" & existe) 'Me.ListBox1.List(Me.ListBox1.ListIndex, 15)
        .Show
    End With
End Sub

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 306
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por fjpg (93 intervenciones) el 01/09/2019 11:50:37
IMPRESIONANTE. Funciona a la perfección
Sin vuestra ayuda, ni de coña sacaría este proyecto.

MUY AGRADECIDO!!!!! GRACIAS!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 306
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por fjpg (93 intervenciones) el 07/09/2019 12:04:40
Hola, buenas..

Acabo de darme cuenta, que el codigo para eliminar hay algo que falla.
No me elimina el item que yo selecciono en el listbox. Tiene vida propia y elimina lo que quiere.

En el frm_articulos selecciono un item del listbox, click en eliminar, pero elimina el que le da la gana!!! Que cabron este codigo!!!! JEJEJEJEJEJE...

Dejo el excel tal cual lo tengo, a ver si podeis echarme una mano.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de MIGUEL
Val: 489
Plata
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por MIGUEL (101 intervenciones) el 07/09/2019 18:43:42
Buenas fjpg

El error esta en que se movió la columna del código y no se cambio la instrucción en la macro para eliminar, antes el código estaba en la columna A y ahora esta en la B, de la misma forma en el listbox cambio de la columna 0 a la 1,por este motivo buscaba el nombre del proveedor en vez de el N° de código del articulo, y borraba el primer articulo que le coincide con el nombre del proveedor, te dejo el archivo corregido

Tengo problemas para adjuntar el archivo pero solo tienes que modificar la siguiente linea dentro de la macro para eliminar

Cambiar la A por la B y el 0 por el 1
1
existe = FEP("ARTICULOS", Me.ListBox1.List(Me.ListBox1.ListIndex,1), "B1:B" & ultfila)


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 306
Bronce
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Busqueda en listbox, seleccionar un item y pasar info a otro form

Publicado por fjpg (93 intervenciones) el 07/09/2019 18:59:01
Una vez mas perfecto....

Si, puede ser que hiciera algunas modificaciones, en estos casos intento adaptar el codigo a esas modificaciones, pero eso se paso..

GRACIAS CRACK!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar