使用VBA通过切换按钮创建/删除图表

时间:2014-07-07 09:13:13

标签: excel excel-vba excel-2007 vba

无论如何,代码不起作用,感到很尴尬:

我的目标是通过切换按钮使用VBA创建特定图表。如果选择/按下切换按钮,则会创建图表并显示在活动工作表的特定部分上。 如果取消选择切换按钮,则会删除图表。

以下是我的工作表的样子:

enter image description here

以下是我从不同的博客中学习VBA后编写的代码,因为我目前无法访问VBA书籍。代码片段用于Google按钮,名为GoogleBtn,并在单击按钮时调用。

Private Sub GoogleBtn_Click()

Dim mySheet As Workbook
Dim myChart As Chart

Set mySheet = ActiveWorkbook.Worksheets("Sheet1")
Set myChart = mySheet.Shapes.AddChart.Chart

If GoogleBtn.Value = True Then

myChart.SetSourceData Source:=Sheets("Sheet1").Range("A4:B8")
myChart.ChartType = xlLine
myChart.Parent.Name = "GoogleChart"

ElseIf GoogleBtn.Value = False Then

myChart.Parent.Delete

End If

End Sub

所以问题是:

  1. 为什么delete方法在这种情况下不起作用?我尝试删除.Parent,但它仍无效。

  2. 如何将图表对象放在工作表的特定部分,例如按钮右侧?我尝试使用incrementLeft等,但没有成功。

  3. 非常感谢您的帮助,如果有一些参考资料可供进一步阅读,我会更加高兴和感激!

1 个答案:

答案 0 :(得分:1)

删除确实有效,但它会删除刚刚创建的新图表,而不是之前的图表。你可以使用这样的东西:

Private Sub GoogleBtn_Click()

    Dim mySheet As Worksheet
    Dim shp As Shape
    Dim myChart As Chart

    Set mySheet = ActiveWorkbook.Worksheets("Sheet1")

    On Error Resume Next
    Set shp = mySheet.Shapes("GoogleChart")
    On Error GoTo 0

    If shp Is Nothing Then
        Set shp = mySheet.Shapes.AddChart(XlChartType:=xlColumnClustered, _
            Left:=GoogleBtn.Left + GoogleBtn.Width + 2, Top:=GoogleBtn.Top, Height:=100, Width:=150)
    End If

    Set myChart = shp.Chart

    If GoogleBtn.Value = True Then

        myChart.SetSourceData Source:=Sheets("Sheet1").Range("A4:B8")
        myChart.ChartType = xlLine
        shp.Name = "GoogleChart"

    Else

        shp.Delete

    End If

End Sub