porque no se ejecuta el codigo para un listbox

Carlos Hernandez Mendez 0 Puntos de reputación
2025-01-16T17:10:11.56+00:00

Buen día amigos me encuentro creando un menu interactivo de inevntarios pero necesito agregarle una condicional a un listbox, solo que cuando lo ejecuto no me aparece nada en el listbox, este es el codigo que estoy haciendo me podrian decir que es lo que falla:

Private Sub UserForm_initialize()

If control2.Value = "Stock" Then

Me.ListBox1.RowSource = "inventarios"

Me.ListBox1.ColumnCount = 8

Me.ListBox1.RowSource = Clear

Me.ListBox1 = Clear

final_total = Sheet1.Range("c" & Rows.Count).End(xlUp).Row

Y = 0

For fila = 7 To final_total

Me.ListBox1.AddItem

Me.ListBox1.List(Y, 0) = ActiveSheet.Cells(fila, 3).Value

Me.ListBox1.List(Y, 1) = ActiveSheet.Cells(fila, 4).Value

Me.ListBox1.List(Y, 2) = ActiveSheet.Cells(fila, 5).Value

Me.ListBox1.List(Y, 3) = ActiveSheet.Cells(fila, 6).Value

Me.ListBox1.List(Y, 4) = ActiveSheet.Cells(fila, 7).Value

Me.ListBox1.List(Y, 5) = ActiveSheet.Cells(fila, 8).Value

Me.ListBox1.List(Y, 6) = ActiveSheet.Cells(fila, 9).Value

Me.ListBox1.List(Y, 7) = ActiveSheet.Cells(fila, 10).Value

Y = Y + 1

Next fila

End If

If control2.Value = "Movimientos" Then

Me.ListBox1.RowSource = "movi123"

Me.ListBox1.ColumnCount = 8

Me.ListBox1.RowSource = Clear

Me.ListBox1 = Clear

final_total = Sheet2.Range("b" & Rows.Count).End(xlUp).Row

Y = 0

For fila = 3 To final_total

Me.ListBox1.AddItem

Me.ListBox1.List(Y, 0) = ActiveSheet.Cells(fila, 2).Value

Me.ListBox1.List(Y, 1) = ActiveSheet.Cells(fila, 3).Value

Me.ListBox1.List(Y, 2) = ActiveSheet.Cells(fila, 4).Value

Me.ListBox1.List(Y, 3) = ActiveSheet.Cells(fila, 5).Value

Me.ListBox1.List(Y, 4) = ActiveSheet.Cells(fila, 6).Value

Me.ListBox1.List(Y, 5) = ActiveSheet.Cells(fila, 7).Value

Me.ListBox1.List(Y, 6) = ActiveSheet.Cells(fila, 8).Value

Me.ListBox1.List(Y, 7) = ActiveSheet.Cells(fila, 9).Value

Y = Y + 1

Next fila

End If

End Sub

Preguntas y respuestas (Q&A) de Microsoft
Preguntas y respuestas (Q&A) de Microsoft
Use esta etiqueta para compartir sugerencias, solicitudes de características y errores con el equipo de Microsoft Q&A. El equipo de Microsoft Q&A evaluará sus comentarios periódicamente y proporcionará actualizaciones a lo largo del proceso.
519 preguntas
0 comentarios No hay comentarios
{count} votos

2 respuestas

