【问题标题】:VBA paste msoChart into Powerpoint 2010VBA 将 msoChart 粘贴到 Powerpoint 2010
【发布时间】:2015-04-21 08:45:55
【问题描述】:

我正在尝试使用 VBA 将带有嵌入数据的 msoChart 对象从剪贴板粘贴到 PowerPoint 2010 中。 (在 Excel 2010 中创建的图表)。

我能找到的唯一示例涉及将图表链接到 Excel 文件或创建 msoEmbeddedOLEObject。

如果我在 PowerPoint 2010 中手动粘贴,我会看到“嵌入工作簿”的粘贴选项。但是它在手动“选择性粘贴”中不可用。

所以看起来除了粘贴图表之外还需要一些其他的东西。但我不确定那是什么或如何去做。

我试过的是

Sub PasteExample()
Dim Sld As Slide
Dim Shp As ShapeRange

    Set Sld = ActiveWindow.View.Slide
    
    '# This pastes clipboard content as a linked chart
    Set Shp = Sld.Shapes.Paste
End Sub

Sub PasteExample2()
Dim Sld As Slide
Dim Shp As ShapeRange

    Set Sld = ActiveWindow.View.Slide

    '# This option does not work, object is still linked
    'Set Shp = Sld.Shapes.PasteSpecial(DataType:=ppPasteDefault, Link:=msoFalse)

    '# This option does not work, object is still linked
    'Set Shp = Sld.Shapes.PasteSpecial(DataType:=ppPasteShape, Link:=msoFalse)
    
    '# I'm not after OLEObjects
    'Set Shp = Sld.Shapes.PasteSpecial(DataType:=ppPasteOLEObject, Link:=msoFalse)
End Sub

如果你能解释一下,非常感谢。

【问题讨论】:

    标签: vba excel powerpoint


    【解决方案1】:

    我们看不到您在复制什么以及如何复制,如果问题没有解决,请加入代码

    以下是您可以在 PowerPoint 中与 PasteSpecial 一起使用的 PpPasteDataType 成员:

    通常,我使用该代码作为基础,它应该对您有所帮助:

    Sub Export_to_Ppt()
    '
    Dim Ppt As PowerPoint.Application, _
        Pres As PowerPoint.Presentation
    
    Set Ppt = CreateObject("PowerPoint.Application")
    Set Pres = Ppt.Presentations.Open("I:\Template DTC.potx")
    
    Ppt.Visible = True
    
    Sheets("Graph1").ActiveChart.ChartArea.Copy
    
    Pres.Slides.Add Index:=Pres.Slides.Count + 1, Layout:=ppLayoutTitleOnly
    'Pres.Slides(Pres.Slides.Count).Shapes.Paste
    Pres.Slides(Pres.Slides.Count).Shapes.PasteSpecial DataType:=ppPasteEnhancedMetafile, Link:=False
    
    Pres.Slides(Pres.Slides.Count).Shapes.Title.TextFrame.TextRange.Text = "Chart Title"
    
    
    Pres.SaveAs _
        Filename:="I:\TestNaz.ppt", _
        FileFormat:=ppSaveAsOpenXMLPresentation
    
    Set Ppt = Nothing
    Set Pres = Nothing
    
    End Sub
    

    【讨论】:

    • 用户将创建一个图表(任何 Excel 图表)手动将其复制到剪贴板 (Crtl + C)。我正在使用一种 Powerpoint 解决方案,该解决方案将从剪贴板插入图表并嵌入数据,但不是 EmbeddedOLEObject 也不是链接图表。
    • 好的,所以你应该使用这个:Pres.Slides(Pres.Slides.Count).Shapes.PasteSpecial DataType:=ppPasteEnhancedMetafile, Link:=False
    • 那只会插入一张图片。我很高兴您的尝试,但您似乎没有阅读我发布的代码上方的问题。
    • 好的,我现在看到了您的确切问题,但似乎 Powerpoint Chart 类中可以帮助您的 2 个属性DataTableChartData 都处于只读状态...跨度>
    【解决方案2】:

    我尝试使用 PowerPoint 2013 重现您的示例。我无法重现您描述的行为。

    前提条件:我将 Excel 2013 图表复制到剪贴板(只是图表,而不是整个工作表或其他任何内容)。

    调用Sld.Shapes.PasteSld.Shapes.PasteSpecial(DataType:=ppPasteDefault,Link:=msoFalse) 将在Powerpoint 中插入一个msoChart:

    Set shp = Sld.Shapes.Paste
    MsgBox shp.Type ' returns 3 that is msoChart
    
    Set shp = Sld.Shapes.PasteSpecial(DataType:=ppPasteDefault, Link:=msoFalse)
    MsgBox shp.Type 'returns 3 that is msoChart
    

    这些图表以当前 PowerPoint 样式正确格式化,我可以右键单击它们来编辑数据。

    特别是,它们是嵌入的,而不是链接的。


    为了比较,我也试过:

    Set shp = Sld.Shapes.PasteSpecial(DataType:=ppPasteOLEObject, Link:=msoFalse)
    MsgBox shp.Type ' returns 7 that is msoEmbeddedOLEObject 
    
    Set shp = Sld.Shapes.PasteSpecial(DataType:=ppPasteOLEObject, Link:=msoTrue)
    MsgBox shp.Type ' returns 10 that is msoLinkedOLEObject 
    
    Set shp = Sld.Shapes.PasteSpecial(DataType:=ppPasteDefault, Link:=msoTrue)
    MsgBox shp.Type 'returns 10 that is msoLinkedOLEObject 
    

    当我在 Powerpoint 中右键单击它们时,会有菜单项分别操作“工作表对象”和“链接工作表对象”。

    所以要么我误解了您所说的“链接”是什么意思,要么 PP 2010 中存在错误,要么您的剪贴板中有不同的内容。

    【讨论】:

    • Powerpoint 2013 中似乎有一些改进/错误修复。不幸的是,我目前无法验证这一点。
    【解决方案3】:

    我确实找到了另一种形式的解决方案。 一旦图表在剪贴板中。

    在 PowerPoint 2010 中执行以下行

        Application.CommandBars.ExecuteMso "PasteExcelChartDestinationTheme"
    

    它给了我想要的东西。

    【讨论】:

      猜你喜欢
      • 2015-03-27
      • 2019-09-05
      • 2011-11-21
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      相关资源
      最近更新 更多