Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
872to876
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
872to876
872to876
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Fehler bei Aktualisierung von xls-ppt-Verknüpfunge

Fehler bei Aktualisierung von xls-ppt-Verknüpfunge
24.05.2007 12:04:00
xls-ppt-Verknüpfunge
Hallo Zusammen,
ich habe eine Ppt-Datei, die auf mehrere Tabellen eines xls-sheets zugreift. Der Speicherort von diesem Dateienpaar ändert sich stets (die blanko dateien werden an 20 gesellschaften geschickt, die das dann füllen sollen), so dass ich nach einem Weg gesucht habe, wie sich die ppt-Präsention aktualisiert, ohne dass ich jede Tabelle einzeln neu verlinken muss.
Also habe ich im Internet gesucht und einen VBA-Code gefunden (von Ramses), der den Dateinamen der ppt-Datei im Ordner des xls-files sucht, öffnet und updated. Soweit alles gut. Hat auch geklappt.
Jetzt habe ich aber eine neue xls-Datei die nach dem gleichen Prinzip mit einer ppt-Datei verknüpft werden soll (fast identischer Aufbau, nur neue Zahlen) und als VBA Laie, der ich leider bin, hab ich die neue xls-Datei erstellt, die ppt-Datei einmal schön darauf verlinkt und den Quelltext des anderen Makros in die neue Datei kopiert, die Dateinamen im Quelltext aktualisiert und gut war - dachte ich...
Jetzt kann ich aber leider die beiden Dateien nicht mehr verschicken, weil unter neuem Ort gespeichert das Makro zwar die ppt-Datei öffnet, diese aber nach wie vor mit dem xls-File am alten Ort verlinkt bleibt.
Hat jemand von euch eine Idee, woran das liegen könnte? Könnt ihr mir helfen?
Wäre euch echt dankbar, weil ich jetzt doch schon einiges an Zeit darin investiert habe...
Vielen Dank!
Sinita
PS:
Hier der Code:
Option Explicit
Const ppPresName As String = "\Planning Sheet Budget 08.ppt"
'Normalweise der gleiche Pfad wie die Präsentation
Const LinkIni As String = "\ppLink.ini"

Sub PP_Presentation_Start_and_Update_ObjectLinks()
'(C) Ramses
'Eine Powerpoint Präsentation enthält verschiedene verknüpfte Objecte auf eine EXCEL Tabelle
'Der Namen dieser Tabelle ändert sich jedoch immer wieder
'Um die manuellen Anpassungen zu umgehen werden diese automatisch upgedatet
'Dazu wird eine INI Datei angelegt in welcher die alte Verknüpfungsdatei gespeichert wird
'Existiert noch keine, wird eine INI Datei angelegt mit dem Bezug auf die AKTUELLE ARBEITSMAPPE
'Die Objecte in der Präsentation MÜSSEN beim erstmaligen Start also auf
'die aktuell geöffnete Mappe mit diesem Makro verweisen
'Beim starten wird dann gefragt ob auf eine neue Mappe Bezug genommen werden soll,
'der Benutzer wählt eine neue Datei aus ( Diese Datei MUSS Identisch sein mit der Originaldatei  _
_
)
'd.h. die ursprünglich erstellte Datei darf nur unter einem anderen Namen gespeichert werden !!! _
_
'Die Objectnamen dürfen NICHT geändert werden !!!
'Die Master-Tabelle kann kaskadieren nach dem Vater - Sohn Prinzip
'Aus der Sohn-Tabelle können weitere Objecte in die Präsentation kopiert werden
'wenn die Objecte mit den neuen Werten auf diese Sohn Tabelle verweisen
'werden diese auch aktualisiert.
'Bei einem Verweis auf die VATERTABELLE werden die Objecte in der Präsentation
'die in der Sohn-Tabelle vorhanden sind, nicht mehr dargestellt!!
'Integer Delaration
Dim i As Integer, Qe As Integer
'Object Deklaration
Dim ppApp As Object, ppPres As Object, sh As Object
'String Deklaration
Dim ppFile As String, iniFile As String
Dim LinkFile As String, oldLinkfile As String, NewLinkfile As String
Dim tmpLink As String, onlyOldFileName As String, onlyNewFileName As String, cBSl As Integer
'Variablen füllen
NewLinkfile = ""
'Prüfen ob PP-Datei vorhanden
ppFile = ThisWorkbook.Path & ppPresName
If Dir(ppFile) = "" Then
Beep
Qe = MsgBox("File " & ppFile & "  does not exist!", vbCritical + vbOKOnly, "File Mistake") _
_
Exit Sub
End If
'Zwischenspeichern des Namens für die Quelldatei
iniFile = ThisWorkbook.Path & LinkIni
'Prüfen ob INI Datei vorhanden
If Dir(iniFile) = "" Then
Qe = MsgBox("The file" & Chr$(13) & iniFile & Chr$(13) & "has not been defined yet," & Chr$( _
_
13) & _
"A new file " & Chr$(13) & LinkIni & Chr$(13) & "is being created with the source " &   _
_
Chr$(13) & _
ThisWorkbook.FullName, vbInformation + vbOKCancel, "Source Mistake")
If Qe = vbCancel Then
Qe = MsgBox("The creation of the file " & Chr$(13) & _
LinkIni & Chr$(13) & _
" has been cancelled," & Chr$(13) & _
"The makro to start the file " & Chr(13) & _
"is stopped, the presentation will not be updated !", vbInformation + vbOKOnly, " _
Source Fehler")
Exit Sub
End If
'Erstellen einer neuen Link.ini
Open iniFile For Output As #1
'Schreiben der aktuell geöffneten Datei als Verknüpfung
Print #1, ThisWorkbook.FullName
Close #1
End If
'Schliessen einer eventuell geöffneten INI-Datei
Close #1
'Der Speicherort der INI Datei wird in der Const LiniIni definiert
Open iniFile For Input As #1
Do While Not EOF(1)
'Einlesen der SourceQuelle für die Präsentation
Input #1, oldLinkfile
Loop
'Schliessen der Datei
Close #1
'Abfrage ob neue Verknüpfungdatei definiert werden soll
Qe = MsgBox("Actually, the file " & Chr$(13) & ppPresName & Chr$(13) & _
"is linked to " & Chr$(13) & _
oldLinkfile & "." & Chr$(13) & _
"Do you want to link this file to another source?", vbQuestion + vbYesNo, "Source  _
Definition")
If Qe = vbYes Then
'Wenn ja
NewLinkfile = Application.GetOpenFilename("XLS Dateien (*.xls),", True, "Neue Verknü _
pfungsdatei auswählen", "Übernehmen", False)
'sicherheitsabfrage
Qe = MsgBox("Do you want to define the file " & Chr$(13) & NewLinkfile & Chr$(13) & "as new  _
_
source?", _
vbQuestion + vbOKCancel, "Source Definition")
If Qe = vbNo Then
'Verwendung der bisherigen Datei um Update der Präsentation
Qe = MsgBox("The definition of the new source" & Chr$(13) & _
NewLinkfile & Chr$(13) & _
" has been cancelled," & Chr$(13) & _
"The old source is being used " & oldLinkfile & "used !", vbInformation + vbOKOnly,  _
_
"Source Definition")
Else
'Neue Linkdatei wird geschrieben und zum Update verwendet
Open iniFile For Output As #1
'Schreiben der aktuell geöffneten Datei als Verknüpfung
Write #1, NewLinkfile
Close #1
End If
End If
Set ppApp = CreateObject("PowerPoint.Application")
ppApp.Visible = msoTrue
Set ppPres = ppApp.Presentations.Open(ppFile)
'Verknüpfungen updaten
'Wenn die Verknüpfungdatei nicht geändert wurde
'werden nur die Werte aktualisiert
If NewLinkfile = "" Then
For i = 1 To ppPres.Slides.Count
For Each sh In ppPres.Slides(i).Shapes
If sh.Type = msoLinkedOLEObject Then
With sh.LinkFormat
.Update
End With
End If
Next
Next i
Else
'Die Verknüpfungsdatei wurde geändert
'Dazu muss der Filenamen extrahiert werden
'den die directen Object Bezüge müssen ebenfalls angepasst werden
'Variante für alle Excel Versionen
cBSl = 0
For i = Len(oldLinkfile) To 1 Step -1
If Mid(oldLinkfile, i, 1) = "\" Then
onlyOldFileName = Right(oldLinkfile, Len(oldLinkfile) - i)
Exit For
End If
Next i
cBSl = 0
For i = Len(NewLinkfile) To 1 Step -1
If Mid(NewLinkfile, i, 1) = "\" Then
onlyNewFileName = Right(NewLinkfile, Len(NewLinkfile) - i)
Exit For
End If
Next i
For i = 1 To ppPres.Slides.Count
For Each sh In ppPres.Slides(i).Shapes
If sh.Type = msoLinkedOLEObject Then
With sh.LinkFormat
'Externen Filebezug updaten
tmpLink = Replace(.SourceFullName, oldLinkfile, NewLinkfile, 1)
'Updaten der direkten Object Bezüge
tmpLink = Replace(tmpLink, onlyOldFileName, onlyNewFileName, 1)
.SourceFullName = tmpLink
.Update
End With
End If
Next
Next i
End If
End Sub


1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
zu wegen doppelt! oT
24.05.2007 17:34:46
zu
zu
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige