在PowerPoint演示文稿中旋转3D图表

问题描述:

我在Excel中创建了一个可以旋转3D图表的宏。我将图表复制到PowerPoint中,将代码设置为在幻灯片显示时在PowerPoint中运行。代码运行,但我无法实际改变屏幕上显示的内容。幻灯片处于编辑模式时,图形将旋转。任何想法如何让代码不只是运行(我可以看到调试数字显示),但更新屏幕时,在演示模式?我的代码是:在PowerPoint演示文稿中旋转3D图表

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 

更新: 我还在为此而战。这似乎有些recomendations说来更新当前显示的图表,你需要使用时,下面的DoEvents:

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

但这不起作用。它退出正在运行的任何代码。所以第一个函数中的Do/Loop被退出,并且不会继续执行第二次迭代。

+1

你检查,以确保对象使用Excel和PowerPoint中的相同的接口? –

+1

是您的更新:从代码中精确复制代码?如果是这样,请检查下半部分的拼写,其中'SlideShowWindows'拼写错误。 –

+0

四个月前你问过这个问题,但没有答案:你有没有解决过这个问题? –

看起来图表上的更改不会触发SlideShowView刷新。但在形状上的文字的变化将做到这一点。因此,以下代码将旋转图表:

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 

您在Powerpoint演示期间熟悉宏的其他问题?他们在这样的环境中非常脆弱,他们的影响必须仔细测试。

而OnSlideShowPageChange仅在VBA之前被激活时才起作用。最简单的方法是在开始演示之前打开和关闭VBA编辑器。

问候

阿克塞尔

+0

我很想知道这是否有效。 – peege

+0

适用于PowerPoint 2007。当然,名称必须是正确的。用3张幻灯片创建一个新的PPT演示文稿。在第二张幻灯片上有一个标题形状和一个3D图形。打开VBA编辑器。将代码复制到模块中。将“Slide1”更改为“Slide2”。步骤通过'公共Sub SpinTheChart()'直到'设置oSlide = ActivePresentation.Slides(“Slide2”)'。在本地窗口中查找哪个名称具有oSlide-Shapes-Item2。在'Set oChart = oSlide.Shapes(“Diagramm 4”)。Chart'中替换这个名字。保存VBA。关闭VBA编辑器。现在它应该以演示模式运行。 –

如果图表旋转在编辑模式下,你为什么不记录它作为一个.gif的包括在演示文稿中?

添加GIF动画到PowerPoint:https://support.office.com/en-us/article/Add-an-animated-GIF-to-a-slide-3a04f755-25a9-42c4-8cc1-1da4148aef01

录制屏幕:http://www.screentogif.com