如何解决使用VBA从Microsoft Excel将数据获取到Powerpoint图中
|| 我正在尝试使用VBA将数据从Excel获取到Powerpoint Graph中(将数据粘贴到Powerpoint Graph对象后面的数据表中)。 我以以下代码为例(源):\'Code by Mahipal Padigela
\'Open Microsoft Powerpoint,Choose/Insert a Graph type Slide(No.8),then double click to add a graph and click...
\'...outside the graph to close the Datasheet,then rename the Graph to \"Mychart\",Save and Close the Presentation
\'Open Microsoft Excel,add some test data to Sheet1(This example assumes that you have some test data...
\'...(numbers between 0-100) in Rows 2,3,4 and Columns B,C,D,E).
\'Open VBA editor(Alt+F11),Insert a Module and Paste the following code in to the code window
\'Reference \'Microsoft Powerpoint Object Library\' (VBA IDE-->tools-->references)
\'Reference \'Microsoft Graph Object Library\' (VBA IDE-->tools-->references)
\'Change \"strPresPath\" with full path of the Powerpoint Presentation created earlier.
\'Change \"strNewPresPath\" to where you want to save the new Presnetation to be created later
\'Close VB Editor and run this Macro from Excel window(Alt+F8)
Dim oPPTApp As PowerPoint.Application
Dim oPPTShape As PowerPoint.Shape
Dim oPPTFile As PowerPoint.Presentation
Public oGraph As Graph.Chart
Dim SlideNum As Integer
Sub PPGraphMacro()
Dim strPresPath As String,strExcelFilePath As String,strNewPresPath As String
strPresPath = \"H:\\PowerPoint\\Presentation1.ppt\"
strNewPresPath = \"H:\\PowerPoint\\New1.ppt\"
Set oPPTApp = CreateObject(\"PowerPoint.Application\")
oPPTApp.Visible = msoTrue
Set oPPTFile = oPPTApp.Presentations.Open(strPresPath)
SlideNum = 1
oPPTFile.Slides(SlideNum).Select
Set oPPTShape = oPPTFile.Slides(SlideNum).Shapes(\"Mychart\")
Set oGraph = oPPTShape.OLEFormat.Object
Sheets(\"Sheet1\").Activate
oGraph.Application.DataSheet.Range(\"A1\").Value = Cells(2,2).Value
oGraph.Application.DataSheet.Range(\"A2\").Value = Cells(3,2).Value
oGraph.Application.DataSheet.Range(\"A3\").Value = Cells(4,2).Value
oGraph.Application.DataSheet.Range(\"B1\").Value = Cells(2,3).Value
oGraph.Application.DataSheet.Range(\"B2\").Value = Cells(3,3).Value
oGraph.Application.DataSheet.Range(\"B3\").Value = Cells(4,3).Value
oGraph.Application.DataSheet.Range(\"C1\").Value = Cells(2,4).Value
oGraph.Application.DataSheet.Range(\"C2\").Value = Cells(3,4).Value
oGraph.Application.DataSheet.Range(\"C3\").Value = Cells(4,4).Value
oGraph.Application.DataSheet.Range(\"D1\").Value = Cells(2,5).Value
oGraph.Application.DataSheet.Range(\"D2\").Value = Cells(3,5).Value
oGraph.Application.DataSheet.Range(\"D3\").Value = Cells(4,5).Value
oGraph.Application.Update
oGraph.Application.Quit
oPPTFile.SaveAs strNewPresPath
oPPTFile.Close
oPPTApp.Quit
Set oGraph = Nothing
Set oPPTShape = Nothing
Set oPPTFile = Nothing
Set oPPTApp = Nothing
MsgBox \"Presentation Created\",vbOKOnly + vbInformation
End Sub
当我运行此程序时,PPT可以很好地打开,然后代码在以下位置停止:
Set oGraph = oPPTShape.OLEFormat.Object
错误消息为“ OLEFormat(未知成员):无效的请求。此属性仅适用于OLE对象。”
我正在使用Excel和PowerPoint 2010。
我究竟做错了什么?我对这一切都很陌生,因此我认为这很简单。
谢谢
/吉米
解决方法
PowerPoint 2010中的新工作方式是创建Excel工作表并将其链接到图表的
ChartData
。
http://msdn.microsoft.com/zh-cn/library/ff973127.aspx给出了如何执行此操作的示例,为方便起见,以下复制了该示例。
Sub CreateChart()
Dim myChart As Chart
Dim gChartData As ChartData
Dim gWorkBook As Excel.Workbook
Dim gWorkSheet As Excel.Worksheet
\' Create the chart and set a reference to the chart data.
Set myChart = ActivePresentation.Slides(1).Shapes.AddChart.Chart
Set gChartData = myChart.ChartData
\' Set the Workbook and Worksheet references.
Set gWorkBook = gChartData.Workbook
Set gWorkSheet = gWorkBook.Worksheets(1)
\' Add the data to the workbook.
gWorkSheet.ListObjects(\"Table1\").Resize gWorkSheet.Range(\"A1:B5\")
gWorkSheet.Range(\"Table1[[#Headers],[Series 1]]\").Value = \"Items\"
gWorkSheet.Range(\"A2\").Value = \"Coffee\"
gWorkSheet.Range(\"A3\").Value = \"Soda\"
gWorkSheet.Range(\"A4\").Value = \"Tea\"
gWorkSheet.Range(\"A5\").Value = \"Water\"
gWorkSheet.Range(\"B2\").Value = \"1000\"
gWorkSheet.Range(\"B3\").Value = \"2500\"
gWorkSheet.Range(\"B4\").Value = \"4000\"
gWorkSheet.Range(\"B5\").Value = \"3000\"
\' Apply styles to the chart.
With myChart
.ChartStyle = 4
.ApplyLayout 4
.ClearToMatchStyle
End With
\' Add the axis title.
With myChart.Axes(xlValue)
.HasTitle = True
.AxisTitle.Text = \"Units\"
End With
\'myChart.ApplyDataLabels
\' Clean up the references.
Set gWorkSheet = Nothing
\' gWorkBook.Application.Quit
Set gWorkBook = Nothing
Set gChartData = Nothing
Set myChart = Nothing
End Sub
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。