Aktualisieren eines Microsoft Word-Linkelements über VBA

4389
brodoll

Ist es möglich, das Element eines Links in MS Word, der auf eine Excel-Kalkulationstabelle verweist, durch Verwendung von VBA pragmatisch zu ändern ?

Ich habe Diskussionen darüber gefunden, wie man die Dateiquelle ändert, aber nicht das Element, das in MS Word 2010 im Link- Menü zum Bearbeiten angezeigt wird :

Link-Registerkarte bearbeiten

Genau die gleiche Frage wurde schon gefragt hier, aber ohne irgendwelche Antworten, vor etwa 2 Jahren. Ich habe auch in der LinkFormat- Eigenschaftendokumentation nachgesehen, die zum Bearbeiten der Quelle eines Links verwendet wird, aber mich nirgendwohin geführt hat.

Alle Ideen zur Lösung des Problems werden geschätzt.

Hintergrund : Ich habe eine Excel-Tabelle, die ein Word-Dokument mit Daten füllt. Ich versuche, dieses Dokument als Vorlage zu verwenden, wobei ich je nach Analyse die Tabellenkalkulation ändern würde, die die Daten in das Word-Dokument einfügt. Die Tabellen in der Kalkulationstabelle (nicht als solche formatiert) können in ihrem Bereich variieren. Sie haben jedoch die gleiche Anzahl von Spalten. Da die Anzahl der Zeilen variiert, müsste ich das Feld Artikel entsprechend ändern.

Bearbeiten

Ich habe 2 Beispieldateien als MWE des Problems bereitgestellt. Sie können hier gefunden werden .

2
Ich habe mir die Eigenschaften des InlineShape-Objekts angesehen, konnte aber die Artikeleigenschaft in meinem Word 2013 nicht sehen (oder festlegen). Kann ich eine kleine Beispieldatei (Word 2010) haben, in der sich die Artikeleigenschaft befindet einstellen? nixda vor 8 Jahren 0
Ich habe die Frage mit einem Link zur MS Word-Beispieldatei aktualisiert, in der die Item-Eigenschaft festgelegt ist brodoll vor 8 Jahren 0
Ich kann sie nicht öffnen, ohne den Link zu unterbrechen, da mein Pfad (Ordnerstruktur) nicht derselbe ist wie bei Ihnen. Können Sie sie erneut verknüpfen, während sich beide in einem Ordner wie "C: \ test" befinden? nixda vor 8 Jahren 0
Tut mir leid, dass ich das nicht ankalkuliert habe. Ich habe sie erneut verlinkt, als Sie zu "C: \ Test \" vorgeschlagen haben. brodoll vor 8 Jahren 0
Funktioniert immer noch nicht Ich habe keine Ideen, sry nixda vor 8 Jahren 0
@ Nixda Errr mich auch. Vielen Dank für Ihre Zeit und Ihr Interesse. Ich freue mich sehr brodoll vor 8 Jahren 0

1 Antwort auf die Frage

1
brodoll

Ich habe dazu eine Arbeit gefunden. Anstatt die Itens zu ändern, erstellte ich ein VBA-Skript, um alle verknüpften Bereiche zu benennen. Anstatt das Linkelement in Word zu ändern, ändere ich den benannten Bereichswert in Excel. Das Linkelement bleibt das gleiche, weist jedoch auf einen Bereich hin, der pragmatisch geändert werden kann. Hier ist der Code, den ich zusammengefügt habe, um den Bereichen Namen zu geben:

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 

Der Nachteil dieses Ansatzes ist, dass ich alle Verbindungen, die ich zuvor geknüpft hatte, manuell neu erstellen musste. So ändern Sie die Datei Quelle Ich habe den Code im Fragenlink verwendet. Zum Abschluss schreibe ich es hier:

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 

Um alle Links auf einmal zu aktualisieren:

Sub AutoOpen() ActiveDocument.Fields.Update End Sub