Excel应用-使用VBA自动绘制所有适用类型的Excel图表(代码及效果图)

本文展示了如何使用VBA代码在Excel中批量创建多种类型的图表,包括超过70种不同的图表样式,通过实例代码介绍了如何利用VBA进行图表类型的选择、数据源设定及图表样式的定制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

深夜,没有睡意。因为,再次发现VBA的魅力。

给出一组数据,如下:


可以绘制多少种Excel图表呢?

答案是以下70多种(Excel 2016实测):


这效果绝对炫酷,熬夜也值了。


以上Excel图表类型见下表,


VBA代码共享给有缘人:


Public Sub MonthlyCalc()
    Application.ScreenUpdating = False
'定义用于循环的整型变量
Dim Itemp As Integer
Dim ChartTypeArray() As Variant
Dim ChartCount As Integer
    For Itemp = 1 To 12
        '计算商品(甲)的销售额合计
        Cells(4, Itemp + 2) = Cells(2, Itemp + 2) * Cells(3, Itemp + 2)
        '计算商品(乙)的销售额合计
        Cells(7, Itemp + 2) = Cells(5, Itemp + 2) * Cells(6, Itemp + 2)
        '计算商品(丙)的销售额合计
        Cells(10, Itemp + 2) = Cells(8, Itemp + 2) * Cells(9, Itemp + 2)
        '计算三种商品总的销售额合计
        Cells(11, Itemp + 2) = Cells(4, Itemp + 2) + Cells(7, Itemp + 2) _
                + Cells(10, Itemp + 2)
    Next Itemp
    
    'ChartTypeArray = Array(xlLineMarkers, xlLineMarkersStacked, xlLineMarkersStacked100)
    'ChartTypeArray = Array(63, 64, 65, 66, 67)
    '88, 89, 90, 91 excluded
    'ChartTypeArray = Array(-4169, -4151, -4120, -4102, -4101, -4100, -4098, 1, 4, 5, 15, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87)
    
    'ChartTypeArray = Array(92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112)
    ChartTypeArray = Array(-4169, -4151, -4120, -4102, -4101, -4100, -4098, 1, 4, 5, 15, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, _
                            67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, _
                            102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112)
    
    ChartCount = 1
    Do While (ChartCount <= (UBound(ChartTypeArray) + 1))
        '添加图表
        Charts.Add
        '定义图表类型
        ActiveChart.ChartType = ChartTypeArray(ChartCount - 1)
        '图表数据源
        ActiveChart.SetSourceData Source:=Sheets("chap5_2").Range( _
            "A1:N1,A4:N4,A7:N7,A10:N10"), PlotBy:=xlRows
        '设置图表添加的位置
        ActiveChart.Location Where:=xlLocationAsObject, Name:="charts2"
        With ActiveChart
            '使图表带有“标题”
            .HasTitle = True
            '设置图表“标题”
            .ChartTitle.Characters.Text = ChartTypeArray(ChartCount - 1) & "——月销售情况对比"
            '使图表带有X坐标标题
            '.Axes(xlCategory, xlPrimary).HasTitle = True
            '设置图表X坐标标题
            '.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "月份"
            '使图表带有Y坐标标题
           ' .Axes(xlValue, xlPrimary).HasTitle = True
            '使图表带有Y坐标标题
           ' .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "合计(元)"
        End With
        
        With ActiveChart.Parent
           ' .Left = 10 + 368 * (ChartCount - 1) '此处用以修改图表在工作表中的位置
           ' .Top = 200
            .Left = 10 + Int(ChartCount / 15) * 356 '此处用以修改图表在工作表中的位置
            If (ChartCount Mod 15 <> 0) Then
                .Top = 222 * (ChartCount Mod 15)
                Else
                .Top = 222
            End If
        End With

        ChartCount = ChartCount + 1
    Loop
    
    
    Application.ScreenUpdating = True
End Sub

### 如何使用 Excel VBA 自动生成 PPT 或 PowerPoint 文件 通过 Excel VBA 自动化生成 PowerPoint 文件是一种高效的方式,可以将 Excel 中的数据动态地嵌入到幻灯片中。以下是实现这一功能的具体方法: #### 创建并初始化 PowerPoint 对象 首先需要创建一个 PowerPoint 应用程序对象,并设置其可见性以便调试或隐藏运行过程。 ```vba Dim pptApp As Object Set pptApp = CreateObject("PowerPoint.Application") ' 初始化 PowerPoint 应用程序 pptApp.Visible = True ' 设置为 True 可视化操作;False 则后台运行 ``` 此部分代码用于启动 PowerPoint 并使其可视化[^1]。 #### 添加新的演示文稿 接着,需向该应用程序实例添加一个新的空白演示文稿。 ```vba Dim pptPres As Object Set pptPres = pptApp.Presentations.Add ' 新建一个演示文稿 ``` 上述代码片段会新建一份空白的 PowerPoint 文档[^2]。 #### 向幻灯片中插入表格数据 如果目标是从 Excel 表格导入数据,则可以通过以下方式完成: ```vba Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) ' 假设数据位于第一个工作表上 ' 定义要复制的区域范围 (例如 A1:C10) ws.Range("A1:C10").Copy ' 插入新幻灯片并将剪贴板内容粘贴进去 Dim slide As Object, shape As Object Set slide = pptPres.Slides.Add(pptPres.Slides.Count + 1, ppLayoutText) ' 使用文本布局样式 slide.Shapes.PasteSpecial DataType:=ppPasteEnhancedMetafile ' 将Excel数据作为增强型元文件粘贴 ``` 注意 `ppLayoutText` 和其他常量可能需要提前定义或者直接替换为其数值表示形式(如 `-2`),因为这些名称并非默认存在于标准库中。 #### 调整图表大小位置 为了使生成的内容更加美观整齐,还可以进一步调整所插入图形的位置和尺寸参数: ```vba With slide.Shapes(slide.Shapes.Count) .Left = 50 ' 左边距设定为50点 .Top = 80 ' 上方距离设定为80点 .Width = 400 ' 图形宽度设为400点 .Height = 300 ' 高度则定为300点 End With ``` 以上脚本实现了对最新加入形状属性的基本控制。 #### 结束处理与保存文档 最后一步就是妥善结束整个流程以及存储最终成果: ```vba pptPres.SaveAs FileName:="C:\path\to\your\output.pptx", FileFormat:=ppSaveAsDefault ' 存储路径自定义修改 pptApp.Quit ' 关闭Powerpoint应用程 Set pptApp = Nothing : Set pptPres = Nothing ' 清理变量释放资源 ``` 确保指定了正确的目录地址来储存输出文件。 --- ### 注意事项 - 在实际部署前,请确认开发环境中启用了 Microsoft PowerPoint 的引用支持。 - 如果遇到权限错误等问题,检查宏安全级别设置是否允许执行外部命令。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值