Pegar información en otra hoja = error '1004' en tiempo de ejecución

buenas tardes, he tratado de generar un código que me permita realizar búsquedas en las hojas de un libro de excel de acuerdo a un criterio de búsqueda en la hoja 1, en este caso el nombre de un funcionario, la idea es que de acuerdo al nombre se me ubique en la hojaX (2,3,4,etc) en donde tengo la base de este funcionario (cada funcionario tiene una hoja donde reposan datos de el) y pegue información especifica de las celdas que en la hoja 1 están relacionadas con este funcionario.

como en la hoja1 tengo la base general con mas de 10mil entradas y cada hoja desde la 2 hasta la 22 esta asignada a un funcionario especifico yo inicie un recorrido FOR con un condicional IF, entonces me recorre la base grande y de acuerdo al nombre del funcionario me abre la hoja que este tiene asignada, antes de abrir la hoja asignada al funcionario el copia una información de la hoja 1, una ves copiada la información la pega A PARTIR DE UNA CELDA ESPECIFICA en la hojaX del funcionarioX.

pensé que iba a ser mas sencillo... La macro me hace el recorrido y me abre la hojaX del funcionario X no sin antes copiar la información de las celdas que le pido, el problema se genera cuando le pido en la siguiente linea de programación que me pegue esa información copiada de la hoja1 en una CELDA ESPECIFICA de la hojaX.. Me sale "SE HA PRODUCIDO ERROR '1004' EN TIEMPO DE EJECUCIÓN - ERROR POR LA APLICACIÓN O EL OBJETÓ"..

EL CÓDIGO ES EL SIGUIENTE:

Private Sub CommandButton1_Click()


For a = 1 To 11
If Cells(a, 6) = "natalia" Then
Range("A5,C5,E5").Select
Selection.Copy


Sheets("Hoja2").Select
Range("A16").Select (EL ERROR SURGE ACA)


ActiveSheet.Paste


End IF


Sheets("hoja1").Activate
Next a
End Sub

acabo de caer en cuenta de que la información que me trae capiada de la base de la hoja1 va cambiando y en este caso la tengo fija (Range("A5,C5,E5").Select) como podría relacionar esa información con la variable a del recorrido FOR???

MUCHÍSIMAS GRACIAS DE ANTEMANO POR LA AYUDA PRESTADA.

1 Respuesta

Respuesta
1

¿Pero quieres que empiece el ciclo en la fila 1 o en la fila 5?

Saludos. Dante Amor

desde el 1, lo que pasa es que me apoye con el código que me arrojo excel al grabar la macro.. pero pues esa linea de código no sirve porque es estático y las celdas van cambiando a medida que avanza el recorrido

Esta sería la macro:

Private Sub CommandButton1_Click()
'Mod.Por.DAM
Set h2 = Sheets("Hoja2")
For i = 1 To 11
    If Cells(i, 6) = "natalia" Then
        Range("A" & i & ",C" & i & ",E" & i).Copy h2.Range("A" & h2.Range("A" & Rows.Count).End(xlUp).Row + 1)
    End If
Next
End Sub

No supe cuál es la fila destino, ya que va a copiar varias filas, te lo puse para que copie en la última fila vacía de la columna "A"

Saludos. Dante Amor
Si es lo que necesitas.

Muchas gracias por tu ayuda, te cuento que el código funciona, pero la información no siempre se pegara en la hoja2, como te decía el lugar en que esta información se pega depende del nombre del funcionario, por eso tenia un condicional con el nombre del funcionario antes de iniciar el recorrido, en este caso tu inicias con un SET HOJA2 y después si inicias el recorrido y buscas coincidencia, como puedo hacer si ahora agrego el funcionario "manuel" en la base principal y esta ves necesito que esa información correspondiente a el se pegue en la hoja3 en lugar de la hoja2 de la funcionaria natalia??? muchas gracias por al atención.

Crea una hoja y cámbiale el nombre a "lista", en esa hoja "lista" arma una lista relacionando el nombre del funcionario y su hoja, por ejemplo

A B

1 NOMBRE HOJA

2 natalia hoja2

3 manuel hoja3

4 etc

Con la siguiente macro, cada fila de la base busca al funcionario en la hoja "lista" y obtiene la hoja que le corresponde, de esta forma, esa fila será copiada a la hoja del funcionario y la pega en la últma fila disponible de la columna "A".

Private Sub CommandButton1_Click()
'Mod.Por.DAM
Set h1 = Sheets("lista")
For i = 1 To 11
    Set b = h1.Range("A:A").Find(Cells(i, 6))
    If Not b Is Nothing Then
        hoja = h1.Cells(b.Row, "B")
        If hoja <> "" Then
            Set h2 = Sheets(hoja)
            Range("A" & i & ",C" & i & ",E" & i).Copy h2.Range("A" & h2.Range("A" & Rows.Count).End(xlUp).Row + 1)
        End If
    End If
Next
End Sub

Saludos.Dante Amor
Si es lo que necesitas.

perfecto¡ muchisimas gracias, podrias darme una breve explicacion del codigo? si no, no te preocupes yo finalizo la pregunta, solo que realmente me interesa aprender y comprender y no solo copiar y pegar sin tener idea de lo que esta haciendo el codigo. MUCHISIMAS GRACIAS POR TU AYUDA¡

Ahí va la explicación

Private Sub CommandButton1_Click()
'Mod.Por.DAM
'Establece que h1 es igual al objeto sheets("lista"),
'en lugar de poner por ejemplo sheets("lista").select, basta con que ponga h1.select
'es para abreviar el código y hacerlo más práctico, sobre todo si h1 lo vas a ocupar varias veces
Set h1 = Sheets("lista")
'incia el ciclo
For i = 1 To 11
    'se establece que b será el resultado de una búsqueda
 'si se encuentra, entonces b será el objeto de la celda encontrada,
 'es como si le dijeramos que b es igual al objeto de una celda,
 'en este caso a la celda del resultado de la búsqueda
    Set b = h1.Range("A:A").Find(Cells(i, 6))
    'si el el objeto b no está vacío, entonces, quiere decir si encontró algo
    If Not b Is Nothing Then
        'la variable hoja será igual a lo que tenga h1, en la fila del objeto b y la columna "B"
        hoja = h1.Cells(b.Row, "B")
        'esta validación la puse porque si el nombre que encontró no tiene hoja en la lista
 'entonces que no haga nada, pero si es diferente de espacios, entoces que continúe
        If hoja <> "" Then
            'se establece que h2 es el objeto de sheets(y la hoja que se encontró en la lista)
            Set h2 = Sheets(hoja)
            'copia las celdas A, B y E de la fila i a la hoja h2 en la última fila vacía de la columna A
            Range("A" & i & ",C" & i & ",E" & i).Copy h2.Range("A" & h2.Range("A" & Rows.Count).End(xlUp).Row + 1)
        End If
    End If
Next
End Sub

Saludos. Dante Amor
No olvides finalizar la pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas