从单元格值隐藏图表

时间:2018-04-24 15:18:16

标签: excel-vba vba excel

我有一个包含值下拉列表的单元格图1-4 我试图运行一个相当简单的VBA脚本,只显示所选的图表,但它不起作用,我不知道为什么。

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
    If Range("A1").Value = "Chart 1" Then
        ActiveSheet.ChartObjects("Chart 1").Visible = True
        ActiveSheet.ChartObjects("Chart 2").Visible = False
        ActiveSheet.ChartObjects("Chart 3").Visible = False
        ActiveSheet.ChartObjects("Chart 4").Visible = False
    Else
        ActiveSheet.ChartObjects("Chart 1").Visible = False
        ActiveSheet.ChartObjects("Chart 2").Visible = False
        ActiveSheet.ChartObjects("Chart 3").Visible = False
        ActiveSheet.ChartObjects("Chart 4").Visible = False
    End If
End If
End Sub

我收到错误:

https://i.stack.imgur.com/ySWvE.png

开头语句是有意义的,因此如果单元格A1中的值发生更改,则只会运行代码。另外,也许我应该使用with语句?

2 个答案:

答案 0 :(得分:1)

尝试在运行图表逻辑的模块中创建过程。例如:

在工作表模块中:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        SetChartVisibility ActiveSheet
    End If
End Sub

然后在一个单独的模块中:

Public Sub SetChartVisibility(ByRef ws As Worksheet)
    With ws
        If .Range("A1").Value = "Chart 1" Then
            .ChartObjects("Chart 1").Visible = True
            .ChartObjects("Chart 2").Visible = False
            .ChartObjects("Chart 3").Visible = False
            .ChartObjects("Chart 4").Visible = False
        Else
            .ChartObjects("Chart 1").Visible = False
            .ChartObjects("Chart 2").Visible = False
            .ChartObjects("Chart 3").Visible = False
            .ChartObjects("Chart 4").Visible = False
        End If
    End With
End Sub

答案 1 :(得分:1)

我根据Jon Peltier的评论写下这个答案。

正如SJR指出的那样,我非常确定它必须是一些代码/注释或者在你的子程序之外,你的代码看起来是正确的(只要你的代码命名为Charts) ......