microsoft excel-vba

microsoft excel-vba

Soy nuevo en VBA y estaba intentando escribir código para buscar 5 nombres (en la hoja 2), en la hoja 1 tengo pocos nombres, usando For Loop.

Pero mientras ejecuta esto, el código da error,

variable de objeto o con variable de bloque no establecida

¿Cómo me deshago de él?

Sub find()
    Sheets("sheet2").Activate
    For x = 1 To 5
        Cells(x, 1).Select
        var1 = Selection.Copy
        Sheets("sheet1").Activate
        Dim search As Range
        Set search = range("a1:f9").find(var1).Activate
    Next
End Sub

Respuesta1

Puede utilizar este código VBA modificado, que le ayudará a hacer coincidir y devolver nombres entre dos hojas.

Antes de EJECUTAR la macro:

ingrese la descripción de la imagen aquí

   Sub QuickSearch()

    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim rng1 As Range

    Set ws1 = Sheets(1)
    Set ws2 = Sheets(2)
    Set rng1 = ws2.Range(ws2.[a2], ws2.Cells(Rows.Count, "A").End(xlUp))

    With rng1.Offset(0, 1)
        .FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-1],Sheet10!C[-1]:C,1,FALSE),"""")"
        .Value = .Value
    End With

End Sub
  • Podrás ingresar este código con cualquiera de las Hojas como Módulo Estándar.

Después de ejecutar la macro:

ingrese la descripción de la imagen aquí

NÓTESE BIEN

ws2.Range(ws2.[a2], ws2.Cells(Rows.Count, "A").End(xlUp))
  • En esta línea de código [a2](referencia de celda) y "A"(nombre de columna) son editables.

Respuesta2

Selection.Copyes unobjeto, entonces el comando

var1 = Selection.Copy

produce su error - tiene que ser

Set var1 = Selection.Copy

Pero no es lo que querías, queríasel contenido (texto) de la selección en su variablevar1.

Entonces usa

var1 = Selection.Text

en cambio.

información relacionada