Como Seleccionar libro en Vba con el cual trabajar

Estoy Realizando un código para comparar datos de 2 workbooks diferentes

El primer paso selecciono celda del primer libro y guardo en variable lo que es nombre del libro y dirección de Celda, pero cuando quiero guardar datos del segundo libro, se vuelve a ejecutar el inputbox, pero no me deja cambiar de libro.. Solo me deja seleccionar la celda del primer libro.. Y ya no se como hacerle...

De Antemano Agradezco tu Ayuda dante..

Saludos!..

  With Application
        Set libro1= .InputBox("SELECCIONE CELDA DONDE QUIERE EMPEZAR A TRABAJAR ", "titulo", Default:=Selection.Address, Type:=8)
        If celda Is Nothing Then Exit Sub
    End With
        libro1.Select

  With Application
        Set libro2 = .InputBox("SELECCIONE CELDA DONDE QUIERE EMPEZAR A TRABAJAR ", "titulo", Default:=Selection.Address, Type:=8)
        If celda Is Nothing Then Exit Sub
    End With
   libro2.Select

1 Respuesta

Respuesta
1

Te anexo una propuesta:

Sub comparar2libros()
'Act.Por.Dante Amor
    On Error Resume Next
    With Application
        Set libro1 = .InputBox("SELECCIONE CELDA DONDE QUIERE EMPEZAR A TRABAJAR ", "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
    '
    With Application
        Set libro2 = .InputBox("SELECCIONE CELDA DONDE QUIERE EMPEZAR A TRABAJAR ", "LIBRO1", _
            Default:="[archivo2.xlsx]Hoja1!$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
End Sub

En la variable (objeto) libro1, tienes la información del primer libro, en este libro supongo que tienes la macro.

Ya en las variables celda_1, hoja_1 y libro_1 tienes la información de la celda, la hoja y el libro 1.

A continuación, para seleccionar el siguiente libro hay que ponerlo entre corchetes en el argumento Default:="[archivo2.xlsx]Hoja1!$A$1", tienes que poner el nombre del libro, yo puse en mi ejemplo archivo2.xlsx, pero en tu caso, tienes que poner el nombre completo de tu libro, además de que tiene que estar abierto; de esta forma el input se pasa al archivo2 y te permite seleccionar la hoja y la celda.

Ya en las siguientes variables celda_2, hoja_2 y libro_2 tienes la información de la celda, la hoja y el libro 2.


Avísame si tienes alguna duda.

Saludos. Dante Amor. Recuerda valorar la respuesta.

Hola Dante

gracias por la respuesta.. 

Pero no se puede Guardar el nombre en Una variable?? Cuando selecciono la celda de ese libro..

Nota: no siempre es el mismo libro...

Gracias por la respuesta Dante..

saludos!..

Si entiendo que no va a ser el mismo libro, pero es una limitación del Inputbox.

Solamente de esa forma te puedes ir a seleccionar a otro libro

Te anexo la macro actualizada con una variable para que pongas el otro libro, sin embargo tendrás que ponerlo en la macro.

Sub comparar2libros()
'Act.Por.Dante Amor
    On Error Resume Next
    With Application
        Set libro1 = .InputBox("SELECCIONE CELDA DONDE QUIERE EMPEZAR A TRABAJAR ", "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
    '
    variable = "archivo2.xlsx"
    With Application
        Set libro2 = .InputBox("SELECCIONE CELDA DONDE QUIERE EMPEZAR A TRABAJAR ", "LIBRO1", _
            Default:="[" & variable & "]Hoja1!$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
End Sub

Si quieres puedes tomar el nombre del libro de una celda, cambia esto

variable = "archivo2.xlsx"

Por esto:

variable = range("D5")

En D5 deberás poner archivo2.xlsx

De esa forma es más flexible.

Saludos. Dante Amor. Recuerda valorar la respuesta.

Dante

Se me ocurrió otra manera, no se si sea viable.. Antes de entrar a los inputbox ver cuanTos Workbooks están abiertos y guardar en una variable el nombre del "Libro 2" En el cual voy a estar trabajAndo..

Tratare de buscar Información..

gracias Dante..

Saludos!.

Desde luego que se pueden obtener todos los libros abiertos

Sub motrarnombres()
For Each libros In Workbooks
    nombre = libros.Name
Next
End Sub

Quieres que te pase libro por libro y que selecciones uno?

Otra opción es meter todos los libros abiertos a un combobox y de ahí selecciones el libro2 y pasar ese parámetro al inputbox.

Pero todo eso correspondería a otra pregunta, el problema era seleccionar la celda de otro libro y eso lo respondí con la variable.

Hola Dante.. Perdon apenas me desocupe.. Me podrias decir como realizo la otra pregunta para podEr ver las dos opciones

•pase libro por libro

•ingresarlos al combobox..

saludos!.. 

Buen dia Dante

Valora esta respuesta y crea una nueva.

Te recomiendo que selecciones de un combobox el libro2.

Si ya estás en un combobox, lo mejor sería crear un formulario. Y con un combo seleccionar el otro libro y con controles RefEdit seleccionar las celdas.

Si quieres te creo el formulario. Crea un formulario desde VBA y revisa que tengas el control RefEdit o agrégalo en el menú de VBA, Herramientas, Controles adicionales y busca el que diga RefEdit. Ctrl

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas