
É possível mudar oItemde um link no MS Word referenciando uma planilha Excel, de forma pragmática, através do uso de VBA?
Encontrei discussões sobre como fazeralterar a origem do arquivo, mas não oItem, mostrado abaixo noeditar linkmenu do MS Word 2010:
A mesma pergunta já foi feitaaqui, mas sem respostas, há cerca de 2 anos. Eu também olhei para oLinkFormatdocumentação de propriedade, que é usada para editar a fonte de um link, mas não me levou a lugar nenhum.
Qualquer idéia sobre como resolver o problema será apreciada.
Fundo: Tenho uma planilha do Excel alimentando um documento do Word com dados. Estou tentando usar esse documento como template, onde dependendo da análise eu mudaria a planilha que alimenta os dados para o documento word. As tabelas na planilha (não formatadas como tal) podem variar em intervalo. No entanto, eles têm o mesmo número de colunas. Como o número de linhas varia, eu teria que alterar o campo Item de acordo.
Editar
Forneci 2 arquivos de amostra como um MWE do problema. Eles podem ser encontradosaqui.
Responder1
Eu encontrei uma solução para isso. Em vez de mudar oItens, criei um script VBA para nomear todos os intervalos vinculados. Portanto, em vez de alterar o item do link no Word, altero o valor do intervalo nomeado no Excel. O item do link permanece o mesmo, mas aponta para um intervalo que pode ser modificado pragmaticamente. Aqui está o código que montei para colocar nomes em intervalos:
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
A desvantagem dessa abordagem é que tive que recriar (vincular) manualmente todas as conexões que fiz anteriormente. Para alterar a fonte do arquivo usei o código do link da pergunta. Para completar, estou escrevendo aqui:
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 atualizar todos os links de uma vez:
Sub AutoOpen()
ActiveDocument.Fields.Update
End Sub