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

7

我在Excel中创建了一个宏,可以旋转3D图表。我将图表复制到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被退出,它不会进入第二次迭代。

1
你是否检查过Excel和Powerpoint之间的对象是否使用相同的接口? - Charles Wood
1
你的UPDATE代码是从原始代码复制的吗?如果是,检查第二部分的拼写,其中SlideShowWindows被拼错了。 - Instant Breakfast
你四个月前提出了这个问题,但是没有得到答案:你最终解决了这个问题吗? - Instant Breakfast
1
由于您正在从页面更改事件触发SpinTheChart,因此每次使用.View.GoToSlide时都会触发它。建议:声明一个公共布尔值(我们称之为bUpdating)。在SpinTheChart例程中设置为True,在OnSlideShowPageChange中仅在bUpdating为False时运行代码。 - Steve Rindsberg
2个回答

1

0

貌似图表上的更改不会触发幻灯片视图的刷新。但是在形状中文本的更改会这样做。因此,下面的代码旋转了图表:

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演示期间使用宏时可能出现的其他问题?在这种环境下,宏非常脆弱,其效果必须仔细测试。

而且,只有在启动演示之前激活了VBA,OnSlideShowPageChange才能起作用。最简单的方法是在开始演示之前打开并关闭VBA编辑器。

问候

Axel


对于我的PowerPoint 2007有效。当然,名称必须正确。创建一个具有3个幻灯片的新PPT演示文稿。在第二张幻灯片上有一个标题形状和一个3D图表形状。打开VBA编辑器。将代码复制到模块中。将“Slide1”更改为“Slide2”。一步一步执行Public Sub SpinTheChart()直到Set oSlide = ActivePresentation.Slides("Slide2")。查看本地窗口,找到oSlide-Shapes-Item2的名称。在Set oChart = oSlide.Shapes("Diagramm 4").Chart中替换此名称。保存VBA。关闭VBA编辑器。现在在演示模式下应该可以运行。 - Axel Richter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接