是否可以使用组合框控制powerpoint中的图表?

时间:2016-07-08 15:47:17

标签: excel-vba powerpoint-vba vba excel

下面的图片是我想要做的一个例子。我的图表显示了资源的月份容量。我从下拉列表中选择要查看数据的月份。虽然这是excel,但我尝试使用图表和AxtiveX控件在Powerpoint中做同样的事情。有人可以指导我吗?

Chart and combobox example

1 个答案:

答案 0 :(得分:0)

使用标准的Microsoft Forms 2.0 ComboBox控件(我不使用ActiveX控件),这正是您所需要的。

将ComboBox控件插入到图表所在的幻灯片中。这假设图表数据存在于ListBox工作表的默认ChartData.Workbook.Worksheets(1)项目中(即,当您从PPT中直接插入图表时会发生这种情况)如果您从Excel复制图表,这可能需要修改,但总体思路是一样的:

  1. 当用户选择组合框时,(ComboBox1_GotFocus查询图表的基础数据以填充列表。如果您的数据结构不同,则需要修改。
  2. 用户可以在ComboBox中进行选择。
  3. 进行选择后,ComboBox1_Change事件将识别包含所选系列的数据范围,并隐藏其他系列,以便只显示所选系列
  4. 这是我的默认图表&右键单击/编辑数据我可以查看的数据:

    enter image description here

    显示幻灯片,进入ComboBox将显示系列名称列表:

    enter image description here

    然后,更改选择,并仅查看所选系列:

    enter image description here

    Option Explicit
    'This code belongs in a SLIDE module in PowerPoint
    Private Sub ComboBox1_Change()
    'This procedure hides/unhides chart series, based on combobox value
        Dim rng As Object  'Excel.Range object
        Dim c As Long
    
        With Me.Shapes("Content Placeholder 5").Chart.ChartData  '## MODIFY YOUR SHAPE NAME
            .Activate
            .Workbook.Parent.WindowState = -4140
            For c = 2 To .Workbook.Worksheets(1).ListObjects(1).HeaderRowRange.Columns.Count
                Set rng = .Workbook.Worksheets(1).ListObjects(1).HeaderRowRange.Cells(c)
                rng.EntireColumn.Hidden = (rng.Value <> ComboBox1.Value)
            Next
            .Workbook.Close
        End With
    
    End Sub
    
    Private Sub ComboBox1_GotFocus()
    'This procedure sets the list items in the combobox whenever it gets focus
    Dim lst As Variant
    Dim xlApp As Object
    With Me.Shapes("Content Placeholder 5").Chart.ChartData  '## MODIFY YOUR SHAPE NAME
        .Activate
        .Workbook.Parent.WindowState = -4140
        Set xlApp = .Workbook.Parent
        .Workbook.Worksheets(1).Columns("B:D").Hidden = False
        lst = xlApp.Transpose(xlApp.Transpose(.Workbook.Worksheets(1).Range("B1:D1").Value))
        .Workbook.Close
    End With
    ComboBox1.List = lst
    End Sub