Error en listbox al traer valores de una columna con la formula buscarv de una tabla en Excel vba

B días,

Todoexpertos me he encontrado un problema y la verdad no se como resolverlo. Actualmente estoy intentando traer varias columnas a una listbox a partir del siguiente código.

Private Sub UserForm_Initialize()
TextBox1.Value = Date
TextBox4.Value = Date
TextBox9.Value = Date
TextBox2 = Format(Time, "hh:mm")
TextBox6 = Format(Time, "hh:mm")
TextBox8 = Format(Time, "hh:mm")
OptionButton1 = True
With ComboBox1
    .AddItem "SIN PROCESAR"
    .AddItem "PROCESADO"
End With
With ComboBox2
    .AddItem "SIN PROCESAR"
    .AddItem "PROCESADO"
End With
ComboBox1 = "SIN PROCESAR"
ComboBox2 = "SIN PROCESAR"
ListBox1.Clear
valor = ComboBox1.Value
Sheets("CICLO FACTURACION").Select
Set busca = Sheets("CICLO FACTURACION").Range("k:k").Find(valor, LookIn:=xlValues, lookat:=xlPart)
If Not busca Is Nothing Then
ubica = busca.Address
Do
ubica2 = "$A$" & busca.Row
ListBox1.AddItem Range(ubica2)
i = ListBox1.ListCount - 1
ListBox1.List(i, 1) = Range(ubica2).Offset(0, 1)
ListBox1.List(ListBox1.ListCount - 1, 1) = Range(ubica2).Offset(0, 13)
ListBox1.List(i, 2) = Range(ubica2).Offset(0, 12)
ListBox1.List(i, 3) = Range(ubica2).Offset(0, 20)
Set busca = Sheets("CICLO FACTURACION").Range("k:k").FindNext(busca)
Loop While Not busca Is Nothing And busca.Address <> ubica
End If
End Sub

_________________________________________________________________

El error que genera al traer la columna 20 (columna que tiene la formula buscarv) es el de la siguiene imagen.

1 Respuesta

Respuesta
2

H o l a : Si la fórmula BuscarV no encuentra el valor, entonces en la celda te pone el error #N/A 

Cuando intentas cargar el error en el listbox, te envía el error "No se puede configurar la propiedad List".

Puedes solucionarlo de las siguientes formas:

Opción 1. 

Corrige la fórmula BuscarV, para que en caso de error te ponga un texto, por ejemplo, si tienes una fórmula como esto:

=BUSCARV(T3;Hoja3!C:D;2;0)

Puedes corregirla como esto:

=SI.ERROR(BUSCARV(T3;Hoja3!C:D;2;0);"no encontrado")

En caso de que BuscarV no encuentre el valor, te pondrá el texto "no encontrado", o puedes cambiarlo por el texto que quieras.


Opción 2.

Agregar la instrucción On Error Resume Next al código:

    Set busca = Sheets("CICLO FACTURACION").Range("k:k").Find(valor, LookIn:=xlValues, lookat:=xlPart)
    If Not busca Is Nothing Then
        ubica = busca.Address
        '
        On Error Resume Next
        '
        Do
            ubica2 = "$A$" & busca.Row
            ListBox1.AddItem Range(ubica2)
            i = ListBox1.ListCount - 1
            ListBox1.List(i, 1) = Range(ubica2).Offset(0, 1)
            ListBox1.List(ListBox1.ListCount - 1, 1) = Range(ubica2).Offset(0, 13)
            ListBox1.List(i, 2) = Range(ubica2).Offset(0, 12)
            ListBox1.List(i, 3) = Range(ubica2).Offset(0, 20)
            Set busca = Sheets("CICLO FACTURACION").Range("k:k").FindNext(busca)
        Loop While Not busca Is Nothing And busca.Address <> ubica
        '
        On Error GoTo 0
    End If

Lo que hace la instrucción es omitir cualquier error y continuar con la ejecución. La instrucción On Error Goto 0 , activa nuevamente el control de errores.


Opción 3.

Revisar si hay error en la celda con la instrucción IsError()

    Set busca = Sheets("CICLO FACTURACION").Range("k:k").Find(valor, LookIn:=xlValues, lookat:=xlPart)
    If Not busca Is Nothing Then
        ubica = busca.Address
        Do
            ubica2 = "$A$" & busca.Row
            ListBox1.AddItem Range(ubica2)
            i = ListBox1.ListCount - 1
            ListBox1.List(i, 1) = Range(ubica2).Offset(0, 1)
            ListBox1.List(ListBox1.ListCount - 1, 1) = Range(ubica2).Offset(0, 13)
            ListBox1.List(i, 2) = Range(ubica2).Offset(0, 12)
            If Not IsError(Range(ubica2).Offset(0, 20)) Then
                ListBox1.List(i, 3) = Range(ubica2).Offset(0, 20)
            End If
            Set busca = Sheets("CICLO FACTURACION").Range("k:k").FindNext(busca)
        Loop While Not busca Is Nothing And busca.Address <> ubica
    End If

Si no hay error en la celda, entonces carga el dato en el listbox, si hay error, no carga.


Si no quieres modificar las fórmulas, te recomiendo que utilices la opción 3.


'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

¡Gracias! Solucionado con esta opción. Uf que bien. Gracias Dante por tu ayuda.

If Not IsError(Range(ubica2).Offset(0, 20)) Then
                ListBox1.List(i, 3) = Range(ubica2).Offset(0, 20)
            End If

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas