Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用VBA通过切换按钮创建/删除图表_Excel_Excel 2007_Vba - Fatal编程技术网

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

Excel 使用VBA通过切换按钮创建/删除图表,excel,excel-2007,vba,Excel,Excel 2007,Vba,不管怎么说,代码不起作用让我很尴尬: 我的目标是通过切换按钮使用VBA创建特定图表。如果选择/按下切换按钮,图表将创建并显示在激活图纸的特定部分上。 如果取消选择切换按钮,图表将被删除 以下是我的工作表的外观: 以下是我从不同的博客学习VBA后编写的代码,因为我目前没有VBA书籍。该代码段用于名为GoogleBtn的Google按钮,并在单击该按钮时被调用 Private Sub GoogleBtn_Click() Dim mySheet As Workbook Dim myChart As

不管怎么说,代码不起作用让我很尴尬:

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

以下是我的工作表的外观:

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

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
    等,但没有成功


  • 非常感谢您的帮助,如果能提供一些参考资料供进一步阅读,我将非常高兴和感谢

    删除确实有效,但它会删除您刚刚创建的新图表,而不是以前的任何图表。您可以使用以下内容:

    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
    

    非常感谢你的帮助。如果我可以问:您使用shapes对象来帮助删除图表,对吗?为什么我的方法只是删除新图表,而不是之前创建的图表?如果您也能回答这些问题(如果您想分享任何URL供参考),我将非常感激。正确。你的工作流程是:1。单击按钮,添加图表并设置其数据。2.再次单击按钮,这将添加另一个图表(因此现在有2个),然后由于未按下togglebutton,它将删除新图表。然而,工作表上仍然有一张图表。3.再次单击按钮,添加另一个图表并设置其数据(现在我们又有两个)。4.重复步骤2,但现在末尾仍然有两个图表,依此类推。