Ausgangslage:
Für eine Ergebnispräsentation habe ich sowohl Grafiken als auch Excel-Tabellen in eine Powerpoint-Präsentation verknüpft. Diese Präsentation muss bei Vorliegen von neuen/geänderten Daten aktualisiert werden, wobei die Grafiken und Tabellen mit der neuen Datengrundlage in einem anderen Ordner abgelegt sind (bspw. C:\newFolder\), als die ursprünglich verknüpften (bspw. C:\oldFolder\).
Mein Ziel ist es mittels VBA die Dateipfade der verknüpften Tabellen und Grafiken in einem Rutsch anzupassen, da Powerpoint 2010 hierfür scheinbar keine unter zeitlichen Gesichtspunkten vertretbare Lösungsmöglichkeit anbietet.
Lösungsansatz:
Bei meiner Recherche bin ich auf folgenden Lösungsansatz gestoßen, der vom Grundsatz her für meine Problemstellung geeignet erscheint:
Sub ChangeOLELinks()
' Note: this will only work in PPT 2000 and later
Dim oSld As Slide
Dim oSh As Shape
Dim sOldPath As String
Dim sNewPath As String
' EDIT THIS TO REFLECT THE PATHS YOU WANT TO CHANGE
' Include just the portion of the path you want to change
' For example, to change links to reflect that files have moved from
' C:\oldFolder\*.* to
' C:\newFolder\*.*
sOldPath = "C:\oldFolder\"
sNewPath = "C:\newFolder\"
On Error GoTo ErrorHandler
For Each oSld In ActivePresentation.Slides
For Each oSh In oSld.Shapes
' Change only linked OLE objects
If oSh.Type = msoLinkedOLEObject Then
On Error Resume Next
' Verify that file exists
If Len(Dir$(Replace(oSh.LinkFormat.SourceFullName, sOldPath, sNewPath))) > 0 Then
oSh.LinkFormat.SourceFullName = Replace(oSh.LinkFormat.SourceFullName, sOldPath, sNewPath)
Else
MsgBox("File is missing; cannot relink to a file that isn't present")
End If
On Error GoTo ErrorHandler
End If
Next ' shape
Next ' slide
MsgBox("Done!")
NormalExit:
Exit Sub
ErrorHandler:
MsgBox("Error " & err.number & vbcrlf & err.description)
Resume NormalExit
End Sub
Nach Durchlauf des o.g. Makros, ist die Präsentation anschließend zu speichern und zu schließend. Nach erneutem Öffnen und einer Aktualisierung der Verknüpfungen werden die Tabellen und Grafiken mit den neunen/geänderten Werten aus dem "newFolder" angezeigt.
Offene Problemstellung:
Der oben gezeigte Ansatz funktioniert leider nicht, wenn die Zellbereiche der verknüpften Tabellen in Excel mit einem Namen versehen wurden. Für meine Zwecke benötige ich ein Makro, dass zusätzlich auch mit benannten Zellbereichen umgehen kann. Bei der aktuellen Umsetzung wird in diesem Fall die Fehlermeldung "File is missing; cannot relink to a file that isn't present" ausgegeben. Da ich selbst ein VBA-Neuling bin, bin ich mich für entsprechende Anpassungsvorschläge dankbar.
|