Hab bereits versucht, ein Makro aufzuzeichnen, wenn über das Bearbeiten
Verknüpfen-Dialogfeld die Änderungen vorgenommen werden; Leider wird dabei
nichts aufgezeichnet.
Dann habe ich die die Auflistung Inlineshápes durchlaufen, um dabei die
Eigenschaften zu ändern. leider sind die Pfadnamen schreibgeschützt.
Hat jemand ein Idee?
--
Norbert Laas
> gibt es eine Möglichkeit die Quelle für verknüptfte OLE-Objekte, also
> Dateipfad usw. mit VBA zu ändern?
Na so auf die Schnelle würde ich es so machen
- Extras / Optionen / Ansicht / Feldfunktionen aktivieren
- Suchen / Ersetzen (alter Pfad mit neuem Pfad)
- Bearbeiten / Alles markieren
- F9 (= Felder aktualisieren)
- Extras / Optionen / Ansicht / Feldfunktionen deaktivieren
--
Thomas Gahler
MVP für WordVBA
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)
- Windows XP (SP2), Office XP (SP3)
auch noch...
na gut
Private Sub x()
Dim oIS As Word.InlineShape
Set oIS = ActiveDocument.InlineShapes(1) ' oder ein anderes IS
Debug.Print oIS.LinkFormat.SourceFullName
oIS.LinkFormat.SourceFullName = "C:\Dokumente und
Einstellungen\sekulla\Eigene Dateien\Tabelle\AWMF.xls"
oIS.LinkFormat.Update
End Sub
cu CS
> Debug.Print oIS.LinkFormat.SourceFullName
Hmmm... das ist natürlich eleganter.
Tja, man lernt nie aus...
Allerdings gibt es einem Unterschied, von dem Linkformat, und der Anzeige
des links in Word: C:\\a.vsd Drawing\\~sss
In Word sind alle Backslashes gedoppelt.
Linkformat: C:\a.vsd Drawing\~sss
Ich muss dann auch nochmal suchen, in welchem Objekt der Zeichnungsname
"Drawing\\~sss" gespeichert ist
--
Norbert Laas
Dim oIS As Word.InlineShape
> Set oIS = ActiveDocument.InlineShapes(1)
> oIS.LinkFormat.SourceFullName = "C:\a.VSD"
Gibt es hier noch einen Trick?
--
Norbert Laas
> ich habe die Zuweisung im Coding ausprobiert, erhalte aber leider den
> Fehler, das die Eigenschaft schreibgeschützt ist.
tja, hättest Du die Wordversion genannt, hätten wir Dir sagen können, dass
es in Word2000 leider diese Einschränkung gibt.
--
Gruß Christian
~~~~~~~~~~~~
Antworten / Rückmeldungen nur in die NG!
ihmo nicht
MSDN Word 2000:
SourceFullName Property
Returns or sets the name and path of the source file for the specified
linked OLE object, picture, or field. Read/write String.
Remarks
Using this property is equivalent to using the SourcePath, PathSeparator,
and SourceName properties, in sequence.
Carsten
Hi Norbert,
da OLE recht umfangreich ist, sind auch die Fehler (incl.-Meldungen) recht
vertrackt.
1. Die Variante über .LinkFormat.SourceFullName ist in Word 2002 (ihmo auch
in 2000) zulässig
(siehe Hilfe:
With ActiveDocument.Shapes(1)
If .Type = msoLinkedOLEObject Then
With .LinkFormat
.SourceFullName = "c:\my documents\myExcel.xls"
.AutoUpdate = True
End With
End If
End With
) Probiere es einfach mal.
2. Dein OLE-Server muss auch funktionieren und eine Aktualisierung zulassen.
Was ist .VSD für ein OLE-Objekt?
3. Testmöglichkeiten
3.a ein VSD-Object über Einfügen/Objekte/Dateien [x]Verknüfung als
InlineShapes einfügen
und über Bearbeiten/Verknüpfungen[Quelle ändern] auf eine andere VSD-Datei
ändern.
(Shapes werden ihmo unter Verknüpfungen nicht angezeigt)
3.b siehe dir die Eigenschaften des Inlineshape in VBA an
Ist der Type wdLinkeTypeOLE?
3.c Test es mit anderen OLE-Dateien (Word/XL/PP/PDF)
cu CS
> ihmo nicht
> MSDN Word 2000:
leider kann man sich auf diese Informationen nicht verlassen.
Wenn die Fehlermeldung kommt, besteht ein Schreibschutz.
Andererseits spricht die Hilfe (Word2000) davon, dass keine
Dokumentinformationen geändert werden können:
[quote]
BuiltInDocumentProperties-Eigenschaft
Gibt eine DocumentProperties-Auflistung zurück, die alle integrierten
Dokumenteigenschaften des angegebenen Dokuments darstellt.
Nur-Lese-Zugriff.
[/quote]
genauso die CustomDocumentProperties-Eigenschaft :-(
was natürlich Unsinn ist und nur für wenige Properties gilt.
Hi
kann es sein das BuiltInDocumentProperties auf eine ganz andere
Objekt-Klasse zugreift?
Ihmo wird nicht auf das Shape referenziert, sondern auf
Word-Properties.
Bei oIS.LinkFormat.SourceFullName wird der OLE-Server
aktiviert und bearbeitet.
cu CS
> kann es sein das BuiltInDocumentProperties auf eine ganz andere
> Objekt-Klasse zugreift?
ich wollte damit nur andeuten, dass man der Hilfe nicht immer blind
vertrauen darf.
Dass das zwei völlig verschiedene Paar Schuhe sind, ist schon klar.
@Norbert:
poste mal einen vollständigen Feldcode. Was für ein Objekt ist eingebettet?
Mit normalen Grafiken funktioniert das Austauschen doch - mea culpa
Ich muss mal suchen, wo genau der Befehl nicht greift...
--
Gruß Christian
Sonst hatte ich noch keine Schwierigkeiten damit.
cu CS
Mein Problem war ja, das ein Word-doc mit mehreren verknüpften
Visio-Objekten in einem Unterordner kopiert wird, um eine andere Version des
doc zu erhalten. Nun wurden die Verknüpfungen nicht als relativ angesehen,
und die Verknüpfungen zeigten noch auf den alten Pfad ;-(
Nun habe ich das zuhause probiert, und da funktionierte die Anpassung der
Pfade auf die neue Umgebung.
Der Unterschied war: im Office habe ich eine Serverpfad
(\\\\Server\\DOCpfad\\Visio\\a.VSD...) zuhause einen Laufwerkspfad
(C:\\DOCpfad\\Visio\\a.vsd...)
nun der Code, der ohne Fehlerbeh. ist. Der Hinweis auf Schreibschutz kommt
bei word 2002 und 2003.
Sub RelinkVisioLinks()
' Aktualisierungsmakro, für im Dokument verknüpfte Grafiken
' Damit soll ein Problem behoben werden, das die Verknüpfungen immer
Absolut, und nicht Relational sind
' Visio Gafiken, auf die verlinkt wurde, befinden sich immer im Unterordner
"Visio" des geöffneten Dokumentes
' Aufgaben:
' Ermitteln des aktuellen Speicherortes des Dokumentes, dabei beachten,
' ob das Dokument bereits zumindest einmal gespeichert wurde,
' es sich also nicht um ein neues Dokument handelt, und ob Felder
vorhanden sind.
' Feststellen, ob der Unterordner Visio besteht, wenn nicht, Meldung
ausgeben und abbrechen.
' Feststellen, ob die Datei in dem Unterordner besteht, wenn nicht Meldung
ausgeben und abbrechen.
' Feststellen, ob die Visio-Datei und evtl das Shape-Blatt in dem
Unterordner besteht,
' wenn
nicht Meldung ausgeben und abbrechen
' Funktion aufrufen zur Ermitllung der Datei
' If ExistFile() = True Then MsgBox "Datei vorhanden"
'bis hier erledigt
' ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes
Dim fld As Field
Dim strActiveDocPath
' Ermitteln des aktuellen Speicherortes des Dokumentes, dabei beachten,
' ob das Dokument bereits zumindest einmal gespeichert wurde,
' es sich also nicht um ein neues Dokument handelt; Dann Prozedur
mit Meldung verlassen.
strActiveDocPath = ActiveDocument.Path
If strActiveDocPath = "" Then
MsgBox "Es handelt sich um eine neues Dokument." & vbCrLf & _
"Bitte speichern Sie das Dokument erst ab."
Exit Sub
End If
If ActiveDocument.Fields.Count = 0 Then
' Es ist kein Feld in dem Dokument vorhanden; Proz verlassen
MsgBox "Es ist in dem Dokument kein einziges @Feld vorhanden." & vbCrLf
& _
"Es kann also auch kein @Ersetzungsvorgang durchgeführt werden."
Exit Sub
End If
' Nun wird nur die Erste Visio Verknüpfung genutzt, um den Pfad auszulesen,
auf den der Visiolink zeigt:
For i = 1 To ActiveDocument.Fields.Count
' Wenn kein Field vorhanden ist ? dann
Set fld = ActiveDocument.Fields(i) ' Objektvariable setzen
' Ein InlineShape-Objekt ist:ein Bild, OLE-Objekt oder ein
ActiveX-Steuerelement
' und INCLUDEPICTURE- oder
EMBED-Feldes ist.
If fld.Type = wdFieldLink Then ' es handelt sich nicht
um InlineShape
' handelt es sich um eine
Verknüpfung zu einer Visio Grafik, dann
' Pfad und Dateiname
merken und danach For Next Schleife verlassen
If Left(fld.InlineShape.OLEFormat.ClassType, 13) = "Visio.Drawing" Then
Dim strLinkPath
strLinkPath = fld.InlineShape.LinkFormat.SourcePath
Dim strLinkFileName
strLinkFileName = fld.InlineShape.LinkFormat.SourceName
Dim strLinkFullName
strLinkFullName = fld.InlineShape.LinkFormat.SourceFullName
Exit For 'Schleife verlassen, weil
in dieser Version davon ausgegangen wird,
' das Alle Visio Links
auf den selben Ordner verlinkt sind
End If
End If
i = i + 1
Next i
' nun den Pfad der Verknüpfung ändern
fld.InlineShape.LinkFormat.SourcePath = strActiveDocPath & "\" & constVisio
Set fld = Nothing
End Sub
--
Norbert Laas
Word 2002 gestattet relative Verknüpfungen, das Dokument darf nur nicht auf
einem
anderen Laufwerk sein (Bearbeiten/Verknüfungen[Quelle ändern])
> ' nun den Pfad der Verknüpfung ändern
> fld.InlineShape.LinkFormat.SourcePath = strActiveDocPath & "\" &
> constVisio
> Set fld = Nothing
> End Sub
neben einigen stylistischen Najas:
- kein Dim i as long
- constVisio ?? nicht zugewiesen
- Dim strActiveDocPath (kein Typ String-Angabe)
- Dim strLinkPath (gehört in VBA an den Anfang)
einem Fehler:
i = i + 1
Next i
Überspring jedes 2te i
und eigener Erfahrung:
besser For i = ActiveDocument.Fields.Count to 1 step -1,
da ggf. der Index neu aufgebaut wird, wenn ein Shape sich ändert (z.B. der
Typ)
kann das nicht funktionieren:
fld.InlineShape.LinkFormat.SourcePath = strActiveDocPath & "\" '& constVisio
VBA-Hilfe: SourcePath-Eigenschaft
Siehe auch Betrifft Beispiel Zusatzinfo
Gibt den Pfad der Quelldatei für das angegebene verknüpfte OLE-Objekt, das
Bild oder das Feld zurück. Schreibgeschützter String-Wert
Du musst schon SourceFullName zuweisen
fld.InlineShape.LinkFormat.SourceFullName="NeuerPath" & "\" &
fld.InlineShape.LinkFormat.SourceName
cu CS