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来写图表的主要内容,如果未能解决你的问题,请参考以下文章

VBA绘制Excel图表

如何在excel 用VBA插入多个工作表并命名。要用到宏。给分给分~

在Excel图表中怎样填充图片

Excel 怎样在VBA中打开带有密码的excel文件

excel中怎样用vba使单元格在特定条件下才可以编辑?

在EXCEL中用VBA怎样操作WORD文档中嵌入的EXCEL表格?