Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1212to1216
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
Inhaltsverzeichnis

Powerpoint Verknüpfung ändern mit VBA

Powerpoint Verknüpfung ändern mit VBA
Meli
Hallo,
ich habe im Archiv einen Makro für die Powerpoint Verknüpfungen gefunden. Folgende Fragen habe ich dazu:
1) wie/wo kann ich es abändern, dass er mir von den 11 Verknüpfungen nur 10 mit dem abgefragten neuen Exceldatei ändert.... und zwar diejenige Verknüpfungen, die mit "NWS Key Financials Px 11" (Px steht für jeden Monat, z.B. P05 für Mai) verknüpft sind.
Dafür die letzte Verknüpfung mit "DART_NWS_Px 11 Reporting" mich extra abfragt, so dass ich die Möglichkeit habe, eine neue Datei dafür einzugeben.
2) Das Durchlaufen vom Makro dauert ziemlich lange (ca. 10 min). Liegt wahrscheinlich daran, dass in NWS Key Financials wiederum mit einer Datei B verlinkt ist, der mit Passwort geschützt ist. Und es fragt mich jedesmal nach dem Passwort.
* kann man das Passwort in VBA Makro einspeichern?
* kann man diese Funktion (Hintergrundverknüpfung aktualisieren) per VBA ausschalten, so dass es schneller durchläuft? ...oder muß ich auf die Lösung mit Wertekopie gehen, damit es eindeutig schneller wird?
Vielen herzlichen Dank im voraus für Eure Hilfe. Und nun das gefundene Makro:
Sub VerknuepfungenAendern()
Dim Praes As Presentation, Blatt As Slide, Bild As Shape
Dim vDatei As Variant, sPfad As String, sExcelFile As String
Dim NeuerPfad As String
With Application.FileDialog(msoFileDialogFilePicker)
.InitialView = msoFileDialogViewDetails
.Title = "Bitte die neue Exceldatei(*.xls) für die Verknüpfungsaktualisierung auswählen"
.ButtonName = "Auswählen"
.InitialFileName = "*.xls*"
.AllowMultiSelect = False
If .Show = 0 Then Exit Sub
sPfad = VBA.CurDir
vDatei = .SelectedItems(1)
sExcelFile = Mid(vDatei, Len(sPfad) + 2)
End With
Set Praes = ActivePresentation
For Each Blatt In Praes.Slides
For Each Bild In Blatt.Shapes
If Bild.Type = msoLinkedOLEObject Then
If InStr(1, Bild.OLEFormat.ProgID, "Excel.Chart") > 0 Then
NeuerPfad = Bild.LinkFormat.SourceFullName
NeuerPfad = vDatei & Mid(NeuerPfad, InStr(1, NeuerPfad, "!"))
Bild.LinkFormat.SourceFullName = NeuerPfad
End If
If InStr(Bild.OLEFormat.ProgID, "Excel.Sheet") > 0 Then
If InStr(1, Bild.LinkFormat.SourceFullName, "[") > 0 Then
NeuerPfad = Bild.LinkFormat.SourceFullName
NeuerPfad = Mid(NeuerPfad, InStr(1, NeuerPfad, "!"))
NeuerPfad = vDatei & Mid(NeuerPfad, 1, InStr(2, NeuerPfad, "!")) _
& "[" & sExcelFile & Mid(NeuerPfad, InStr(1, NeuerPfad, "]"))
Bild.LinkFormat.SourceFullName = NeuerPfad
Else
NeuerPfad = Bild.LinkFormat.SourceFullName
NeuerPfad = vDatei & Mid(NeuerPfad, InStr(1, NeuerPfad, "!"))
Bild.LinkFormat.SourceFullName = NeuerPfad
End If
End If
End If
Next
Next
End Sub

