【问题标题】:Positioning Excel multiple charts on multiple PPT slides在多张PPT幻灯片上定位Excel多张图表
【发布时间】:2014-03-07 04:21:14
【问题描述】:

这是我第一次在这里问问题,因为你们这些家伙和女孩都很好,我以前从来没有这样做过!

我有以下 VBA 代码,它成功地从电子表格中提取图表,并将它们粘贴到两张新创建的 PPT 幻灯片上。然而,唯一的问题是此代码仅对齐第二张幻灯片上的图表,而不影响第一张幻灯片上的图表。 我终其一生都无法弄清楚她的情况,非常感谢任何意见!

Option Explicit
Sub MakeSlides()
Dim myData As Excel.Range
Dim sheet2 As Excel.Worksheet
Dim objPPT As Object
Set sheet2 = ActiveWorkbook.Sheets("Sheet2")
Set myData = sheet2.Range("A2:B43")
Set objPPT = CreateObject("Powerpoint.application")
myData.Copy
Dim pptApp As New PowerPoint.Application
pptApp.Visible = True
Dim pres As PowerPoint.Presentation
Set pres = pptApp.Presentations.Add
Dim firstslide As PowerPoint.Slide
Set firstslide = pres.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutBlank)
Dim myChart As Excel.ChartObject
Set myChart = Sheet1.ChartObjects(1)
myChart.Copy
firstslide.Shapes.Paste.Select
' Align pasted chart
pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
Set sheet2 = ActiveWorkbook.Sheets("Sheet2")
Set myData = sheet2.Range("A45:B69")
myData.Copy
pptApp.Visible = True
Dim secondslide As PowerPoint.Slide
Set secondslide = pres.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutBlank)
Set myChart = Sheet1.ChartObjects(2)
myChart.Copy
secondslide.Shapes.Paste
' Align pasted chart
pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True

结束子

【问题讨论】:

  • 我知道它有点晚了,但我只是想知道当您使用PasteSpecial 将 Excel 图表粘贴到 PowerPoint 幻灯片上时,它是否还会在 PowerPoint 上复制 Excel.Chart 的方法和事件,或者只是图表?

标签: excel vba powerpoint


【解决方案1】:

也许是这样的;粘贴后立即在第一张幻灯片上对齐图表:

Option Explicit
Sub MakeSlides()
[...]
    myChart.Copy
    firstslide.Shapes.Paste.Select
    ' Align pasted chart
    pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
    pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True

    Set sheet2 = ActiveWorkbook.Sheets("Sheet2")
    Set myData = sheet2.Range("A45:B69")
    myData.Copy
    pptApp.Visible = True
    Dim secondslide As PowerPoint.Slide
    Set secondslide = pres.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutBlank)
    Set myChart = Sheet1.ChartObjects(2)
    myChart.Copy
    secondslide.Shapes.Paste
    ' Align pasted chart
    pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
    pptApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
End Sub

【讨论】:

  • 哎呀,我也发现了。实际上,我一直在使用的代码与您刚才建议的完全一样,我在粘贴时出错了。谢谢你的意见!我就是没办法解决这个问题!
【解决方案2】:

试试这个。 几点:

您不需要为每个图表/幻灯片等添加一个新变量。根据需要重复使用一个就足够了。

除非没有办法(在 Excel 或 PPT 中),否则切勿使用 SELECT。它使代码更加脆弱,并迫使您使应用程序可见(大多数时候并不是真正必要的)。由于 PPT 必须重新绘制所有内容,它还会使您的代码速度降低一个数量级。

Sub MakeSlides()
Dim myData As Excel.Range
Dim sheet2 As Excel.Worksheet
Dim objPPT As Object
Set sheet2 = ActiveWorkbook.Sheets("Sheet2")
Set myData = sheet2.Range("A2:B43")
Set objPPT = CreateObject("Powerpoint.application")
myData.Copy
Dim pptApp As New PowerPoint.Application
pptApp.Visible = True
Dim pres As PowerPoint.Presentation
Set pres = pptApp.Presentations.Add
Dim oSlide As PowerPoint.Slide
Dim oChtShape as PowerPoint.Shape

Set oSlide = pres.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutBlank)
Dim myChart As Excel.ChartObject
Set myChart = Sheet1.ChartObjects(1)
myChart.Copy
Set oChtShape = oSlide.Shapes.Paste(1)

' Align pasted chart
oChtShape.Align msoAlignCenters, True
oChtShape.Align msoAlignMiddles, True

' Not sure what this is supposed to do:
Set sheet2 = ActiveWorkbook.Sheets("Sheet2")
Set myData = sheet2.Range("A45:B69")
myData.Copy

' it's already visible; don't need this
'pptApp.Visible = True

' don't need a new object variable for each slide;
' reuse the existing variable instead
Set oSlide = pres.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutBlank)
Set myChart = Sheet1.ChartObjects(2)
myChart.Copy

'secondslide.Shapes.Paste
Set oChtShape = oSlide.Shapes.Paste(1)

' Align pasted chart
oChtShape.Align msoAlignCenters, True
oChtShape.Align msoAlignMiddles, True

End Sub

【讨论】:

  • 我知道它有点晚了,但我只是想知道当您使用PasteSpecial 将 Excel 图表粘贴到 PowerPoint 幻灯片上时,它是否还会在 PowerPoint 上复制 Excel.Chart 的方法和事件,或者只是图表?
  • 你得到什么取决于你指定的 PasteSpecial 参数。如果你要一张照片,你会得到一张照片;一些图形,而不是真正的图表。如果您嵌入图表,您将获得一个图表,如果在 Excel 中激活该图表,则可以通过寻址 Excel 对象模型来修改该图表。当然,Excel 必须安装在计算机上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 2019-08-16
  • 1970-01-01
  • 2014-11-22
  • 2013-08-05
  • 2012-11-09
相关资源
最近更新 更多