2013-10-22 13 views
7

Ich erstellte ein Makro in Excel, die ein 3D-Diagramm drehen wird. Ich habe das Diagramm in PowerPoint kopiert und den Code so eingerichtet, dass er in PowerPoint ausgeführt wird, wenn die Folie angezeigt wird. Der Code wird ausgeführt, aber ich kann nicht erreichen, dass er tatsächlich ändert, was auf dem Bildschirm angezeigt wird. Wenn sich die Folie im Bearbeitungsmodus befindet, rotiert der Graph. Irgendeine Idee, wie man den Code nicht nur zum Laufen bringt (ich kann sehen, dass die Debug-Nummern auftauchen), aber den Bildschirm im Präsentationsmodus aktualisieren? Mein Code ist:Spinning 3D-Diagramm in PowerPoint-Präsentation

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 

Public Sub SpinTheChart() 

    RotateX = ActivePresentation.Slides(2).Shapes(2).Chart.ChartArea.Format _ 
        .ThreeD.RotationX 

    Do While ActivePresentation.SlideShowWindow.View.CurrentShowPosition = 2 
     RotateX = RotateX + 7 
     If RotateX > 360 Then RotateX = RotateX - 360 
     ActivePresentation.Slides(2).Shapes(2).Chart.ChartArea.Format _ 
        .ThreeD.RotationX = RotateX 
     DoEvents 
     Sleep 125 
     Debug.Print RotateX 
    Loop 

End Sub 

Sub OnSlideShowPageChange() 
    Dim i As Integer 
    i = ActivePresentation.SlideShowWindow.View.CurrentShowPosition 
    If i = 2 Then SpinTheChart 
End Sub 

UPDATE: ich immer noch diese kämpfen werde. Es scheint einige recomendations sagen die aktuell angezeigte Grafik zu aktualisieren, die Sie verwenden müssen, unter den DoEvents:

SlideShowWindows(1).View.GotoSlide SlideSowWindows(1).View.CurrentShowPosition 

aber das funktioniert nicht. Es beendet jeden Code, der ausgeführt wird. Also wird die Do/Loop in der ersten Funktion verlassen und es geht nicht weiter zur zweiten Iteration.

+1

Haben Sie überprüft die Objekte die gleiche Schnittstelle zwischen Excel und Powerpoint verwenden, um sicherzustellen? –

+1

Ist Ihr UPDATE: Code eine exakte Kopie aus dem Code? Wenn ja, überprüfen Sie die Schreibweise in der zweiten Hälfte, wo 'SlideShowWindows' falsch geschrieben ist. –

+0

Sie haben diese Frage vor vier Monaten gestellt und es gibt keine Antworten: Haben Sie dieses Problem jemals gelöst? –

Antwort

0

Es scheint, dass Änderungen an Diagrammen die Aktualisierung von SlideShowView nicht auslösen. Aber Änderungen an Text in Formen werden dies tun. So ist der folgende Code dreht sich das Diagramm:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 

Public Sub SpinTheChart() 

Set oSlide = ActivePresentation.Slides("Slide1") 
Set oChart = oSlide.Shapes("Diagramm 4").Chart 
oChart.ChartArea.Format.ThreeD.RotationX = 20 

snRotationX = oChart.ChartArea.Format.ThreeD.RotationX 

Do While ActivePresentation.SlideShowWindow.View.Slide.Name = "Slide1" 

    snRotationX = snRotationX + 7 
    If snRotationX > 360 Then snRotationX = snRotationX - 360 
    oChart.ChartArea.Format.ThreeD.RotationX = snRotationX 

    'oSlide.Shapes("Rechteck 7").TextFrame.TextRange.Text = snRotationX 
    oSlide.Shapes.Title.TextFrame.TextRange.Text = oSlide.Shapes.Title.TextFrame.TextRange.Text 

    DoEvents 
    Sleep 125 

Loop 
End Sub 

Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow) 
If SSW.View.Slide.Name = "Slide1" _ 
    Then SpinTheChart 
End Sub 

Sie sind vertraut mit den anderen Themen mit Makros während einer Powerpoint-Präsentation? Sie sind in solchen Umgebungen sehr empfindlich und ihre Auswirkungen müssen sorgfältig getestet werden.

Und OnSlideShowPageChange funktioniert nur, wenn die VBA zuvor aktiviert wurde. Der einfachste Weg ist das Öffnen und Schließen des VBA-Editors vor dem Start der Präsentation.

Grüße

Axel

+0

Ich würde gerne wissen, ob das funktioniert. – peege

+0

Funktioniert für mich mit PowerPoint 2007. Natürlich müssen die Namen die richtigen sein. Erstellen Sie eine neue PPT-Präsentation mit 3 Folien. Auf der zweiten Folie haben Sie eine Titelform und eine 3D-Diagrammform. Öffnen Sie den VBA-Editor. Kopieren Sie den Code in ein Modul. Ändern Sie "Slide1" zu "Slide2". Gehen Sie durch "Public Sub SpinTheChart()" bis "Set oSlide = ActivePresentation.Slides (" Slide2 ")". Suchen Sie im lokalen Fenster, welcher Name oSlide-Shapes-Item2 hat. Ersetzen Sie diesen Namen in 'Set oChart = oSlide.Shapes (" Diagramm 4 "). Speichern Sie die VBA. Schließen Sie den VBA-Editor. Jetzt sollte es im Präsentationsmodus laufen. –

Verwandte Themen