【问题标题】:Spinning 3D chart in PowerPoint presentation在 PowerPoint 演示文稿中旋转 3D 图表
【发布时间】:2017-12-02 09:04:45
【问题描述】:

我在 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 退出了,它不会继续进行第二次迭代。

【问题讨论】:

  • 您是否检查过以确保对象在 Excel 和 Powerpoint 之间使用相同的界面?
  • 您的更新:代码是否与代码完全相同?如果是这样,请检查后半部分的拼写,其中SlideShowWindows 拼写错误。
  • 你四个月前问过这个问题,但没有答案:你解决过这个问题吗?
  • 由于您是从页面更改事件触发 SpinTheChart,因此每次使用 .View.GoToSlide 时都会触发。建议:声明一个公共布尔值(我们称之为 bUpdating)。在 SpinTheChart 例程和 OnSlideShowPageChange 中设置为 True,仅当 bUpdating 为 False 时才运行代码

标签: vba excel powerpoint


【解决方案1】:

如果图表在编辑模式下旋转,为什么不将其记录为 .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

【讨论】:

    【解决方案2】:

    图表上的更改似乎不会触发 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
    

    您熟悉演示文稿期间宏的其他问题吗?它们在这样的环境中非常脆弱,必须仔细测试它们的效果。

    OnSlideShowPageChange 只有在 VBA 之前被激活时才有效。最简单的方法是在开始演示之前打开和关闭 VBA 编辑器。

    问候

    阿克塞尔

    【讨论】:

    • 适用于我的 PowerPoint 2007。当然名称必须是正确的。用 3 张幻灯片创建一个新的 PPT 演示文稿。在第二张幻灯片上有一个标题形状和一个 3D 图表形状。打开 VBA 编辑器。将代码复制到模块中。将“幻灯片 1”更改为“幻灯片 2”。逐步通过Public Sub SpinTheChart() 直到Set oSlide = ActivePresentation.Slides("Slide2")。查看名称为 oSlide-Shapes-Item2 的本地窗口。在Set oChart = oSlide.Shapes("Diagramm 4").Chart 中替换此名称。保存 VBA。关闭 VBA 编辑器。现在它应该在演示模式下运行。
    猜你喜欢
    • 1970-01-01
    • 2014-01-26
    • 2016-05-10
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    相关资源
    最近更新 更多