Verknüpfungen per VBA ändern
|
Autor |
Nachricht |
Robb
Im Profil kannst Du frei den Rang ändern
Verfasst am: 07. Feb 2012, 23:19 Rufname:
|
|
Version: Office 2k (2000) |
|
Ich habe ein Word-Dokument mit vielen Excel-Tabellen und Diagrammen, die ich über kopieren in Excel und dann mit Inhalt einfügen, Verknüpfung einfügen: Excel Arbeitsblatt Objekt in das Word-Dokument eingefügt habe. Nun möchte ich die Dateien in einen anderen Ordner verschieben. Aber dann müsste ich die Verknüpfungen alle manuell ändern. Gib es eine Möglichkeit dies per Makro oder VBA zu erledigen?
|
|
KeepCoolMan
VBA-NonExpert ;) Office 2010

Verfasst am: 10. Feb 2012, 07:22 Rufname: Thomas
Wohnort: Celle
|
| |
Version: Office 2k (2000) |
|
Hallo Robb,
hier mal ein kleines Makro, welches die Arbeit erledigt.
Du musst den alten und neuen Pfad in die beiden Konstanten eintragen, dann werden ALLE Excel-Tabellen-Verknüpfungen, die auf den alten Pfad zeigen, auf den neuen Pfad verbogen.
Code: | Const ALTERPFAD = "Lw:\Pfad\Ordner"
Const NEUERPFAD = "Lw:\NeuerPfad\Neuer Ordner"
Sub LinkAktualisieren()
For Each f In ActiveDocument.Fields
If Left(f.OLEFormat.ClassType, 11) = "Excel.Sheet" And _
f.LinkFormat.SourcePath = ALTERPFAD Then
f.LinkFormat.SourceFullName = NEUERPFAD & "\" & f.LinkFormat.SourceName
End If
Next
End Sub |
_________________ Gruß Thomas
Ich freue mich über Feedback, Kritik und Verbesserungsvorschläge...
Wer will, findet Möglichkeiten; wer nicht will, findet Gründe! :: Unt wär Rächdshraibfela fint, daaf sie behaltn!
|
|
Robb
Im Profil kannst Du frei den Rang ändern
Verfasst am: 10. Feb 2012, 22:17 Rufname:
|
|
Version: Office 2k (2000) |
|
KeepCoolMan - 10. Feb 2012, 06:22 hat folgendes geschrieben: | Hallo Robb,
hier mal ein kleines Makro, welches die Arbeit erledigt.
Du musst den alten und neuen Pfad in die beiden Konstanten eintragen, dann werden ALLE Excel-Tabellen-Verknüpfungen, die auf den alten Pfad zeigen, auf den neuen Pfad verbogen.
Code: | Const ALTERPFAD = "Lw:\Pfad\Ordner"
Const NEUERPFAD = "Lw:\NeuerPfad\Neuer Ordner"
Sub LinkAktualisieren()
For Each f In ActiveDocument.Fields
If Left(f.OLEFormat.ClassType, 11) = "Excel.Sheet" And _
f.LinkFormat.SourcePath = ALTERPFAD Then
f.LinkFormat.SourceFullName = NEUERPFAD & "\" & f.LinkFormat.SourceName
End If
Next
End Sub |
|
Hallo Thomas,
vielen Dank für Dein kleines Makro. Ich habe aber noch ein kleines Problem.
Bei Bedarf müsste ich den Speicherort und den Dateinamen ändern. Kann man das Ganze auch in einer Variablen an Const ALTERPFAD bzw. Const NEUERPFAD durch eingaben in Textboxen übergeben?
Danke für die Hilfe.
|
|
r.mueller
Gast
Verfasst am: 11. Feb 2012, 06:35 Rufname:
|
|
Version: Office 2k (2000) |
|
Hallo
Code: |
Dim strAlterPfad As String
Dim strNeuerPfad As String
Sub LinkAktualisieren()
strAlterPfad = "Lw:\Pfad\Ordner"
strNeuerPfad = "Lw:\NeuerPfad\Neuer Ordner"
'oder
strAlterPfad = Textbox1.Text
strNeuerPfad = Textbox2.Text
For Each fld In ActiveDocument.Fields
If Left(f.OLEFormat.ClassType, 11) = "Excel.Sheet" And _
fld.LinkFormat.SourcePath = strAlterPfad Then
fld.LinkFormat.SourceFullName = strNeuerPfad & "\" & fld.LinkFormat.SourceName
End If
Next
End Sub
|
Gruß
r.mueller
|
|
Robb
Im Profil kannst Du frei den Rang ändern
Verfasst am: 12. Feb 2012, 00:01 Rufname:
|
|
Version: Office 2k (2000) |
|
Hallo,
habe den Code nun wie folgt eingegeben:
Code: | Dim strAlterPfad As String
Dim strNeuerPfad As String
Sub LinkAktualisieren()
strAlterPfad = Textbox1.Text
strNeuerPfad = Textbox2.Text
For Each fld In ActiveDocument.Fields
If Left(f.OLEFormat.ClassType, 11) = "Excel.Sheet" And _
fld.LinkFormat.SourcePath = strAlterPfad Then
fld.LinkFormat.SourceFullName = strNeuerPfad & "\" & fld.LinkFormat.SourceName
End If
Next
End Sub |
Wenn ich das Makro ausführe, erhalte ich die Meldung "Objekt fehlt". Was habe ich falsch gemacht?
|
|
KeepCoolMan
VBA-NonExpert ;) Office 2010

Verfasst am: 12. Feb 2012, 09:57 Rufname: Thomas
Wohnort: Celle
|
|
Version: Office 2k (2000) |
|
Hallo Robb,
gibt es denn die beiden Textboxen? Und wo liegen sie? In einem Formular? Dann müsstest du den Verweis auf das Formular voranstellen, z.B.
Code: | strNeuerPfad = UserForm1.TextBox2.Text |
Oder du holst dir die Ordner aus einem FileDialog, dann schliesst du auf jeden Fall Tippfehler aus:
Code: | Sub LinkAktualisieren()
strAlterPfad = HolePfad ' Textbox1.Text
strNeuerPfad = HolePfad ' TextBox2.Text
...
End Sub
Function HolePfad() As String
Dim dlg As FileDialog
Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
dlg.AllowMultiSelect = False
If dlg.Show = -1 Then HolePfad = dlg.SelectedItems(1)
End Function |
Kann es auch sein, dass du vielleicht eine Tabelle dabei hast, die nicht verknüpft, sondern nur eingefügt wurde? Dann hätte sie nämlich keine LinkFormat-Eigenschaft resp. Verknüpfung und die kann dann natürlich auch nicht aktualisiert werden. Das könntest du dann allerdings mit einer kleinen Bedingung prüfen und die Fehlermeldung vermeiden:
Zitat: | Dim strAlterPfad As String
Dim strNeuerPfad As String
Sub LinkAktualisieren()
strAlterPfad = Textbox1.Text
strNeuerPfad = Textbox2.Text
For Each f In ActiveDocument.Fields
If Not f.LinkFormat Is Nothing Then
If Left(f.OLEFormat.ClassType, 11) = "Excel.Sheet" And _
f.LinkFormat.SourcePath = strAlterPfad Then
f.LinkFormat.SourceFullName = strNeuerPfad & "\" & f.LinkFormat.SourceName
End If
End If
Next
End Sub |
_________________ Gruß Thomas
Ich freue mich über Feedback, Kritik und Verbesserungsvorschläge...
Wer will, findet Möglichkeiten; wer nicht will, findet Gründe! :: Unt wär Rächdshraibfela fint, daaf sie behaltn!
|
|
Gast
Verfasst am: 12. Feb 2012, 23:30 Rufname:
|
|
Version: Office 2k (2000) |
|
Hallo,
besteht nicht die Möglichkeit den alten Pfad und den Dateinamen über eine 1. Inbutbox und dann den neuen Pfad mit dem neuen Dateinamen über eine 2. Inbutbox zu übergeben.
Vielen Dank für Eure Hilfe.
PS: Es ist richtig das auch ein paar Tabellen direkt ins Dokument eingefügt sind.
|
|
KeepCoolMan
VBA-NonExpert ;) Office 2010

