簡體   English   中英

VBA 將 msoChart 粘貼到 Powerpoint 2010 中

[英]VBA paste msoChart into Powerpoint 2010

我正在嘗試使用 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

如果你能說明一些問題,非常感謝。

我們看不到您正在復制什么以及如何復制,如果問題未解決,請加入代碼

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

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

我嘗試使用 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 2010 中執行以下行

    Application.CommandBars.ExecuteMso "PasteExcelChartDestinationTheme"

它給了我我所追求的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM