Problema: la macro no me copia los datos al libro elegido

Tengo una macro que me debería de copiar los datos que tengo en un formulario a un libro que yo elija. Pero en vez de eso me abre el libro que yo elijo pero me abre también un libro 2, 3, 4... Y me agrega en este ultimo los datos del formulario.

Este es el código:

Sub Copiar_Datos()

Dim Filename As Workbook

If MsgBox("¿Copiar datos?", vbYesNo, "¿Qué hacemos?") = vbYes Then

ChDir "C:\Libros excel"

Workbooks.Open Filename:=Application.GetOpenFilename(Hoja Excel , *.xls*, _
, Seleccionar archivos excel.)

ThisWorkbook.Activate

Dim Libro_formulario, Libro_backup As workbook

Set Libro_formulario = ThisWorkbook

Workbooks.add

Set Libro_backup = ActiveWorkbook

Libro_backup.sheets(2).Range("G72")

   Libro_formulario.Sheets("1").Range("B1").Value

Libro_backup.sheets(2).Range("h25")

    Libro_formulario.Sheets("1").Range("B2").Value

Libro_backup.sheets(1).Range("B15")

   Libro_formulario.Sheets("1").Range("B3").Value

End If

End Sub

En la carpeta "C:\Libros excel" tengo varios libros con diferentes nombres, me gustaría elegir uno cualquiera y que ese que abro pegue los datos que tiene las celdas del libro principal Formulario.

Respuesta
1

Te anexo la macro actualizada.

El libro que abras deberá tener por lo menos 2 hojas.

Según tu macro copia las celdas B1, B2 y B3 al libro destino en al hoja2 en las celdas G72, H25 y B15.

Si es algo diferente de eso, tendrás que especificar cuáles celdas se deben copiar y en dónde se deben pegar.

Si abres un libro que no tiene 2 hojas, te va a enviar el mensaje de error 9 "subíndice fuera del intervalo".

Sub Copiar_Datos()
'---
'   Por.Dante Amor
'---
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    If MsgBox("¿Copiar datos?", vbYesNo, "¿Qué hacemos?") = vbNo Then Exit Sub
    '
    ruta = "C:\Libros excel\"
    ruta = "C:\trabajo\"
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("1")
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Seleccione archivo de excel"
        .Filters.Clear
        .Filters.Add "archivos de excel", "*.xls*"
        .AllowMultiSelect = False
        .InitialFileName = ruta
        If .Show Then
            Set l2 = Workbooks.Open(.SelectedItems.Item(1))
            Set h2 = l2.Sheets(2)
            'copiar celdas
            h2.Range("G72") = h1.Range("B1").Value
            h2.Range("H25") = h1.Range("B2").Value
            h2.Range("B15") = h1.Range("B3").Value
            l2.Close True
            MsgBox "Libro actualizado"
        End If
    End With
    Application.DisplayAlerts = True
End Sub

Prueba y me comentas.

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

Hola Dante lo primero gracias.

He probado el código y es cierto me sale: error 9 "subíndice fuera del intervalo". Al depurar, me marca la siguiente linea en amarillo Set h1 = l1.Sheets("1"). El libro que he abierto tiene Hoja 1 y Hoja 2, el libro del formulario que es donde tengo la macro también tiene 2 hojas. Los datos a copiar sería así.

Libro formulario                Libro X

(h1)B1 ----------------------------> (h2)G72

(h1)B2 ----------------------------> (h2)H25

(h1)B3 ----------------------------> (h1)B15

(h1)B4 ----------------------------> (h1)L3

(h1)B5 ----------------------------> (h2)A3

Otra cosa, en el código que me has proporcionado no me sale ningún explorador de archivos para buscar yo el archivo que voy abrir, con esto si me dejaba:

ChDir "C:\Libros excel"

Workbooks.Open Filename:=Application.GetOpenFilename(Hoja Excel , *.xls*, _
, Seleccionar archivos excel.)

Un saludo.

No te sale el explorador, porque se detuvo antes.

Según tu macro, en el libro origen debes tener una hoja llamada "1"

Si no se llama "1", entonces cambia en la macro, en esta línea, el "1" por el nombre de la hoja que contiene los datos a copiar (el nombre de tu hoja debe quedar entre comillas).

Set h1 = l1.Sheets("1")

macro

Sub Copiar_Datos()
'---
'   Por.Dante Amor
'---
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    If MsgBox("¿Copiar datos?", vbYesNo, "¿Qué hacemos?") = vbNo Then Exit Sub
    '
    ruta = "C:\Libros excel\"
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("1")
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Seleccione archivo de excel"
        .Filters.Clear
        .Filters.Add "archivos de excel", "*.xls*"
        .AllowMultiSelect = False
        .InitialFileName = ruta
        If .Show Then
            Set l2 = Workbooks.Open(.SelectedItems.Item(1))
            Set h2 = l2.Sheets(2)
            'copiar celdas
            h2.Range("G72") = h1.Range("B1").Value
            h2.Range("H25") = h1.Range("B2").Value
            h2.Range("B15") = h1.Range("B3").Value
            h2.Range("L3") = h1.Range("B4").Value
            h2.Range("A3") = h1.Range("B5").Value
            l2.Close True
            MsgBox "Libro actualizado"
        End If
    End With
    Application.DisplayAlerts = True
End Sub

Corrige el nombre de tu hoja y ya te va a aparecer el explorador.

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

Hola Dante, tenias razón el problema era el nombre de la hoja le puse "form" y me funciono todo perfecto menos: 

h2.Range("B15") = h1.Range("B3").Value
h2.Range("L3") = h1.Range("B4").Value

Aquí estas dos son en la hoja 1 del libro que yo he abierto, si lo dejo tal cual me copia como es obvio en la hoja 2 pero si le pongo h1.Range me lo copia en la hoja 1 del libro formulario y no en la hoja 1 del libro que he abierto. Lo demás funciona perfectamente.

Un saludo

Cambia en la macro esta línea

Set h2 = l2.Sheets(2)

Por esta

Set h2 = l2.Sheets(1)

De esa forma te va a poner los datos en la hoja1 del libro destino

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

Perdona por la paliza que te estoy dando :P.

He cambiado esa línea y si pongo 

Set h2 = l2.Sheets(1)

Me cambia todo en el libro destino en la hoja 1 y en la hoja 2 nada .

La macro tuya, tienes ciertas cosas, de ahí tomé las referencias.

Entonces, mejor explícame qué quieres hacer, utiliza ejemplos reales, olvídate de la macro, solamente utiliza ejemplos, con nombres de libros reales, nombres de hojas reales, referencias de celdas reales.

Si es muy complicado explicar lo que necesitas, envíame tus archivos y me explicas en las hojas con comentarios, colores y ejemplos reales, lo que tienes y lo que esperas como resultado. Entre más clara sea la explicación, más práctico será hacer la macro.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “fr1ki r3d” y el título de esta pregunta.

No has valorado la respuesta.

Te envié varias adecuaciones, todas de acuerdo a tus solicitudes, copia información de la primera hoja del libro abierto a tu primera hoja que tiene la macro

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

1 respuesta más de otro experto

Respuesta
1

Te puede ayudar a armar tu macro este ejemplo que permite seleccionar el libro

http://www.programarexcel.com/2014/02/buscar-archivo-en-directorio-y-si-no.html

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas