Macro para traer información de otros libros cuyos nombres y ubicación varían

A toda la comunidad!

Tengo la necesidad de traer información de otro libro con nombre y ubicación cambiante.

Tengo el siguiente código cuando paso de hoja a hoja:

If Sheets("Lunes").Range("O235").Value = 0 Then
Range("N235").Value = Sheets("Lunes").Range("N235").Value
Else
If Sheets("Lunes").Range("O236").Value <> 0 Then
Range("N235").Value = Sheets("Lunes").Range("O236").Value
Else
Range("N235").Value = Sheets("Lunes").Range("O235").Value
End If
If Sheets("Lunes").Range("A243").Value = Sheets("Lunes").Range("A235").Value And Sheets("Lunes").Range("O243").Value <> 0 Then
Range("N235").Value = Sheets("Lunes").Range("O243").Value
End If
If Sheets("Lunes").Range("A244").Value = Sheets("Lunes").Range("A235").Value And Sheets("Lunes").Range("O244").Value <> 0 Then
Range("N235").Value = Sheets("Lunes").Range("O244").Value
End If
End If

Cuando los datos vienen del día lunes (Hoja Lunes), este código va en el día Martes (hoja Martes). Pero cual debe ser el código para traer los datos de una Hoja llamada Domingo en otro libro?

No quisiera tener que modificar el código cada momento.

Actualmente lo hago Vinculando el libro, pero no le puedo aplicar la condición.

1 Respuesta

Respuesta
1

Se me ocurre colocar en ThisWorkbook el siguiente código:

Sub ManejoDias(ByVal DiaInicial As String, ByVal DiaFinal As String)
If Sheets(DiaInicial).Range("O235").Value = 0 Then
Sheets(DiaFinal).Range("N235").Value = Sheets(DiaInicial).Range("N235").Value
Else
If Sheets(DiaInicial).Range("O236").Value <> 0 Then
Sheets(DiaFinal).Range("N235").Value = Sheets(DiaInicial).Range("O236").Value
Else
Sheets(DiaFinal).Range("N235").Value = Sheets(DiaInicial).Range("O235").Value
End If
If Sheets(DiaInicial).Range("A243").Value = Sheets(DiaInicial).Range("A235").Value And Sheets(DiaInicial).Range("O243").Value <> 0 Then
Sheets(DiaFinal).Range("N235").Value = Sheets(DiaInicial).Range("O243").Value
End If
If Sheets(DiaInicial).Range("A244").Value = Sheets(DiaInicial).Range("A235").Value And Sheets(DiaInicial).Range("O244").Value <> 0 Then
Sheets(DiaFinal).Range("N235").Value = Sheets(DiaInicial).Range("O244").Value
End If
End If
End Sub

Para llamarlo desde la hoja ("Martes") deberías colocar el siguiente código

Sub Iniciar()
ThisWorkbook.ManejoDias Me.Name, "Martes"
End Sub

Par el dia Miércoles

Sub Iniciar()
ThisWorkbook.ManejoDias Me.Name, "Miércoles"
End Sub

Y asi sucesivamente para los otros días

Gracias. Pero el problema es cuando es de un libro a otro.

En el libro desde donde se realiza el llamado, deberías insertar un modulo, dentro de él crea un procedimiento por ejemplo:

sub Llamado()

dim Libro as string, Hoja as string, Rango as string, Respuesta

Libro="Libro1"

Hoja= "Lunes"

Rango= "A244"

Respuesta = Workbooks(Libro).Worksheets(Hoja).Range(Rango)

End sub

Debes tener abierto previamente el libro al cual se hará la consulta.

Espero esta parte de la solución se ajuste mejor a tus necesidades.

Feliz dia

Juan Carlos

Gracias. Si funciona. Pero habrá una forma de hacerlo sin abrir el libro de origen de datos?

No existe forma de acceder al libro sin abrirlo previamente, a no ser que sea una base de datos.

En tu caso para abrir el libro crea un modulo e inserta los siguientes procedimientos:

'Función para abrir el libro. Retorna true si lo abre y false sino

Function AbrirLibro(ByVal Ruta As String, ByVal NombreLibro As String) As Boolean
On Error GoTo 1
Workbooks.Open Ruta & "\" & NombreLibro
AbrirLibro = True
Exit Function
1:
MsgBox "El archivo " & Ruta & "\" & NombreLibro & vbCrLf & " No pudo abrirse."
AbrirLibro = False
End Function

'Procedimiento para cerrar el libro

Sub CerrarLibro(ByVal NombreLibro As String)
On Error GoTo 1
Workbooks(NombreLibro).Close
1:
End Sub

'Este procedimiento te permite abrir, trabajar y cerrar el archivo.

Sub OperacionesSobreArchivos()
Dim RutaLibro As String, NombreArchivo As String

'En la siguiente instrucción debes cambiar la ruta donde se encuentra el archivo

'Ejemplo: RutaLibro= "D:\Mis Documentos\"

RutaLibro = "Ruta del archivo"

'En la siguiente instrucción coloca el nombre del archivo a abrir

NombreArchivo = "Nombre_del_archivo_a_trabajar.xlsx"
If AbrirLibro(RutaLibro, NombreArchivo) Then
'Aquí colocarías las instrucciones pues el libro esta abierto
'Instrucciones
'Instrucciones

'Llamamos al procedimiento que cierra el archivo
CerrarLibro NombreArchivo
End If
End Sub

Espero esto contribuya a tu solución. No olvides cerrar la pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas