badger
Goto Top

Excel Link in Word mittels VBA ändern

Hallo Leute,

ich habe eine Word-Datei, welches Text aus einer Excel-Tabelle enthält. Dieser Text ist mittels "LINK Excel.Sheet.12" eingebunden.

Nun möchte ich aber, dass die User den Link einfach ändern können.

Ich habe dazu nun ein Formular erstellt, wo der Benutzer aus einer ComboBox eine Datei auswählen kann.
Mittels "Selection.Find" lasse ich dann den Link ändern.

So weit, so gut.

Das Problem ist aber, sobald ich das Formular schließe, wird der neu erstellte Link durch den Alten wieder überschrieben.
Und nein: es ist nicht der Programm-Code. Dies dürfte durch Word selbstständig wieder geschehen.
Denn wenn ich einen "normalen" Text mittels "Selection.Find" ersetzte, bleibt der neue Text auch nach dem Schließen des Formulars noch vorhanden.
Diese Problematik betrifft also nur Links.

Meine Frage an euch:
Wie kann ich dieses Problem lösen?
Gibt es andere Möglichkeiten als "Selection.Find", um einen Link zu ändern?

Bin für jede Hilfe dankbar.

Danke
Patrick

Content-Key: 271811

Url: https://administrator.de/contentid/271811

Printed on: March 2, 2024 at 07:03 o'clock

Mitglied: 114757
Solution 114757 May 12, 2015, updated at May 13, 2015 at 14:39:18 (UTC)
Goto Top
Gibt es andere Möglichkeiten als "Selection.Find", um einen Link zu ändern?
Jup,
Sub ChangeLink()
    Dim f As Field, strPath As String
    Dim dlg As FileDialog
    Set dlg = Application.FileDialog(msoFileDialogOpen)
    With dlg
        .Filters.Clear
        .Filters.Add "Excel-Dateien", "*.xlsx", 1  
        .FilterIndex = 1
        If .Show = -1 Then
            strPath = .SelectedItems(1)
        End If
    End With
    If strPath <> "" Then  
        With ThisDocument
            For Each f In .Fields
                If f.Type = wdFieldLink Then
                    f.LinkFormat.SourceFullName = strPath
                    f.Update
                    f.LinkFormat.AutoUpdate = False
                    Exit For
                End If
            Next
        End With
    End If
End Sub
Gruß jodel32
Member: Badger
Badger May 13, 2015 at 12:14:44 (UTC)
Goto Top
Danke dir für deine Hilfe.

Nachdem ich Anfangs mit deinem Code auch die gleichen Probleme hatte, habe ich nun etwas probiert.

Ich habe jetzt heraus gefunden, dass dieses Problem nur auftritt, wenn das Formular gleich mit dem Word Dokument mit geöffnet wird:
Private Sub Document_Open()
Formular.Show
End Sub

Öffne ich das Formular über das Makro-Fenster, funktioniert alles normal.

Gibt hierfür eine Erklärung bzw. vlt. sogar eine Lösung?

Besten Dank
Patrick
Mitglied: 114757
114757 May 13, 2015 at 12:55:05 (UTC)
Goto Top
Gibt hierfür eine Erklärung bzw. vlt. sogar eine Lösung?
Kannst du mir mal meine Glaskugel polieren ?!
Ohne deinen Formular-Code zu kennen... du weist schon ...
Member: Badger
Badger May 13, 2015 at 13:07:25 (UTC)
Goto Top
;)

Recht viel "neuen" Programmcode gibts nicht.

in ThisDocument steht
Private Sub Document_Open()
Formular.Show
End Sub

Dann gibts ein Formular mit einem einzigen Button.
Beim Button_Click() wir der Code ausgeführt, denn du weiter oben bereits veröffentlicht hast.

That's it!

Aber wenns hilft, kann ich dir das Dokument wo online stellen!
Mitglied: 114757
114757 May 13, 2015 at 13:15:22 (UTC)
Goto Top
Kann ich hier nicht nachvollziehen, Leg mal ein neues Dokument an.
Member: Badger
Badger May 13, 2015 at 13:27:49 (UTC)
Goto Top
Hätte ich auch schon probiert. Hilft auch nichts.
Habe jetzt mal die Daten hochgeladen: klick
Mitglied: 114757
114757 May 13, 2015 updated at 14:09:40 (UTC)
Goto Top
Hab den Code oben mal angepasst, damit sollte es jetzt laufen.
Member: Badger
Badger May 13, 2015 at 14:46:38 (UTC)
Goto Top
Feinste Ware!
Dankeschön!

Gibt's da irgendwo eine Doku dazu?
Ich möchte nämlich auch die Zeile/Spalte ändern (also "Tabelle1!Z1S1" auf "Tabelle1!Z1S99").
Ich denke mal, da gibts sicher auch einen Befehl mit LinkFormat.?????????

Aber leider kann ich hier nichts passendes finden!
Mitglied: 114757
114757 May 13, 2015 updated at 15:21:18 (UTC)
Goto Top
Da muss man wieder etwas basteln
    Dim f As Field, strPath As String
    Dim dlg As FileDialog
    Set dlg = Application.FileDialog(msoFileDialogOpen)
    Set regex = CreateObject("vbscript.regexp")  
    regex.Global = False: regex.IgnoreCase = True
    regex.Pattern = "(""[^""]+""\s*)(""[^""]*"")"  

    With dlg
        .Filters.Clear
        .Filters.Add "Excel-Dateien", "*.xlsx", 1  
        .FilterIndex = 1
        If .Show = -1 Then
            strPath = .SelectedItems(1)
        End If
    End With
    If strPath <> "" Then  
        With ThisDocument
            For Each f In .Fields
                If f.Type = wdFieldLink Then
                    f.LinkFormat.SourceFullName = strPath
                    f.Code.Text = regex.Replace(f.Code.Text, "$1""Tabelle1!Z1S99""")  
                    f.Update
                    Exit For
                End If
            Next
        End With
    End If
Member: Badger
Badger May 18, 2015 updated at 09:09:28 (UTC)
Goto Top
Herzlichen Dank für deine Hilfe!!!

Auf ein Problem bin ich jedoch gestoßen:
Wenn der Link z.b. so aussieht: "LINK Excel.Sheet.12 "C:\\Text.xlsx" Tabelle1!Z2S1 \a \f 5 \h \* MERGEFORMAT" und ich diesen mittels "LinkFormat.SourceFullName" ändere, wird der Parameter " \* MERGEFORMAT" entfernt.

Ich habe nun versucht, dies vor dem f.Update mittels f.Code.Text hinzuzufügen:
f.LinkFormat.SourceFullName = strPath 
f.Code.Text = f.Code.Text & " \* MERGEFORMAT"  
f.Update

Aber dies bringt leider nichts.

Gibt es einen Befehl mit dem man sagen kann, dass alle "alten" Parameter übernommen werden?


Sorry für die ganzen Umstände. Ich hätte mir das echt einfacher vorgestellt...