VBA による Microsoft Word リンク項目の更新

VBA による Microsoft Word リンク項目の更新

変更することは可能ですか?アイテムMS Word のリンクを VBA を使用して Excel スプレッドシートに参照することは現実的に可能ですか?

私は、どのようにファイルソースを変更する、しかし、アイテム、下記に示すリンクを編集MS Word 2010 のメニュー:

リンクタブの編集

まったく同じ質問がすでに出されているここ、しかし、答えは得られず、約2年前に。私はまた、リンクフォーマットプロパティ ドキュメントはリンクのソースを編集するために使用されますが、どこにもつながりません。

問題を解決する方法についてのアイデアがあれば、ぜひ教えてください。

背景: Word 文書にデータを入力する Excel スプレッドシートがあります。この文書をテンプレートとして使用し、分析に応じて Word 文書にデータを入力するスプレッドシートを変更します。スプレッドシート内のテーブル (そのようにフォーマットされていない) の範囲はさまざまです。ただし、列の数は同じです。行数が異なるため、それに応じてアイテム フィールドを変更する必要があります。

編集

この問題のMWEとして2つのサンプルファイルを用意しました。ここ

答え1

私はこれを回避する方法を見つけました。アイテム、リンクされたすべての範囲に名前を付ける VBA スクリプトを作成しました。Word でリンク項目を変更する代わりに、Excel で名前付き範囲の値を変更します。リンク項目は同じままですが、実用的に変更できる範囲を指します。範囲に名前を付けるために作成したコードは次のとおりです。

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

この方法の欠点は、以前行ったすべての接続を手動で再作成 (リンク) する必要があることです。ファイル ソースを変更するには、質問リンクのコードを使用しました。完全性のために、ここに記述します。

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

最後に、すべてのリンクを一度に更新するには、次のようにします。

Sub AutoOpen()
    ActiveDocument.Fields.Update
End Sub

関連情報