Crear macro en hoja activa (de libro activo) para importar los datos que yo quiero desde otra hoja de un libro externo

Estimada red consulta, apelando a mis pocos conocimiento "VSB" necesito saber si es posible realizar una macro de un libro activo (personal) para copiar los datos que yo quiero (mejor si existe un cuadro de dialogo que me indique que "hoja" del libro externo quiero copiar y que rango de datos de la misma) desde las hojas (a elección ya que están por mes del año) desde un archivo de libro externo. Para realizar la acción yo los ubicaría en una carpeta personal sobre el escritorio de mi computadora.

1 respuesta

Respuesta
1

Te anexo la macro, que realiza lo siguiente:

  1. Ejecutas la macro
  2. Te solicita abrir el libro externo, iniciando en la carpeta del escritorio
  3. Selecciona un libro
  4. La macro abre el libro seleccionado
  5. Selecciona la hoja del libro externo
  6. Debes seleccionar el rango a copiar
  7. Ahora, en el libro activo, debes seleccionar una hoja
  8. Seleccionar la celda en donde quieres la importación
  9. Presiona aceptar para importar
Sub Importar_Datos_Otro_Libro()
'Por.Dante Amor
    Set l1 = ThisWorkbook
    'Referencia: http://www.ozgrid.com/forum/showthread.php?t=24985
    On Error Resume Next
    Set ObjShell = CreateObject("WScript.Shell")
        escritorio = ObjShell.SpecialFolders("Desktop")
    Set ObjShell = Nothing
    On Error GoTo 0
    '
    If escritorio <> "" Then ruta = escritorio Else ruta = l1.Path
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Seleccione archivo externo de excel"
        .Filters.Clear
        .Filters.Add "All Files", "*.*"
        .Filters.Add "xls.*", "*.xls*"
        .FilterIndex = 2
        .AllowMultiSelect = False
        .InitialFileName = ruta & "\"
        If .Show Then
            Set l2 = Workbooks.Open(.SelectedItems.Item(1))
            On Error Resume Next
            variable = l2.Name
            hoja = l2.Sheets(1).Name
            With Application
                Set libro2 = .InputBox("SELECCIONE LAS CELDAS A IMPORTAR ", "LIBRO EXTERNO", _
                    Default:="[" & variable & "]" & hoja & "!$A$1", Type:=8)
                If libro2 Is Nothing Then Exit Sub
            End With
            celda_2 = libro2.Address
            hoja_2 = libro2.Worksheet.Name
            libro_2 = libro2.Worksheet.Parent.Name
            '
            l1.Activate
            With Application
                Set libro1 = .InputBox("SELECCIONE CELDA DONDE QUIERE PEGAR ", "LIBRO1", _
                    Default:=Selection.Address, Type:=8)
                If libro1 Is Nothing Then Exit Sub
            End With
            celda_1 = libro1.Address
            hoja_1 = libro1.Worksheet.Name
            libro_1 = libro1.Worksheet.Parent.Name
            On Error GoTo 0
            '
            'copiar
            l2.Sheets(hoja_2).Range(celda_2).Copy
            l1.Sheets(hoja_1).Range(celda_1).PasteSpecial xlPasteValuesAndNumberFormats
            '
            l2.Close False
            MsgBox "Datos importados"
        End If
    End With
End Sub

.

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

.

Avísame cualquier duda

.

¡Gracias! La verdad que viendo lo que escribiste en el código me doy cuenta que sé muy poco! Te agradezco de corazón lo voy a probar al instante y te comento nuevamente.

Muchas gracias Dante por compartir tu saber, tienes el cielo ganado!

Saludos;

Dante, anduvo todo perfecto. Ahora mi pregunta es la siguiente, si yo quisiera que los contenidos de las celdas destinos se modifiquen si altero los de la celdas origen del libro externo, ¿puedo hacerlo eso con una macro o algún hipervínculo o como?

Muchas gracias Dante!

Saludos

Con todo gusto te ayudo con todas tus peticiones. Crea una nueva pregunta y describe con detalle qué necesitas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas