Macros para buscar cadena de texto

Estoy haciendo una macros para buscar datos de una columna y después pegar toda la fila a otra celda, todo dentro de la misma hoja, quiero modificar el código para que el resultado lo pegue en otra hoja pero no me resulta, por favor si alguien me ayuda, este es el código pero no resulta:

Sub Buscar()
'dimensiones
Dim lngUltimaFila As Long
Dim strObjetoBuscar As String
Dim lngResultado As Long
Dim lngColumna As Long, lngFila As Long
Dim lngPegarColumna As Long, lngPegarFila As Long
Dim x As Integer, n As Integer
Dim cantColum As Long
'columna + fila donde empezar/terminar búsqueda
lngColumna = Sheets(1).Range("E5").Value
lngFila = Sheets(1).Range("E3").Value
lngUltimaFila = Sheets(1).Range("E4").Value
cantColum = Sheets(1).Range("H5").Value
'columna + fila donde empezar a pegar resultados
lngPegarColumna = Sheets(1).Range("H4").Value
lngPegarFila = Sheets(1).Range("H3").Value
'objeto a buscar
strObjetoBuscar = Sheets(1).Range("B3").Text
'minúsculas
strObjetoBuscar = LCase(strObjetoBuscar)
Sheets(1).Select
'bucle: realizar búsqueda
For n = lngFila To lngUltimaFila
'evaluación
lngResultado = InStr(1, Cells(n, lngColumna), strObjetoBuscar, vbTextCompare)
'copiar/pegar
If lngResultado > 0 Then
Range(Cells(n, 1), Cells(n, cantColum)).Copy
Sheets(2).Select
Range(Cells(lngPegarFila, lngPegarColumna), Cells(lngPegarFila, (lngPegarColumna + cantColum))).Select
ActiveSheet.Paste
Sheets(1).Select
lngPegarFila = lngPegarFila + 1
End If
Next n
End Sub

1 Respuesta

Respuesta
1

En primer lugar ya debe estar abierto, y su nombre guardado en una variable:

Workbooks. Open tu_ruta y tu nombre de libro

Como el libro abierto pasa a ser el libro activo, tendrás que guardar su nombre y volver a tu libro original :

libroDestino = activeWorkbook.name

Workbooks(libroOriginal). Activate 'reemplazá 'libroOriginal' x el nombre de tu libro

Luego en tu instrucción de pegado le agregás el libro:

Workbooks(libroDestino). Activate

ActiveWorkbook.Sheets(2).Select

Y todo lo que sigue

No olvides que ahora estás en li bro destino, tenés que volver a tu libro original.

PD) queda solo 1 semana para que termine la promo de los manuales 2010 !

gracias por tu respuesta, pero me gustaría hacerlo en el mismo libro, modifique el código pero me arroja el siguiente error "1004 error definido por la aplicación del objeto", por favor si puedes revisar cual es el problema con mi código:

Sub Buscar()
'dimensiones
Dim lngUltimaFila As Long
Dim strObjetoBuscar As String
Dim lngResultado As Long
Dim lngColumna As Long, lngFila As Long
Dim lngPegarColumna As Long, lngPegarFila As Long
Dim x As Integer, n As Integer
Dim cantColum As Long
'columna + fila donde empezar/terminar búsqueda
lngColumna = Sheets(1).Range("E5").Value
lngFila = Sheets(1).Range("E3").Value
lngUltimaFila = Sheets(1).Range("E4").Value
cantColum = Sheets(1).Range("H5").Value
'columna + fila donde empezar a pegar resultados
lngPegarColumna = Sheets(1).Range("H4").Value
lngPegarFila = Sheets(1).Range("H3").Value
'objeto a buscar
strObjetoBuscar = Sheets(1).Range("B3").Text
'minúsculas
strObjetoBuscar = LCase(strObjetoBuscar)
Sheets(1).Activate
'bucle: realizar búsqueda
For n = lngFila To lngUltimaFila
'evaluación
lngResultado = InStr(1, Cells(n, lngColumna), strObjetoBuscar, vbTextCompare)
'copiar/pegar
If lngResultado > 0 Then
ActiveSheet.Range(Cells(n, 1), Cells(n, cantColum)).Copy
Sheets(2).Activate
ActiveSheet.Range(Cells(lngPegarFila, lngPegarColumna), Cells(lngPegarFila, (lngPegarColumna + cantColum))).Select
ActiveSheet.Paste
Sheets(1).Select
lngPegarFila = lngPegarFila + 1
End If
Next n
End Sub

De antemano muchas gracias

Kano

Si disculpa, mencionaste otra hoja y yo leí otro libro ;(

Bien, tu macro activa la hoja 1, copia, activa la hoja 2, pega y selecciona la hoja 1 nuevamente. Le haría algunos ajustes para asegurarme de estar en la hoja correcta (va en negrita). Si luego te salta el depurador debieras indicarme en qué línea aparece el mensaje de error, para probarla:

Sheets(1).Select
'bucle: realizar búsqueda
For n = lngFila To lngUltimaFila
'evaluación
lngResultado = InStr(1, Cells(n, lngColumna), strObjetoBuscar, vbTextCompare)
'copiar/pegar
If lngResultado > 0 Then
ActiveSheet. Range(Cells(n, 1), Cells(n, cantColum)). Copy 'copia de hoja 1 a hoja 2
Sheets(2). Activate

' * A continuación seleccioná solo la 1er celda destino
ActiveSheet. Range(Cells(lngPegarFila, lngPegarColumna), Cells(lngPegarFila, (lngPegarColumna + cantColum))).Select
ActiveSheet. Paste
Sheets(1).Select 'vuelve a hoja 1

Para asegurarte que la hoja1 y 2 sean las correctas utilizá su nombre en lugar de su nro de índice.

Sdos

Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas