miércoles, 30 de abril de 2014

Cambiar los vínculos de varios archivos al mismo tiempo

El día de ayer, me consultaron como cambiar la versión de varios archivos de Excel al mismo tiempo, sin embargo, estos archivos tenían formulas que los vinculaban unos de otros, y al actualizarse de versión no actualizaban los vínculos.
Es por ello, que esta nueva publicación trata de arreglar este pequeño problema que me tardo varias horas de investigación.

Primero es importante que lean la publicación de ayer antes de continuar, esta la encuentran en el siguiente enlace: 

Cambiar la versión de varios archivos al mismo tiempo


Luego de haber leído, lo que deben hacer es cambiar el código de la publicación anterior por este nuevo código:

Sub CambiaVersion()
On Error Resume Next
    Dim LibroActual As Workbook 'archivo a abrir
    Dim Enlaces As Variant ' Arreglo de enlaces
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
   
    ArchivosSeleccionados = Application.GetOpenFilename(, , , , True)
    CantidadArchivos = UBound(ArchivosSeleccionados)
    If CantidadArchivos > 0 Then
      'Primero actualizo todos los archivos con la nueva versión
      For I = 1 To CantidadArchivos
        nombrearch = ArchivosSeleccionados(I)
        
        Set LibroActual = Workbooks.Open(nombrearch, True)
        
        nombretmp = LibroActual.Name
        Posicion = Application.WorksheetFunction.Search(".", nombretmp)
        nombretmp = Left(nombretmp, Posicion - 1)
        
        LibroActual.SaveAs Filename:=nombretmp, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        
        LibroActual.Close False
      Next I
      
      'Ahora cambio los enlaces de los nuevos archivos
      For I = 1 To CantidadArchivos
        nombrearch = ArchivosSeleccionados(I)
        nombrearch = nombrearch & "x"
                
        Set LibroActual = Workbooks.Open(nombrearch, True)
        Enlaces = LibroActual.LinkSources(Type:=xlLinkTypeExcelLinks)
        
        CantidadEnlaces = UBound(Enlaces)
        For x = 1 To CantidadEnlaces
            NombreEnlace = Enlaces(x)
            NuevoNombreEnlace = NombreEnlace & "x"
            LibroActual.ChangeLink Name:=NombreEnlace, NewName:=NuevoNombreEnlace, Type:=xlExcelLinks
        Next x
        
        LibroActual.Save
        LibroActual.Close False
      Next I
    End If
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    MsgBox "Se actualizaron de versión a " & CantidadArchivos & " archivos."
End Sub

Finalmente ejecutamos la macro de la misma forma que indicamos anteriormente, es decir cierro el Visual Basic y regreso al Excel. Ya dentro del Excel inserto un objeto cualquiera en mi hoja actual.


Como pueden apreciar en la imagen simplemente le escribí un texto dentro del objeto. Luego hago clic derecho en el objeto y selecciono la opción "Asignar Macros"


Finalmente hacemos clic en Aceptar, para luego hacer en clic en cualquier celda, y listo.

Hacemos clic en nuestro botón (objeto) y nos preguntará que archivos queremos abrir, podemos seleccionar todos al mismo tiempo y hacemos clic en abrir


Y listo

Espero que le sirva