Excel EXCEL中怎样用VBA来写图表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Excel EXCEL中怎样用VBA来写图表相关的知识,希望对你有一定的参考价值。
Chart 对象成员代表工作簿中的图表。
方法
名称 说明
Activate 使当前图表成为活动图表。
ApplyChartTemplate 将标准图表类型或自定义图表类型应用于图表。
ApplyDataLabels 将数据标签应用到图表中的所有系列。
ApplyLayout 应用功能区中显示的版式。
Axes 返回一个代表图表上单个坐标轴或坐标轴集合的某个对象。
ChartGroups 返回一个对象,该对象表示图表中单个图表组(ChartGroup 对象)或所有图表组的集合(ChartGroups 对象)。返回的集合中包括每种类型的图表组。
ChartObjects 返回一个对象,它代表工作表上的一个嵌入式图表(ChartObject 对象)或所有嵌入式图表的集合(ChartObjects 对象)。
ChartWizard 修改给定图表的属性。可使用本方法快速设置图表的格式,而不必逐个设置所有属性。本方法是非交互式的,并且仅更改指定的属性。
CheckSpelling 检查对象的拼写。
Copy 将工作表复制到工作簿的另一位置。
CopyPicture 将所选对象作为图片复制到剪贴板。
Delete 删除对象。
Deselect 取消对指定图表的选定。
Evaluate 将一个 Microsoft Excel 名称转换为一个对象或者一个值。
Export 以图形格式导出图表。
ExportAsFixedFormat 导出为指定格式的文件。
GetChartElement 返回指定的 X 坐标和 Y 坐标上图表元素的信息。本方法稍有与众不同之处:调用时只须指定前两个参数,在本方法执行期间,Microsoft Excel 为其余参数赋值,本方法返回后应检验这些参数的值。
Location 将图表移动到新位置。
Move 将图表移到工作簿的另一位置。
OLEObjects 返回一个对象,它代表图表或工作表上的单个 OLE 对象 (OLEObject ) 或所有 OLE 对象的集合(OLEObjects 集合)。只读。 参考技术A vba 做图表 代码提供
使用 VBA 将 Excel 图表粘贴到 Powerpoint 中
【中文标题】使用 VBA 将 Excel 图表粘贴到 Powerpoint 中【英文标题】:Paste Excel Chart into Powerpoint using VBA 【发布时间】:2011-11-21 11:50:55 【问题描述】:我正在尝试创建一个 Excel 宏,用于复制 Excel 工作表上显示的图表,并将它们(特殊粘贴)粘贴到 PowerPoint 中。我遇到的问题是如何将每个图表粘贴到不同的幻灯片上?我根本不知道语法..
这是我目前所拥有的(它有效,但它只粘贴到第一张纸上):
Sub graphics3()
Sheets("Chart1").Select
ActiveSheet.ChartObjects("Chart1").Activate
ActiveChart.ChartArea.Copy
Sheets("Graphs").Select
range("A1").Select
ActiveSheet.Paste
With ActiveChart.Parent
.Height = 425 ' resize
.Width = 645 ' resize
.Top = 1 ' reposition
.Left = 1 ' reposition
End With
Dim PPT As Object
Set PPT = CreateObject("PowerPoint.Application")
PPT.Visible = True
PPT.Presentations.Open Filename:="locationwherepptxis"
Set PPApp = GetObject("Powerpoint.Application")
Set PPPres = PPApp.activepresentation
Set PPSlide = PPPres.slides _
(PPApp.ActiveWindow.Selection.SlideRange.SlideIndex)
' Copy chart as a picture
ActiveChart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, _
Format:=xlPicture
' Paste chart
PPSlide.Shapes.Paste.Select
' Align pasted chart
PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
【问题讨论】:
【参考方案1】:具有从 Excel 到 PPT 绘制 6 个图表功能的代码
Option Base 1
Public ppApp As PowerPoint.Application
Sub CopyChart()
Dim wb As Workbook, ws As Worksheet
Dim oPPTPres As PowerPoint.Presentation
Dim myPPT As String
myPPT = "C:\LearnPPT\MyPresentation2.pptx"
Set ppApp = CreateObject("PowerPoint.Application")
'Set oPPTPres = ppApp.Presentations("MyPresentation2.pptx")
Set oPPTPres = ppApp.Presentations.Open(Filename:=myPPT)
ppApp.Visible = True
Set wb = ThisWorkbook
Set ws = wb.Sheets(1)
i = 1
For Each shp In ws.Shapes
strShapename = "C" & i
ws.Shapes(shp.Name).Name = strShapename
'shpArray.Add (shp)
i = i + 1
Next shp
Call Plot6Chart(oPPTPres, 2, ws.Shapes(1), ws.Shapes(2), ws.Shapes(3), ws.Shapes(4), ws.Shapes(5), ws.Shapes(6))
End Sub
Function Plot6Chart(pPres As Presentation, SlideNo As Long, ParamArray cCharts())
Dim oSh As Shape
Dim pSlide As Slide
Dim lLeft As Long, lTop As Long
Application.CutCopyMode = False
Set pSlide = pPres.Slides(SlideNo)
For i = 0 To UBound(cCharts)
cCharts(i).Copy
ppApp.ActiveWindow.View.GotoSlide SlideNo
pSlide.Shapes.Paste
Application.CutCopyMode = False
If i = 0 Then ' 1st Chart
lTop = 0
lLeft = 0
ElseIf i = 1 Then ' 2ndChart
lLeft = lLeft + 240
ElseIf i = 2 Then ' 3rd Chart
lLeft = lLeft + 240
ElseIf i = 3 Then ' 4th Chart
lTop = lTop + 270
lLeft = 0
ElseIf i = 4 Then ' 5th Chart
lLeft = lLeft + 240
ElseIf i = 5 Then ' 6th Chart
lLeft = lLeft + 240
End If
pSlide.Shapes(cCharts(i).Name).Left = lLeft
pSlide.Shapes(cCharts(i).Name).Top = lTop
Next i
Set oSh = Nothing
Set pSlide = Nothing
Set oPPTPres = Nothing
Set ppApp = Nothing
Set pPres = Nothing
End Function
【讨论】:
【参考方案2】:鉴于我没有可使用的文件位置,因此我在其下方附加了一个例程
-
创建了一个新的 PowerPoint 实例(后期绑定,因此需要为 ppViewSlide 等定义常量)
循环遍历名为 Chart1 的工作表中的每个图表(根据您的示例)
添加新幻灯片
粘贴每个图表,然后重复
您是否需要在导出大小之前对每张图表图片进行格式化,或者您可以更改您的默认图表大小?
Const ppLayoutBlank = 2
Const ppViewSlide = 1
Sub ExportChartstoPowerPoint()
Dim PPApp As Object
Dim chr
Set PPApp = CreateObject("PowerPoint.Application")
PPApp.Presentations.Add
PPApp.ActiveWindow.ViewType = ppViewSlide
For Each chr In Sheets("Chart1").ChartObjects
PPApp.ActivePresentation.Slides.Add PPApp.ActivePresentation.Slides.Count + 1, ppLayoutBlank
PPApp.ActiveWindow.View.GotoSlide PPApp.ActivePresentation.Slides.Count
chr.Select
ActiveChart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture
PPApp.ActiveWindow.View.Paste
PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
Next chr
PPApp.Visible = True
End Sub
【讨论】:
谢谢让-弗朗索瓦。这是一个公平的问题——简短的回答是个人喜好。通常,如果自动化对象的多个版本是可能的,我会延迟绑定,并且我发现问答论坛中的用户可能会在参考设置方面遇到困难。虽然我在我的 Duplicate Master 插件中使用了 early binging,因为它只绑定到文件脚本库,它减少了 20-30% 的运行时间,并且作为插件的一部分,它会自动为用户安装。以上是关于Excel EXCEL中怎样用VBA来写图表的主要内容,如果未能解决你的问题,请参考以下文章