Excel VBA

Liebe/-r Experte/-in,

habe da ein kleines Problem und hoffe auf Hilfe.

darum geht’s: mehrere PPT-Folien gleichzeitig kopieren

folgende Aufgabenstellung:
es sollen mit einem excel-makro bestimmte folien aus einer ppt-Präsentation in eine andere Präsentation kopiert werden. welche folien aus der quelldatei kopiert werden sollen, soll aus dem excel-blatt ausgelesen werden. hier ist aber das problem. wenn ich die folien direkt im makro festlege (z.B. 2 und 3) dann funktioniert es. aber ich will wie gesagt, die zu kopierenden folien im excel-blatt festlegen.
Noch was: ich weiss, ich kann es mit einer schlafe hinkriegen, dass jede folie einzeln rüberkopiert wird. wenn es aber wie in meinem fall über 70 folien aus drei quellen sind, dann dauert es sehr lange, jede folie einzeln zu kopieren. da macht es mehr sinn z.b. die Folien 2-7 en bloc aus quelle1, folien 3-6 en bloc aus quelle2 u.s.w. zu kopieren.

Hier noch der Quellcode eines beispiels:

Sub FolienKopieren()
Dim PPT As Object
Dim ppQuelle As Object
Dim ppZiel As Object

quelle = „C:\Pfad\quelle.ppt“
ziel = „C:\Pfad\ziel.ppt“

Set PPT = CreateObject(„PowerPoint.Application“)

With PPT
.Visible = True
.WindowState = 1
.Activate
End With

Set ppQuelle = PPT.presentations.Open(quelle)
With PPT
.activepresentation.slides.Range(Array(2, 3)).Select
.ActiveWindow.Selection.Copy

Set ppZiel = PPT.presentations.Open(ziel)
.activepresentation.slides(1).Select
.ActiveWindow.View.Paste
End With

End Sub

Es geht also darum, dass in der Klammer von „Array()“ variabel unterschiedliche Foliennummern stehen können, die in der excel-tabelle in einer zelle ausgelesen werden.

Hoffe jemand kann mir da helfen.

Hallo Kristina,

irgend wie ist der cod komisch. einerseits sieht es danach aus, als ob du dich voll und ganz auskennst, anderer seits kennst du nicht Range(„A1“) oder so.

beispiel: du willst die nummer der folie die du kopieren willst in der zelle a1 vorgeben als nummer. dann schreibst du die nummer in die zelle a1 und in dein array schreibst du halt:
.activepresentation.slides.Range(Array(Range(„A1“, 3)).Select
wobei ich mir nicht sicher bin. vieleicht muss es auch so gehen:
.activepresentation.slides.Range(„A1“).Select
und so weiter. damit wird schon mal das erste problem gelöst.

und zum zweiten hab ich nicht ganz verstanden was du willst. das einzige was ich mir vorstellen könnte, ist das du in der spalte „A“ „“)
With PPT
.Visible = True
.WindowState = 1
.Activate
End With

