Atualizando item de link do Microsoft Word por meio do VBA

Atualizando item de link do Microsoft Word por meio do VBA

É 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:

Editar aba do link

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

informação relacionada