Das Kopieren von Powerpoint Sheets per VBA Programmcode kann sich als problematisch erweisen:
Es sind zwar einige Beispiele hierzu im Netz vorhanden, diese sehen meist wie folgt aus:
ActivePresentation.Slides.Range(1).Select
ActiveWindow.Selection.Copy
ActiveWindow.View.Paste
Dies funktioniert, jedoch nur, wenn in Powerpoint die linke Slides-Auswahl den Focus hat.
Wird in Powerpoint durch vorangehenden Makro-Code der Focus auf das Slide selbst gesetzt erscheinen Fehlermeldungen wie:
Run-time error ‚-2147188160 (80048240)‘: Selection (unknown member): Invalid request. Nothing appropriate is currently selected.
Run-time error ‚-2147188160 (80048240)‘: View (unknown member): Invalid request. Clipboard is empty or contains data which may not be pasted here.
Um das Problem zu lösen können die Objekte Active… durch die absoluten Objekte ersetzt werden – damit ist die Funktion des Codes sichergestellt, unabhängig davon, welches Anwendungselement innerhalb Powerpoints aktuell fokusiert ist:
Sub BeispielPowerpointSeitenKopieren() Dim taSlides() As Integer ReDim taSlides(0 To 1) taSlides(0) = 3 taSlides(1) = 4 ActivePresentation.Slides.Range(taSlides).Select ActivePresentation.Slides.Range(taSlides).Copy ActivePresentation.Slides.Paste End Sub
Dieses Beispiel zeigt zudem wie gleich mehrere Slides zum kopieren markiert werden können.
Das Objekt ActivePresentation kann jetzt noch durch eine Objektvariable ersetzt werden – so dass dann auch unabhängig ist, welche Präsentation im Moment des Ausführens aktiv ist.