Verfasst am: 13. Feb 2012, 07:49 Rufname: Thomas
Wohnort: Celle
|
| |
Version: Office 2k (2000) |
|
Guten Morgen,
das kannst du natürlich auch machen:
Zitat: | strAlterPfad = InputBox("bisheriger Pfad der Excel-Dateien" & vbCrLf & "(ohne abschließendes '\'):", "Verknüpfung ändern")
strNeuerPfad = InputBox("neuer Pfad der Excel-Dateien" & vbCrLf & "(ohne abschließendes '\'):", "Verknüpfung ändern")
If strAlterPfad <> "" And strNeuerPfad <> "" Then
For Each f In ActiveDocument.Fields
If Not f.LinkFormat Is Nothing Then
If Left(f.OLEFormat.ClassType, 11) = "Excel.Sheet" And _
f.LinkFormat.SourcePath = strAlterPfad Then
f.LinkFormat.SourceFullName = strNeuerPfad & "\" & f.LinkFormat.SourceName
End If
End If
Next
End If |
Aber wozu der Dateiname? Wenn du nur eine Tabelle ändern willst, dann geht das per Klick im Dokument doch wohl wesentlich schneller und bequemer, oder?
_________________ Gruß Thomas
Ich freue mich über Feedback, Kritik und Verbesserungsvorschläge...
Wer will, findet Möglichkeiten; wer nicht will, findet Gründe! :: Unt wär Rächdshraibfela fint, daaf sie behaltn!
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum herunterladen
|
|
|
Verwandte Themen |
Forum / Themen |
Antworten |
Autor |
Aufrufe |
Letzter Beitrag |
 |
Word Serienbriefe: Feldfunktionen in mehreren Serienbriefen gleichzeitig ändern |
10 |
SBG |
794 |
24. Nov 2011, 08:59 SBG  |
 |
Word Serienbriefe: Datenquellen ändern |
0 |
Kojiro |
1000 |
22. Aug 2011, 11:46 Kojiro  |
 |
Word Serienbriefe: .CustomDocumentProperties Namen ändern und neuorganisieren |
3 |
boomshalek |
2126 |
06. Jul 2011, 13:52 boomshalek  |
 |
Word Serienbriefe: Excel-Tabelle per Serienbrief dynamisch in Word |
0 |
Panix |
1219 |
05. Jul 2011, 12:55 Panix  |
 |
Word Serienbriefe: SQL Befehl Pfad ändern |
1 |
doschtinator |
1911 |
10. Mai 2011, 15:48 doschtinator  |
 |
Word Serienbriefe: Speicherort von Datenquelle und Serienbrief ändern |
2 |
Joe1075 |
2327 |
06. Mai 2011, 10:27 Gast  |
 |
Word Serienbriefe: Word-Serienbrief in PDF umwandeln und Versand per Outlook |
4 |
MarcelK |
17652 |
20. Apr 2010, 11:38 Gast  |
 |
Word Serienbriefe: Textmarken per Includetext einfügen in Abhängigkeit von ASK |
0 |
Robotixx |
1804 |
13. Jul 2009, 19:45 Robotixx  |
 |
Word Serienbriefe: Neues Leerdokument mit Verknüpfungen in andere Dokumente |
1 |
alex.krumnow |
1202 |
01. Jul 2009, 23:27 charlybrown  |
 |
Word Serienbriefe: Durch Seriendruck Schattierung bedingt ändern |
1 |
SirSten |
1508 |
26. Mai 2009, 09:08 SirSten  |
 |
Word Serienbriefe: .mdb per e-mail |
2 |
schokomo |
999 |
17. Apr 2009, 09:20 Gast  |
 |
Word Serienbriefe: Serienfeld nachträglich automatisch ändern? |
8 |
Saft |
2129 |
11. Feb 2009, 14:38 Saft  |
|
|