VBA Excel:根据活动组合框中的选择生成图表

时间:2018-09-09 10:12:23

标签: excel vba excel-vba

我有两个Active Combo Box,根据用户的选择(必须选择两个选择),将从以下数据集中的数据(这里是数据集的一部分)中生成一个图表:

enter image description here

从两个组合框中选择时: enter image description here

将在同一张纸上生成一个图表,如下所示: enter image description here

这是我的代码,但出现编译错误(qualificateur incorrect):

Option Explicit
Private Sub Workbook_Open()
Dim cbx As String
Dim cbx2 As String

ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
ActiveChart.SetSourceData Source:=Range("Feuil1!A3:B16")

If cbx.Value = "6 mois" And cbx2.Value = "Télévision" Then
ActiveChart.SetSourceData Source:=Range("Feuil1!A3:B16")
//... same code with other conditions

End If

End Sub

2 个答案:

答案 0 :(得分:1)

由于您有两个组合框,因此我假设您只想绘制一个系列,例如电视6个月,电影院12个月。

组合框链接到工作表,既链接到输入范围,又链接到单元格链接。使用这些单元格范围比尝试从组合中获取信息要容易得多。

这是我的设置:

两个组合框。左侧使用C4:C6作为输入范围,使用B4作为单元格链接。右图使用F4:F6作为输入范围,并使用E4作为单元格链接。我们实际上只关心B4和E4,因为我们可以从中确定用于Y值的列。

(通常,您可能会将输入范围和单元格链接放在用户视线之外的某个地方,但并非出于此插图。)

enter image description here

这是代码。

Sub InsertChartPerComboBoxes()
  Dim rXValues As Range, rYValues As Range, rName As Range
  Dim cht As Chart
  Dim iComboMonths As Long, iComboMedia As Long
  Dim iColumnOffset As Long

  iComboMonths = ActiveSheet.Range("B4").Value
  iComboMedia = ActiveSheet.Range("E4").Value

  iColumnOffset = (iComboMedia - 1) * 3 + iComboMonths

  Set rXValues = ActiveSheet.Range("A10:A17")
  Set rYValues = rXValues.Offset(0, iColumnOffset)
  Set rName = ActiveSheet.Range("A8:A9").Offset(0, iColumnOffset)

  Set cht = ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Chart
  cht.ChartArea.ClearContents

  With cht.SeriesCollection.NewSeries
    .Values = rYValues
    .XValues = rXValues
    .Name = "=" & rName.Address(, , , True)
  End With

End Sub

这是我在选择9个月和带有组合框的剧院后制作的图表。我选择了该系列,因此您可以看到工作表中突出显示的数据范围。

enter image description here

答案 1 :(得分:1)

根据对您情况的不同解释,我有一个替代答案。

如果您具有数据和图表,并且只希望能够选择该图表中的内容,而不必每次都构建新的图表,该怎么办。以下是使用组合框的一种非常好的技术,可让您与用户进行交互。

设置:

两个组合框。左侧使用C4:C6作为输入范围,使用B4作为单元格链接。右边的使用F4:F6作为输入范围,并使用E4作为单元格链接。

我在数据范围旁边添加了一列,该列将根据组合框中的选择而更改。

单元格K8中的公式为=OFFSET(B8,0,(E4-1)*3) 单元格K9中的公式为=OFFSET(A9,0,($E$4-1)*3+$B$4) 复制单元格K9,选择K10:K17,然后粘贴。将百分比格式应用于K10:K17。

图中绘制的系列的X值使用A10:A17,Y值使用K10:K17,名称使用K8:K9。系列公式始终指向这些范围,并且当组合框更改时,公式也会更改值。我选择了该系列,以便可以在工作表中突出显示其源数据。

enter image description here

相关问题