无论如何,代码不起作用,感到很尴尬:
我的目标是通过切换按钮使用VBA创建特定图表。如果选择/按下切换按钮,则会创建图表并显示在活动工作表的特定部分上。 如果取消选择切换按钮,则会删除图表。
以下是我的工作表的样子:
以下是我从不同的博客中学习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
所以问题是:
为什么delete
方法在这种情况下不起作用?我尝试删除.Parent
,但它仍无效。
如何将图表对象放在工作表的特定部分,例如按钮右侧?我尝试使用incrementLeft
等,但没有成功。
非常感谢您的帮助,如果有一些参考资料可供进一步阅读,我会更加高兴和感激!
答案 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