gruss Meli

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Powerpoint Verknüpfung ändern mit VBA
03.05.2011 14:21:30
fcs
Hallo Meli,
ich hab dir das Makro (ich glaube es stammt ursprünglich aus meiner Feder) mal so umgestellt, dass beide Dateinamen für die neuen Verknüpfungen zu Beginn abgefragt werden. Beim Ersetztzen der Verknüpfungen wird dann der Name der alten Verknüpfung überprüft und der entsprechende neue Verknüpfung hergestellt.
Bei der automatisierten Eingabe eines Kennworts kann ich dir nicht weiterhelfen.
Man kann zwar Exceldateien öffnen ohne das die Links aktualisiert werden, ob das aber auch mit Verknüpften Excelobjekten in PowerPoint umgesetzt werden kann?
Öffne in Excel die beiden Dateien für die neuen Verknüpfungen. Danach dann in PP die Verknüpfungen per Makro aktualisieren. Zumindest unter PP/Excel 2007 wird dann bei mir während der Makroausführug nicht nach den Passwörtern der Exceldateien gefragt. Außerdem sollte sich dann die Makro-Laufzeit verkürzen, da die Exceldateien nicht für jede Verknüpfung geöffnet werden müssen.
Gruß
Franz
'Bearbeitet/Erstellt unter PowerPoint 2007
Sub VerknuepfungenAendern()
Dim Praes As Presentation, Blatt As Slide, Bild As Shape
Dim vDatei As Variant, sPfad As String, sExcelFile As String
Dim aDatei(1 To 2) As Variant, aPfad(1 To 2) As Variant, aExcelFile(1 To 2) As String, _
iI As Long
Dim NeuerPfad As String
With Application.FileDialog(msoFileDialogFilePicker)
.InitialView = msoFileDialogViewDetails
.Title = "Neue ""NWS Key Financials P...""-Datei(*.xls) für die " _
& "Verknüpfungsaktualisierung auswählen"
.ButtonName = "Auswählen"
.InitialFileName = "*.xls*"
.AllowMultiSelect = False
'Auswählen der beiden neuen Dateieinamen
For iI = 1 To 2
If .Show = 0 Then Exit Sub
aPfad(iI) = VBA.CurDir
aDatei(iI) = .SelectedItems(1)
aExcelFile(iI) = Mid(aDatei(iI), Len(aPfad(iI)) + 2)
.Title = "Neue ""DART_NWS_P..... Reporting""-Datei(*.xls) für die " _
& "Verknüpfungsaktualisierung auswählen"
Next
End With
Set Praes = ActivePresentation
For Each Blatt In Praes.Slides
For Each Bild In Blatt.Shapes
If Bild.Type = msoLinkedOLEObject Then
If InStr(1, Bild.LinkFormat.SourceFullName, "NWS Key Financials P") > 0 Then
iI = 1 '"NWS Key Financials P..."
Else
iI = 2 '"DART_NWS_P... Reporting"
End If
sPfad = aPfad(iI)
vDatei = aDatei(iI)
sExcelFile = aExcelFile(iI)
If InStr(1, Bild.OLEFormat.ProgID, "Excel.Chart") > 0 Then
NeuerPfad = Bild.LinkFormat.SourceFullName
NeuerPfad = vDatei & Mid(NeuerPfad, InStr(1, NeuerPfad, "!"))
Bild.LinkFormat.SourceFullName = NeuerPfad
End If
If InStr(Bild.OLEFormat.ProgID, "Excel.Sheet") > 0 Then
If InStr(1, Bild.LinkFormat.SourceFullName, "[") > 0 Then
NeuerPfad = Bild.LinkFormat.SourceFullName
NeuerPfad = Mid(NeuerPfad, InStr(1, NeuerPfad, "!"))
NeuerPfad = vDatei & Mid(NeuerPfad, 1, InStr(2, NeuerPfad, "!")) _
& "[" & sExcelFile & Mid(NeuerPfad, InStr(1, NeuerPfad, "]"))
Bild.LinkFormat.SourceFullName = NeuerPfad
Else
NeuerPfad = Bild.LinkFormat.SourceFullName
NeuerPfad = vDatei & Mid(NeuerPfad, InStr(1, NeuerPfad, "!"))
Bild.LinkFormat.SourceFullName = NeuerPfad
End If
End If
End If
Next
Next
Praes.UpdateLinks 'Diese Zeile erforderlich unter PP 2007, damit Darstellung in PP  _
aktualisiert wird
End Sub

