
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:
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:
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.Copy
es 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.