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

时间:2013-10-22 15:49:07

标签: excel vba excel-vba powerpoint powerpoint-vba

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

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

更新: 我还在打这个。似乎有些建议说更新当前显示的图表,你需要在DoEvents下面使用:

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

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

2 个答案:

答案 0 :(得分:1)

如果图表在编辑模式下旋转,为什么不将其记录为.GIF并在演示文稿中包含该图表?

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

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

答案 1 :(得分: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编辑器。

问候

阿克塞尔