Anzeige
AW: Powerpoint Verknüpfung ändern mit VBA
04.05.2011 10:15:08
Meli
Hallo Franz,
SUPER!!! Es funktioniert, zumindest hier zu Hause. Werde nächste Woche im Büro nochmal austesten, aber sieht super aus!! Ist um einiges schneller und ich werde gar nicht nach dem Passwort gefragt.
TAUSEND DANK!!
Meli
AW: Powerpoint Verknüpfung ändern mit VBA
04.05.2011 14:43:00
Meli
Hallo Franz,
ich möcht noch eine weitere Datei "Comments P..." dazufügen. Ich habe versucht, deinen Makro nachzuvollziehen und entsprechend zu ändern, aber weiter als die Nummer 1 to 3 bin ich leider mit meinen Kenntnissen nicht weitergekommen :-(.
Könntest du mir sagen, was ich zukünftig machen soll, wenn ich evtl. noch weitere Datei einfügen möchte?
Hätte noch ein paar Verständnisfragen zum Makro (damit ich mein Wissen erweitern kann):
1) Warum im ersten For-next Anweisung nicht beide bzw. alle neuen Dateinamen(Titel) notwendig sind? Da steht jetzt nur die "Dart....".
2) Warum du hier 2 statt 1 hast : aExcelFile(No) = Mid(aDatei(No), Len(aPfad(No)) + 2)
So hier ist mein amateurhafte Versuch, das Makro umzuschreiben :-(.... Zur Info, ich habe zwei Variable deiner Makro umbenennt, weil ich es für mich einfacher zum Nachvollviehen ist. (statt "vdatei" ins "sdatei" umbenannt, und "Ii" in "No"). Ich denke, bzw. hoffe, dass ich dadurch nichts kaputt gemacht habe.
DANKE schonmal.
Sub VerknuepfungenAendernMeli()
Dim Praes As Presentation, Blatt As Slide, Bild As Shape
Dim sDatei As Variant, sPfad As String, sExcelFile As String
Dim aDatei(1 To 3) As Variant, aPfad(1 To 3) As Variant, aExcelFile(1 To 3) As String, _
No As Long
Dim NeuerPfad As String
'Definieren von der AbfrageMaske
With Application.FileDialog(msoFileDialogFilePicker)
.InitialView = msoFileDialogViewDetails
.Title = "Neue ""NWS Key Financials P...""-Datei(*.xls) für die " _
& "Verknüpfungsaktualisierung auswählen"
.ButtonName = "Auswählen"
.InitialFileName = "*.xls*"
.AllowMultiSelect = False
'Auswählen der neuen Dateieinamen (No= Anzahl der Dateien)
For No = 1 To 3
If .Show = 0 Then Exit Sub
aPfad(No) = VBA.CurDir
aDatei(No) = .SelectedItems(1)
aExcelFile(No) = Mid(aDatei(No), Len(aPfad(No)) + 2)
.Title = "Neue ""DART_NWS_P..... Reporting""-Datei(*.xls) für die " _
& "Verknüpfungsaktualisierung auswählen"
aExcelFile(No) = Mid(aDatei(No), Len(aPfad(No)) + 2)
.Title = "Neue ""Comments_P...""-Datei(*.xls) für die " _
& "Verknüpfungsaktualisierung auswählen"
Next
End With
Set Praes = ActivePresentation
For Each Blatt In Praes.Slides
For Each Bild In Blatt.Shapes
If Bild.Type = msoLinkedOLEObject Then
If InStr(1, Bild.LinkFormat.SourceFullName, "NWS Key Financials P") > 0 Then
No = 1 '"NWS Key Financials P..."
No = 2 '"DART_NWS_P... Reporting"
Else
No = 3 '"Comments P..."
End If
sPfad = aPfad(No)
sDatei = aDatei(No)
sExcelFile = aExcelFile(No)
If InStr(1, Bild.OLEFormat.ProgID, "Excel.Chart") > 0 Then
NeuerPfad = Bild.LinkFormat.SourceFullName
NeuerPfad = sDatei & Mid(NeuerPfad, InStr(1, NeuerPfad, "!"))
Bild.LinkFormat.SourceFullName = NeuerPfad
End If
If InStr(Bild.OLEFormat.ProgID, "Excel.Sheet") > 0 Then
If InStr(1, Bild.LinkFormat.SourceFullName, "[") > 0 Then
NeuerPfad = Bild.LinkFormat.SourceFullName
NeuerPfad = Mid(NeuerPfad, InStr(1, NeuerPfad, "!"))
NeuerPfad = sDatei & Mid(NeuerPfad, 1, InStr(2, NeuerPfad, "!")) _
& "[" & sExcelFile & Mid(NeuerPfad, InStr(1, NeuerPfad, "]"))
Bild.LinkFormat.SourceFullName = NeuerPfad
Else
NeuerPfad = Bild.LinkFormat.SourceFullName
NeuerPfad = sDatei & Mid(NeuerPfad, InStr(1, NeuerPfad, "!"))
Bild.LinkFormat.SourceFullName = NeuerPfad
End If
End If
End If
Next
Next
Praes.UpdateLinks 'Diese Zeile erforderlich unter PP 2007, damit Darstellung in PP _
aktualisiert wird
End Sub

Anzeige
AW: Powerpoint Verknüpfung ändern mit VBA
05.05.2011 21:53:52
fcs
Hallo Meili,
hier Erläuterungen zu deinen Fragen.
1) Warum im ersten For-next Anweisung nicht beide bzw. alle neuen Dateinamen(Titel) notwendig sind? Da steht jetzt nur die "Dart....".
Bei 2 Namen wird der 1. Titel für das Fenster vor der For-Next-Schleife festgelegt, der 2. dann in der Schleife, nachdem der Dialog für den 1. Namen schon angezeigt wurde.
Bei mehr als 2 Namen muss man das etwas anders aufbauen.
2) Warum du hier 2 statt 1 hast : aExcelFile(No) = Mid(aDatei(No), Len(aPfad(No)) + 2)
Der Dateiauswahl-Dialog gibt als Ergebnis den Dateinamen inklusive Verzeichnis zurück:
Beispiel: aDatei(No) = "C:\Users\Public\Test\Dateiname.xls"
Als Verzeichnis wird zurückgegeben:
aPfad(No) = "C:\Users\Public\Test"
also ohne den letzten Backslash "\" zwischen Verzeichnis und Dateiname. Deshalb muss hier "+ 2" verwendet werden, damit der Text ab dem 1. Buchstaben des Dateinamens zurückgegeben wird.
Nachfolgend die Anpassung der Prozedur für 3 Dateinamen, inkl. Optimierung. Die Vorgehensweise für mehr Namen sollte klar sein:
1. Wert für Konstante "AnzDateien" anpassen
2. Für das Array "aNamen" weitere Werte zuweisen.
Optimierungen:
1. Die zu aktualisierenden Dateinamen werden in ein Datenarray eingelesen. So können die Namen immer in For-Next-Schleifen abgearbeitet/verglichen werden.
2. Im Dateiauswahldialog wird der Dateifilter auf die auszuwählenden Dateinamen gesetzt.
3. Die Datenarrays werden variabel über eine vorgegebene Konstante dimensioniert.
Gruß
Franz
Sub VerknuepfungenAendernMeli()
Dim Praes As Presentation, Blatt As Slide, Bild As Shape
Dim sDatei As Variant, sPfad As String, sExcelFile As String
Dim aDatei() As Variant, aPfad() As Variant, aExcelFile() As String, _
aNamen() As String, No As Long
Dim NeuerPfad As String
Const AnzDateien = 3 'Anzahl der Dateien deren Verknüpfugen anzupassen sind
'Dimensionieren der Arrays
ReDim aDatei(1 To AnzDateien), aPfad(1 To AnzDateien)
ReDim aExcelFile(1 To AnzDateien), aNamen(1 To AnzDateien)
'Definieren von der AbfrageMaske
'Beginn des Dateinamens der zu suchenden Verknüpfungen - genaue Schreibweise beachten!!
aNamen(1) = "NWS Key Financials P"
aNamen(2) = "DART_NWS_P"
aNamen(3) = "Comments P"
With Application.FileDialog(msoFileDialogFilePicker)
.InitialView = msoFileDialogViewDetails
.ButtonName = "Auswählen"
.AllowMultiSelect = False
'Auswählen der neuen Dateieinamen (No= Anzahl der Dateien)
For No = 1 To AnzDateien
.Title = "Neue """ & aNamen(No) & "...""-Datei(*.xls) für die " _
& "Verknüpfungsaktualisierung auswählen"
.InitialFileName = aNamen(No) & "*.xls*"
If .Show = 0 Then Exit Sub
aPfad(No) = VBA.CurDir
aDatei(No) = .SelectedItems(1)
aExcelFile(No) = Mid(aDatei(No), Len(aPfad(No)) + 2)
Next
End With
Set Praes = ActivePresentation
For Each Blatt In Praes.Slides
For Each Bild In Blatt.Shapes
If Bild.Type = msoLinkedOLEObject Then
For No = 1 To AnzDateien
If InStr(1, Bild.LinkFormat.SourceFullName, aNamen(No)) > 0 Then
Exit For
End If
Next
If No = AnzDateien + 1 Then GoTo NextBild 'Dateiname im SourceFullname nicht gefunden
sPfad = aPfad(No)
sDatei = aDatei(No)
sExcelFile = aExcelFile(No)
If InStr(1, Bild.OLEFormat.ProgID, "Excel.Chart") > 0 Then
NeuerPfad = Bild.LinkFormat.SourceFullName
NeuerPfad = sDatei & Mid(NeuerPfad, InStr(1, NeuerPfad, "!"))
Bild.LinkFormat.SourceFullName = NeuerPfad
End If
If InStr(Bild.OLEFormat.ProgID, "Excel.Sheet") > 0 Then
If InStr(1, Bild.LinkFormat.SourceFullName, "[") > 0 Then
NeuerPfad = Bild.LinkFormat.SourceFullName
NeuerPfad = Mid(NeuerPfad, InStr(1, NeuerPfad, "!"))
NeuerPfad = sDatei & Mid(NeuerPfad, 1, InStr(2, NeuerPfad, "!")) _
& "[" & sExcelFile & Mid(NeuerPfad, InStr(1, NeuerPfad, "]"))
Bild.LinkFormat.SourceFullName = NeuerPfad
Else
NeuerPfad = Bild.LinkFormat.SourceFullName
NeuerPfad = sDatei & Mid(NeuerPfad, InStr(1, NeuerPfad, "!"))
Bild.LinkFormat.SourceFullName = NeuerPfad
End If
End If
End If
NextBild:
Next
Next
Praes.UpdateLinks 'Diese Zeile erforderlich unter PP 2007, damit Darstellung in PP _
aktualisiert wird
End Sub

Anzeige
AW: Powerpoint Verknüpfung ändern mit VBA
08.05.2011 22:38:42
Meli
Vielen Dank, Franz, werde das neue Makro nächste Woche in der Arbeit ausprobieren.
Komischerweise hat es beim ersten Ausprobieren deiner ersten überarbeiteten Makro wunderbar schnell funktioniert (keine Abfrage des Passworts vom Hintergrundsdatei). Allerdings ein Tag später war das Makro wieder sehr langsam und hat das Passwort verlangt).
Nun ja, ich werde dann eben nächste Woche in der Arbeit die neuerste Version ausprobieren und schauen was das Ergebnis sein wird :-).
VIELEN HERZLICHEN DANK SCHON MAL für deine bisherige Hilfe!!
Gruß, Meli
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige