我有两个Active Combo Box,根据用户的选择(必须选择两个选择),将从以下数据集中的数据(这里是数据集的一部分)中生成一个图表:
这是我的代码,但出现编译错误(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
答案 0 :(得分:1)
由于您有两个组合框,因此我假设您只想绘制一个系列,例如电视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个月和带有组合框的剧院后制作的图表。我选择了该系列,因此您可以看到工作表中突出显示的数据范围。
答案 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。系列公式始终指向这些范围,并且当组合框更改时,公式也会更改值。我选择了该系列,以便可以在工作表中突出显示其源数据。