是否可以使用组合框在 powerpoint 中控制图表?
Is it possible to control charts in powerpoint using combo box?
下图是我正在尝试做的一个例子。我的图表显示了一个月的资源容量。我从下拉列表中选择要查看数据的月份。虽然这是在 excel 中,但我正在尝试使用图表和 AxtiveX 控件在 Powerpoint 中执行相同的操作。有人可以指导我吗?
使用标准的 Microsoft Forms 2.0 ComboBox 控件(我不使用 ActiveX 控件),这正是您要找的。
在图表所在的幻灯片上插入 ComboBox 控件。这假设图表数据存在于 ChartData.Workbook.Worksheets(1)
工作表的默认 ListBox
项中(即,当您直接在 PPT 中插入图表时会发生这种情况)如果您从 Excel,这可能需要修改,但大体思路是一样的:
- 当用户选择组合框时,(
ComboBox1_GotFocus
查询图表的基础数据以填充列表。如果您的数据结构不同,则需要修改。
- 用户可以在组合框中进行选择。
- 选择后,
ComboBox1_Change
事件会识别包含所选系列的数据范围,并隐藏其他系列,这样只有所选系列可见
这是我的默认图表和数据,我可以通过 right-click/Edit 数据查看:
显示幻灯片,进入ComboBox会显示系列名称列表:
然后,更改选择,仅查看所选系列:
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
下图是我正在尝试做的一个例子。我的图表显示了一个月的资源容量。我从下拉列表中选择要查看数据的月份。虽然这是在 excel 中,但我正在尝试使用图表和 AxtiveX 控件在 Powerpoint 中执行相同的操作。有人可以指导我吗?
使用标准的 Microsoft Forms 2.0 ComboBox 控件(我不使用 ActiveX 控件),这正是您要找的。
在图表所在的幻灯片上插入 ComboBox 控件。这假设图表数据存在于 ChartData.Workbook.Worksheets(1)
工作表的默认 ListBox
项中(即,当您直接在 PPT 中插入图表时会发生这种情况)如果您从 Excel,这可能需要修改,但大体思路是一样的:
- 当用户选择组合框时,(
ComboBox1_GotFocus
查询图表的基础数据以填充列表。如果您的数据结构不同,则需要修改。 - 用户可以在组合框中进行选择。
- 选择后,
ComboBox1_Change
事件会识别包含所选系列的数据范围,并隐藏其他系列,这样只有所选系列可见
这是我的默认图表和数据,我可以通过 right-click/Edit 数据查看:
显示幻灯片,进入ComboBox会显示系列名称列表:
然后,更改选择,仅查看所选系列:
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