
¿Es posible cambiar elArtículo¿De un enlace en MS Word que hace referencia a una hoja de cálculo de Excel, de manera pragmática, mediante el uso de VBA?
He encontrado discusiones sobre cómocambiar la fuente del archivo, pero no elArtículo, que se muestra a continuación en eleditar enlacemenú de MS Word 2010:
Ya se ha hecho exactamente la misma pregunta.aquí, pero sin respuestas, hace unos 2 años. También he investigado elFormato de enlacedocumentación de propiedad, que se utiliza para editar la fuente de un enlace, pero no me llevó a ninguna parte.
Se agradece cualquier idea sobre cómo resolver el problema.
Fondo: Tengo una hoja de cálculo de Excel que alimenta un documento de Word con datos. Estoy intentando utilizar este documento como plantilla, donde, dependiendo del análisis, cambiaría la hoja de cálculo que alimenta los datos al documento de Word. Las tablas de la hoja de cálculo (sin formato como tal) pueden variar en rango. Sin embargo, tienen el mismo número de columnas. Dado que el número de filas varía, tendría que cambiar el campo Artículo en consecuencia.
Editar
Proporcioné 2 archivos de muestra como MWE del problema. se pueden encontraraquí.
Respuesta1
Encontré una solución a esto. En lugar de cambiar elartículos, Creé un script VBA para nombrar todos los rangos vinculados. Entonces, en lugar de cambiar el elemento del enlace en Word, cambio el valor del rango con nombre en Excel. El elemento de enlace sigue siendo el mismo, pero apunta a un rango que puede modificarse pragmáticamente. Aquí está el código que preparé para poner nombres a rangos:
Sub CreateNamedRanges()
Dim i As Integer
For i = 1 To Worksheets.Count
sheetName = "Mysheet" & i
varName = "Myvar" & CStr(i)
Set Rng = Sheets(sheetName).Range("G6:I9")
ActiveWorkbook.Names.Add Name:=varName, RefersTo:=Rng
Next i
End Sub
La desventaja de este enfoque es que tuve que recrear (vincular) manualmente todas las conexiones que hice anteriormente. Para cambiar la fuente del archivo utilicé el código en el enlace de la pregunta. Para completarlo, lo escribo aquí:
Sub changeSource()
Dim dlgSelectFile As FileDialog 'FileDialog object
Dim thisField As Field
Dim selectedFile As Variant 'must be Variant to contain filepath of selected item
Dim newFile As Variant
Dim fieldCount As Integer
'create FileDialog object as File Picker dialog box
Set dlgSelectFile = Application.FileDialog(FileDialogType:=msoFileDialogFilePicker)
With dlgSelectFile
'use Show method to display File Picker dialog box and return user's action
If .Show = -1 Then
'step through each string in the FileDialogSelectedItems collection
For Each selectedFile In .SelectedItems
newFile = selectedFile 'gets new filepath
Next selectedFile
Else 'user clicked cancel
End If
End With
Set dlgSelectFile = Nothing
'update fields
fieldCount = ActiveDocument.Fields.Count
For x = 1 To fieldCount
ActiveDocument.Fields(x).LinkFormat.SourceFullName = newFile
Next x
End Sub
Finalmente, para actualizar todos los enlaces a la vez:
Sub AutoOpen()
ActiveDocument.Fields.Update
End Sub