Actualizacion automatica de vinculos Excel y Word
Bueno acá les dejo el código que en parte encontré por ahí, y en parte adapte a mis necesidades.
Básicamente lo que hace es reemplazar los "vínculos", que tiene pegados un archivo word que esta conectado con un archivo excel. Generalmente cuando se pegan vínculos de un excel a word para autorrellenarlos, cuando se cambian los archivos de directorios, los vínculos siguen direccionados al archivo original, lo que si eso para vuelve inservible a la aplicación que estamos utilizando.
Entonces para solucionar el problema existen dos 2 formas de hacerlo. La primera es volver a vincular a mano todos los archivos, lo cual es engorroso y poco practico. La segunda forma es con una macro.
Antes de ejecutar el código, es necesario abrir el Word en modalidad "BORRADOR", lo que deshabilitada la actualización automática de los vínculos y nos dejara trabajar mas cómodamente. Una vez que abrimos el Word en esta modalidad, es necesario presionar ALT+F9, para ver el código de los campos, en donde veremos el "Directorio Original", donde apuntaban los enlaces o sea los vínculos, algo así como C:\\proyectos\\Proyecto nuevo\\.
Entonces si por ejemplo desarrollamos nuestro libro de excel es ese directorio y queremos llevar nuestro archivo al ámbito laboral, es decir, a nuestra oficina. es necesario modificar los vínculos y direccionarlos a la nueva unidad de disco y directorio donde va a estar alojado.
Por lo tanto, es código, facilita esta tarea, ya que en tan solo 2 minutos ha actualizado mas de 40 archivos donde lo he probado.
Mi recomendación, es que vayan ejecutando los reemplazos de a 5 o 6 archivos, ya que tiende a volverse lento.
Por ultimo aclaro que no soy programador, por lo tanto el código puede tener fallas que unos deberá solucionar si es que lo adapta a sus propios archivos. Y en cuanto a como se ejecuta, es decir, paso por paso, desconozco cual es método correcto para ejecutarlo, ya que como mencione anteriormente, no soy programador. soy mas bien autodidacta.
Sub Replace_Link()
Dim objWord As Word.Application
Dim wdSel As Object '·wdsel", es una seleccion de objetos que estan dentro de los documentos de word, o sea, las palabras clave que mas tarde va a buscar
Dim warch1 As Word.Document 'warch1,2, "alias" o "apodos" de documentos de word
Dim warch2 As Word.Document
Dim warch3 As Word.Document
Dim warch4 As Word.Document
Dim warch5 As Word.Document
Dim def As String
Set Inicio = Sheets(ActiveSheet.Name)
Nom = ThisWorkbook.Path 'Nom es "Nombre" abreviado y es igual, a la ubicacion de este archivo de excel, donde esta alojada esta macro
ruta1 = ThisWorkbook.Path & "\" & Range("AA3") 'warch1 ' aca se definen los directorios donde estan los archivos cuyos nombre estan en los "range"
ruta2 = ThisWorkbook.Path & "\" & Range("AA4") 'warch2
ruta3 = ThisWorkbook.Path & "\" & Range("AA5") 'warch3
ruta4 = ThisWorkbook.Path & "\" & Range("AA6") 'warch4
'En esta instancia se llama a la Aplicacion WORD, para que se active y abra los archivos que se indican a continuacion
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set warch1 = objWord.Documents.Open(ruta1)
objWord.Activate
Set warch2 = objWord.Documents.Open(ruta2)
objWord.Activate
Set warch3 = objWord.Documents.Open(ruta3)
objWord.Activate
Set warch4 = objWord.Documents.Open(ruta4)
objWord.Activate
Set warch5 = objWord.Documents.Open(ruta5)
objWord.Activate
objWord.ActiveDocument.Content.Select ' aqui vuelvo activos a todos los "word.application" y activo la macro para reemplazar la antgua ubicacion del archivo por la nueva que esta en "Nom" que es igual, a Thisworkbook.path"
Set wdSel = objWord.Selection
wdSel.Find.ClearFormatting
wdSel.Find.Replacement.ClearFormatting
With wdSel.Find
.Text = "Directorio original"
.Replacement.Text = Nom
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
wdSel.Find.Execute Replace:=wdReplaceAll
objWord.Quit savechanges:=True
End Sub
Espero haber sido claro.
Saludos a todos y espeto que les sirva.