Atualizando o item de link do Microsoft Word por meio do VBA

2

É possível alterar o Item de um link no MS Word fazendo referência a uma planilha do Excel, de forma pragmática, através do uso do VBA?

Encontrei discussões sobre como , mas não o Item , mostrado abaixo na edição link menu do MS Word 2010:

Amesmaperguntajáfoifeita aqui , mas sem respostas, há cerca de 2 anos. Também examinei a documentação da propriedade LinkFormat , que é usada para editar a Fonte de um link, mas não me levou a lugar nenhum.

Todas as ideias sobre como resolver o problema são bem-vindas.

Plano de fundo : Eu tenho uma planilha do Excel que alimenta um documento do Word com dados. Eu estou tentando usar este documento como um modelo, onde dependendo da análise eu iria mudar a planilha alimentando os dados para o documento do word. As tabelas na planilha (não formatadas como tal) podem variar no 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

Eu forneci 2 arquivos de amostra como um MWE do problema. Eles podem ser encontrados aqui .

    
por brodoll 14.05.2015 / 06:12

1 resposta

1

Eu encontrei um trabalho para isso. Em vez de alterar os Itens , criei um script VBA para nomear todos os intervalos vinculados. Portanto, em vez de alterar o item de link no Word, altero o valor de intervalo nomeado no Excel. O item de link permanece o mesmo, mas aponta para um intervalo que pode ser modificado pragmaticamente. Aqui está o código que eu coloquei 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 o arquivo Source, usei o código no link da questão. 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

Por fim, para atualizar todos os links de uma só vez:

Sub AutoOpen()
    ActiveDocument.Fields.Update
End Sub
    
por 15.05.2015 / 20:23