Ordenar por: Muy útil
  1. Luis Angel Ñañez Llanos 256 Puntos de reputación
    2025-01-16T17:42:02.88+00:00

    Hola Carlos buen día,

    Encuentro una primera mejora, permíteme comentarlo por favor, no cambia la lógica de lo que buscas, pero podría hacer más eficiente el código. Me refiero a las siguientes líneas:

    Me.ListBox1.RowSource = "inventarios"
    Me.ListBox1.ColumnCount = 8
    Me.ListBox1.RowSource = Clear
    

    Si limpiarás su propiedad RowSource con Clear, preferible no le asignes uno antes como el de "inventarios".

    Ahora bien, respecto a la problemática principal. Entiendo que en base a lo que seleccione en un control aparte como "control2" deseas que muestra una cosa u otra en tu listbox ListBox1, ¿es así?

    De ser así, todo ese código que compartes muévelo al evento AfterUpdate de dicho control "control2" en lugar del evento Intialize del formulario.
    De este modo, luego de que se actualice la información en "control2" como seleccionar alguna opción, correrá todo ese código que comentas. Así, podrá leer las nuevas fuentes de datos.

    Si lo haces en el evento initialize, solo lo leerá al momento de inicializar el formulario y nunca más se actualizará, en cambio con AfterUpdate de "control2" lo leerá por cada cambio que hagas en dicho control.

    Me haces saber si funciona por favor.

    Espero haberte ayudado, saludos desde Perú.


  2. Gao Chen 9,135 Puntos de reputación Personal externo de Microsoft
    2025-01-16T18:15:00.0166667+00:00

    Hola Carlos Hernandez Mendez

    ¡Bienvenido(a) a Microsoft Q&A!

    Por favor ten en cuenta que nosotros no soportamos código ni scripts sin embargo aquí te dejo algunos puntos que podrían estar causando problemas:

    1. Inicialización del ListBox: Parece que estás asignando RowSource y luego lo estás limpiando inmediatamente con Clear. Esto puede estar causando que no se muestre nada en el ListBox.
    2. Uso de ActiveSheet: En este caso, es mejor especificar la hoja de trabajo en lugar de usar ActiveSheet para evitar errores si la hoja activa cambia.
    3. Orden de las operaciones: Asegúrate de que las operaciones se realicen en el orden correcto. Primero limpia el ListBox, luego agrega los elementos.

    Aquí tienes una versión revisada de tu código:

    Private Sub UserForm_initialize()
    
        Me.ListBox1.Clear
        Me.ListBox1.ColumnCount = 8
    
        If control2.Value = "Stock" Then
            final_total = Sheet1.Range("c" & Rows.Count).End(xlUp).Row
            Y = 0
            For fila = 7 To final_total
                Me.ListBox1.AddItem
                Me.ListBox1.List(Y, 0) = Sheet1.Cells(fila, 3).Value
                Me.ListBox1.List(Y, 1) = Sheet1.Cells(fila, 4).Value
                Me.ListBox1.List(Y, 2) = Sheet1.Cells(fila, 5).Value
                Me.ListBox1.List(Y, 3) = Sheet1.Cells(fila, 6).Value
                Me.ListBox1.List(Y, 4) = Sheet1.Cells(fila, 7).Value
                Me.ListBox1.List(Y, 5) = Sheet1.Cells(fila, 8).Value
                Me.ListBox1.List(Y, 6) = Sheet1.Cells(fila, 9).Value
                Me.ListBox1.List(Y, 7) = Sheet1.Cells(fila, 10).Value
                Y = Y + 1
            Next fila
        End If
    
        If control2.Value = "Movimientos" Then
            final_total = Sheet2.Range("b" & Rows.Count).End(xlUp).Row
            Y = 0
            For fila = 3 To final_total
                Me.ListBox1.AddItem
                Me.ListBox1.List(Y, 0) = Sheet2.Cells(fila, 2).Value
                Me.ListBox1.List(Y, 1) = Sheet2.Cells(fila, 3).Value
                Me.ListBox1.List(Y, 2) = Sheet2.Cells(fila, 4).Value
                Me.ListBox1.List(Y, 3) = Sheet2.Cells(fila, 5).Value
                Me.ListBox1.List(Y, 4) = Sheet2.Cells(fila, 6).Value
                Me.ListBox1.List(Y, 5) = Sheet2.Cells(fila, 7).Value
                Me.ListBox1.List(Y, 6) = Sheet2.Cells(fila, 8).Value
                Me.ListBox1.List(Y, 7) = Sheet2.Cells(fila, 9).Value
                Y = Y + 1
            Next fila
        End If
    
    End Sub
    

    Espero que con esos cambios el código si te funcione. Si necesitas más asistencia, estoy a tu disposición.

    Atentamente,

    Gao


    Si esta respuesta resolvió tu consulta, por favor haz clic en 'Aceptar respuesta'. Esto nos ayuda a mejorar continuamente la calidad y relevancia de nuestras soluciones.


Su respuesta

Las respuestas se pueden marcar como respuestas aceptadas por el autor de la pregunta, lo que ayuda a los usuarios a conocer la respuesta que resolvió el problema del autor.