Visual Basic para Aplicaciones - mostrar solo las celdas activas

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

mostrar solo las celdas activas

Publicado por Ruben (7 intervenciones) el 13/05/2023 00:36:33
Hola Amigos,
Buenas Noches.

Como puedo mostrar datos de celdas activas en un ComboBox1 y que no me muestre las celdas que están ocultas, aun no he logrado dar con el Código, no sé si esto es posible.
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 Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

mostrar solo las celdas activas

Publicado por Antoni Masana (498 intervenciones) el 13/05/2023 22:56:47
Sube el libro y cuenta que quieres hacer.

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

mostrar solo las celdas activas

Publicado por Ruben (7 intervenciones) el 13/05/2023 23:49:17
Hola,
Tengo un formulario del cual solo muestra datos de la hoja3 y antes de llamar al formulario aplico un filtro en la hoja después ejecuto el formulario.

El problema es que a pesar de que en la hoja3 me muestran correctamente los datos en el combobox1 salen todos los registros y no solo los filtrados también los ocultos independiente del filtro que realice en las columnas.

En la hoja adjunta tengo un filtro en la columna F.
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 Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

mostrar solo las celdas activas

Publicado por Antoni Masana (498 intervenciones) el 14/05/2023 02:06:41
Dale un vistazo a esta función:

1
2
3
4
5
6
7
8
9
10
Sub LoopSpecialTypeVisible()
    Dim celda As Range, rng As Range
    'definimos el rango a recorrer.. que será un campo cualquiera de la tabla
    Set rng = Range("Tabla5[ID]")
    'recorremos ese rango.. pero solo aquellas celdas visibles!!
    For Each celda In rng.SpecialCells(xlCellTypeVisible)
        'llevamos la dirección de la celda a la Ventana de inmediato
        Debug.Print celda.Address
    Next celda
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
0
Comentar
sin imagen de perfil

mostrar solo las celdas activas

Publicado por Ruben (7 intervenciones) el 14/05/2023 22:04:27
Hola,
Muchas gracias por tu aporte y ayuda pero aún no logro que solo muestre los datos filtrados, me sigue mostrando todos los registros.
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 Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

mostrar solo las celdas activas

Publicado por Antoni Masana (498 intervenciones) el 16/05/2023 17:39:27
Sustituye esto:

1
2
3
Private Sub UserForm_Initialize()
    ComboBox1.RowSource = "'" & Hoja3.Name & "'!C3:T" & Hoja3.Range("B" & Rows.Count).End(xlUp).Row
End Sub

Por esto:

1
2
3
4
5
6
7
8
9
10
Private Sub UserForm_Initialize()
    Dim celda As Range, rng As Range
    'definimos el rango a recorrer.. que será un campo cualquiera de la tabla
    Set rng = Range("Tabla5[Material]")
    'recorremos ese rango.. pero solo aquellas celdas visibles!!
    For Each celda In rng.SpecialCells(xlCellTypeVisible)
        'llevamos la dirección de la celda a la Ventana de inmediato
        ComboBox1.AddItem Range(celda.Address)
    Next celda
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

mostrar solo las celdas activas

Publicado por Ruben (7 intervenciones) el 16/05/2023 22:51:50
Hola,
Antoni, muchas gracias por tu respuesta, efectivamente me muestra solo los datos filtrados, solo que al seleccionar el dato en el combobox me da el siguiente mensaje:
Se ha producido el error -2147024809(80070057) en tiempo de ejecución: No se puede obtener la propiedad List. Argumento no valido.
después me pide depurar y me marca en amarillo el TextBox9 = ComboBox1.List(ComboBox1.ListIndex, 9 + 2).


Private Sub ComboBox1_Change()
If Not ComboBox1.ListIndex = -1 Then
TextBox1 = ComboBox1.List(ComboBox1.ListIndex, 1)
TextBox3 = ComboBox1.List(ComboBox1.ListIndex, 3)
TextBox4 = ComboBox1.List(ComboBox1.ListIndex, 4)
TextBox5 = ComboBox1.List(ComboBox1.ListIndex, 5)
TextBox6 = ComboBox1.List(ComboBox1.ListIndex, 6)
TextBox7 = ComboBox1.List(ComboBox1.ListIndex, 7)
TextBox8 = ComboBox1.List(ComboBox1.ListIndex, 8)
TextBox9 = ComboBox1.List(ComboBox1.ListIndex, 9 + 2)
TextBox10 = ComboBox1.List(ComboBox1.ListIndex, 10)
TextBox11 = ComboBox1.List(ComboBox1.ListIndex, 11 + 1)
TextBox12 = ComboBox1.List(ComboBox1.ListIndex, 12 + 1)
TextBox13 = ComboBox1.List(ComboBox1.ListIndex, 13 + 4)
Else
TextBox1 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
TextBox6 = ""
TextBox7 = ""
TextBox8 = ""
TextBox9 = ""
TextBox10 = ""
TextBox11 = ""
TextBox12 = ""
TextBox13 = ""
End If

End Sub
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 Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

mostrar solo las celdas activas

Publicado por Antoni Masana (498 intervenciones) el 17/05/2023 12:28:31
Cambia el procedimiento por este:

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
Private Sub ComboBox1_Change()
    Dim Fila As Long
 
    If Not ComboBox1.ListIndex = -1 Then
        Fila = 2
        While Cells(Fila, "C") <> ComboBox1.Text
            Fila = Fila + 1
        Wend
 
        TextBox1 = Cells(Fila, "D") ' ComboBox1.List(ComboBox1.ListIndex, 1)
        TextBox3 = Cells(Fila, "F") ' ComboBox1.List(ComboBox1.ListIndex, 3)
        TextBox4 = Cells(Fila, "G") ' ComboBox1.List(ComboBox1.ListIndex, 4)
        TextBox5 = Cells(Fila, "H") ' ComboBox1.List(ComboBox1.ListIndex, 5)
        TextBox6 = Cells(Fila, "I") ' ComboBox1.List(ComboBox1.ListIndex, 6)
        TextBox7 = Cells(Fila, "J") ' ComboBox1.List(ComboBox1.ListIndex, 7)
        TextBox8 = Cells(Fila, "K") ' ComboBox1.List(ComboBox1.ListIndex, 8)
        TextBox9 = Cells(Fila, "N") ' ComboBox1.List(ComboBox1.ListIndex, 9 + 2)
        TextBox10 = Cells(Fila, "M") ' ComboBox1.List(ComboBox1.ListIndex, 10)
        TextBox11 = Cells(Fila, "O") ' ComboBox1.List(ComboBox1.ListIndex, 11 + 1)
        TextBox12 = Cells(Fila, "P") ' ComboBox1.List(ComboBox1.ListIndex, 12 + 1)
        TextBox13 = Cells(Fila, "T") ' ComboBox1.List(ComboBox1.ListIndex, 13 + 4)
    Else
        TextBox1 = ""
        TextBox3 = ""
        TextBox4 = ""
        TextBox5 = ""
        TextBox6 = ""
        TextBox7 = ""
        TextBox8 = ""
        TextBox9 = ""
        TextBox10 = ""
        TextBox11 = ""
        TextBox12 = ""
        TextBox13 = ""
    End If
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

mostrar solo las celdas activas

Publicado por Ruben (7 intervenciones) el 17/05/2023 13:53:07
Hola Antoni,

Con este cambio ejecuto el formulario sin errores, tema resuelto.

Muchas gracias

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