Set ppQuelle = PPT.presentations.Open(quelle)
With PPT
.activepresentation.slides.Range(Array(range(„A“&i, 3)).Select
.ActiveWindow.Selection.Copy
Set ppZiel = PPT.presentations.Open(ziel)
.activepresentation.slides(1).Select
.ActiveWindow.View.Paste
End With
i=i+1
loop

ungefähr so. hab jetzt nicht geprüft ob es so läuft, aber das wichtigste ist das du verstehst wofür Range(„A“ & i) steht. Damit sagst du „Bereich Spalte A und Zeile i“ und i steht für eine nummer.

Bin mir sicher dass da noch irgend wo fehler ist, wie gesagt ist nicht getestet. Aber ich hoffe ich konnte dir bißchen zu neuen ideen verhelfen.

mfg eugenIS

Hallo Eugen,

danke für die schnelle Antwort.

Ich hab mich wohl etwas unklar ausgedrückt. Ich versuchs ma nochmal, ok? :wink:

Also: Ich möchte bestimmte Folien (sagen wir mal Folie Nr. 2 und 3) von einer ppt-Quelle in eine ppt-Zieldatei kopieren. Dabei muss es möglich sein, die Folien, die ich kopiere, per Eintrag in der Excel-Tabelle zu ändern. Also z.B., dass statt Folie 2 und 3 Folie 1 und 4 kopiert werden. Das funktioniert fabelhaft, wenn ich eine do-while-schleife oder ähnliches verwende. Dann kopiert er aber bei jedem durchlaufen der schleife nur eine einzelne Folie. Bei vielen Folien die kopiert werden sollen, dauert das ziemlich lange. Deshalb hab ich mir gesagt: „Hey, nimm einfach mehrere Folien aus einer ppt-Quelle und kopiere sie gleichzeitig in die Zieldatei.“ Das habe ich mit diesem „.range(array(2,3))“ geschafft. Nun will ich aber, dass er diese Foliennummer „2,3“ aus einer zelle aus der exceltabelle ausliest. Hab zuerst daran gedacht eine Variable zu nehmen die die nummern der folien aus der zelle ausliest. In etwa so:

dim intFolien As Integer

intFolien = Tabelle1.cells(1,1)
.
.
.
.activepresentation.slides.range(array(intFolien)).select
u.s.w.

in der Zelle A1 würde dann sowas stehen wie 2,3 (also die nummern der Folien die kopiert werden sollen).

Aber so funktioniert das nicht.
Wen man eine Variant-Variable nimmt so wie die synthax für „Array()“ das verlangt, dann klappt es auch nicht.

Weiß auch nich weiter. Hab auch im Netz nichts dazu gefunden; is wohl ein eher spezieller fall. Aber hej, vielleicht hast du da ja die ultimative Lösung?!

Hallo Kristina,

gibst doch garnicht, weltmeisterschaft läuft, und ich antworte dir…

naja. so wird es auch nicht funktionieren. wenn du in die zelle a1 2,3,5,6 oder so was eintragen würdest, ist es keine zahl mehr, sondern ein string. das heist du muss irgend wie dein programm wie ich schon angedeutet habe in die zelle a1 2; a2 3; a3 5; usw. und demensprechend muss du deine schleife bauen. so wie du das jetzt vor hast, (jedenfalls so wie ich verstanden habe) muss du extra ein programm bauen das ein string untersucht, die zahlen rausfiltert usw… viel zu aufwändig…

mfg eugen

Hey Eugen,

ja, ich fass es auch nicht: ein Mann antwortet mir an einem solchen Abend. Ich dachte ihr liegt alle betrunken auf Public Viewing Gelände *g*. Naja, aber danke. Mein Problem hast du jetzt verstanden, und ich habe verstanden, dass es leider nicht geht. Ersparst mir damit weiteres Kopfzerbrechen. Und viel Spaß noch beim Spiel!

und ich wundere mich, das eine frau sich mit vba beschäftigt, und die spanier gewinnen. echt ein abend nur zum loto spielen. blöderer spruch fällt mir gerad nciht ein…

) mfg eugen

Na, ich will ehrlich sein, das mit den Spaniern hat sich abgezeichnet, seit die uns so weggeputzt haben. Und die Holländer…naja. Und um ganz ehrlich zu sein: dieses Finale hat mich wie das letzte vor vier Jahren fast kaltgelassen, weil wir so kurz vorher weg vom Fenster waren. Und mir fällt auch kein besserer Spruch ein als „nächstes Mal vielleicht“ oder „egal, Hauptsache Schalke holt mal die Meisterschaft“.
Und damit gute Nacht, lass dich nicht so runterziehen von den doofen Spaniern und freu dich lieber auf die Bundesliga. Und schönen Tag dir morgen.

Liebe Grüße
Kristina

Hallo krishna,

spontan kann ich dir nicht helfen, da ich diese Thematik noch nie programmieren musste.

Da ich auch täglich mit VBA-Problemen konfrontiert werde, stelle ich sie in ein Forum. Viel Glück!

http://www.ms-office-forum.net/forum/

Könntest du mir die Lösung an [email protected] mailen,
wenn das Problem gelöst ist?! Würde gerne noch etwas dazulernen! danke

Hallo krishna,

leider kann ich bei diesem speziellen Problem nicht helfen.

Lieben Gruß

Stefan