我有两个活动组合框,根据用户的选择(必须选择两个选择),将从下面的数据集中的数据(这里是数据集的一部分)中生成一个图表:
这是我的代码,但出现编译错误(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
由于您有两个组合框,所以我假设您只想绘制一个系列,例如电视6个月,电影院12个月。
组合链接到工作表,既链接到输入范围,又链接到单元格链接。使用这些单元格范围比尝试从组合中获取信息要容易得多。
这是我的设置:
两个组合框。左侧使用C4:C6作为输入范围,使用B4作为单元格链接。右图使用F4:F6作为输入范围,并使用E4作为单元格链接。我们实际上只关心B4和E4,因为我们可以从中确定用于Y值的列。
(通常,您可能会将输入范围和单元格链接放在用户视线之外的某个地方,但不适用于此图例。)
这里是代码。
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个月和带有组合框的剧院后制作的图表。我选择了该系列,因此您可以看到工作表中突出显示的数据范围。
根据您对情况的不同解释,我有一个替代的答案。
如果您有数据和图表,并且只希望能够选择该图表中的内容,而不必每次都构建新的图表,该怎么办?对于组合框,以下是您要让用户与之交互的仪表板的一项很棒的技术。
设置:
两个组合框。左侧使用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。系列公式始终指向这些范围,并且当组合框更改时,公式也会更改值。我选择了该系列,因此您可以在工作表中突出显示其源数据。