
如图,本人用的是excel2007版的,想用selection_change事件的vba来实现如下功能:
(1)选中A列"型号"下的对应型号后,会先删除表格中存在的图表(如果有的话),然后出现该型号的图表,如在本图中选中的是型号“B”,那么就会把之前出现过的图表删除(假设之前有个A的图表),然后再出现对应的B型号的情况图表;
(2)选中A列中上一行有型号名称的空格后,会把表格中所有的图表删除。
问题是,我自制了一段代码,基本上是可以实现以上的功能,但是美中不足的是,这个代码在生成图表的时候,总是会生成两个图表(一模一样的),虽然总体来说无大碍,但是心里不舒服,想精益求精,特来请教各位高手,看这是什么问题。
我所用的代码如下:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Integer
i = Range("a65536").End(xlUp).Row
If Target.Column = 1 Then
If Target.Row < i + 2 Then
If Target.Row Mod 2 = 0 Then
If ActiveSheet.ChartObjects.Count > 0 Then
ActiveSheet.ChartObjects.Delete
End If Range(Cells(Target.Row, Target.Column), Cells(Target.Row + 1, Target.Column + 10)).Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range(Cells(Target.Row, Target.Column), Cells(Target.Row + 1, Target.Column + 10))
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SeriesCollection(1).XValues = "=图表!$C$1:$K$1" '这里可以修改相应的"sheet"(我这里的是“图表”)
ActiveChart.SeriesCollection(1).Smooth = True
ActiveChart.SeriesCollection(2).AxisGroup = 2
ActiveChart.SeriesCollection(2).Smooth = True
ActiveChart.Axes(xlValue, xlSecondary).Select
Selection.TickLabels.NumberFormatLocal = "0%"
Target.Offset(0, 1).Select
Else
If ActiveSheet.ChartObjects.Count > 0 Then
ActiveSheet.ChartObjects.Delete
End If
End If
End If
End If End Sub