Verknüpfung mit VBA bearbeiten

08/05/2009 - 12:17 von Reinfried | Report spam
Kann man einen Link im Dokument (Verknüpfte Excel-Datei als Wordtabelle) wie
z.B.
{LINK Excel.Sheet.8 "pfad\test.xslm"bereich \a \f 4 \h}
mit VBA-Code dahingehend bearbeiten, dass die Excel-datei geöffnet wird.

Mit VBA wie:
Dim dlg AS Dialog
Set dlg = Application.Dialogs(124) ' = wdDialogEditLinks
With dlg
.Show
End With
kann man die DialogBox öffnen aber die Funktion 'Quelle Öffnen' (OpenSource)
nicht ausführen.

Über die Field-Funktion:
For x = 1 To ActiveDocument.Fields.Count
With ActiveDocument.Fields(x)
If .Type = wdFieldLink Then 'nur Link-Objekte zurückgeben
MsgBox .LinkFormat.SourceFullName
End If
End With
Next

habe ich zwar Zugriff auf den SourceNamen etc. aber ich kann die Source
(=Excel-Datei) nicht öffnen.

Hat jemand eine Idee?

Gruss Reinfried
 

Lesen sie die antworten

#1 Christian Freßdorf
08/05/2009 - 14:04 | Warnen spam
Hallo Reinfried,

fast ;-)
da man ja nicht weiß, was sich hinter dem Link verbirgt, kann man auch kein
Programm fest zuordnen.
Daher wird es einfach über die Programmassoziation aufgerufen:

Option Explicit
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&
Private Const SE_ERR_ACCESSDENIED = 5 ' Zugriff verweigert
Private Const SE_ERR_ASSOCINCOMPLETE = 27 ' Dateityp ist nicht ausreichend assoziiert
Private Const SE_ERR_DDEBUSY = 30 ' DDE konnte nicht gestartet werden
Private Const SE_ERR_DDEFAIL = 29 ' DDE ist gescheitert
Private Const SE_ERR_DDETIMEOUT = 28 ' DDE-Zeitlimit wurde ereicht
Private Const SE_ERR_DLLNOTFOUND = 32 ' eine benötigte Dll wurde nicht gefunden
Private Const SE_ERR_FNF = 2 ' Datei wurde nicht gefunden
Private Const SE_ERR_NOASSOC = 31 ' Dateityp ist nicht assoziiert
Private Const SE_ERR_OOM = 8 ' nicht genügend Speicher verfügbar
Private Const SE_ERR_PNF = 3 ' Pfad wurde nicht gefunden
Private Const SE_ERR_SHARE = 26 ' Datei konnte nicht geöffnet werden, da sie bereits
' verwendet wird

Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hWnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) _
As Long

Sub OpenLink()
Dim x As Integer, ret As Integer
For x = 1 To ActiveDocument.Fields.Count
With ActiveDocument.Fields(x)
If .Type = wdFieldLink Then 'nur Link-Objekte zurückgeben
ret = MsgBox("Soll die Verknüpfung geöffnet werden?" & vbCrLf & .LinkFormat.SourceFullName, vbQuestion + vbYesNoCancel)
If ret = vbYes Then
ShellExecute &O0, "open", .LinkFormat.SourceFullName, vbNullString, vbNullString, 1
ElseIf ret = vbCancel Then
Exit Sub
End If
End If
End With
Next
End Sub


Gruß Christian
~~~~~~~~~~~~
Antworten / Rückmeldungen nur in die NG!
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)

Ähnliche fragen