1

我有一个包含值下拉列表的单元格 图表 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

我收到一个错误:

错误

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

4

2 回答 2

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
于 2018-04-24T15:24:42.380 回答
1

根据 Jon Peltier 的评论,我正在写这个作为答案。

正如 SJR 指出的那样,我很确定它一定是一些代码/注释,或者在您的子例程之外,您的代码看起来是正确的(只要您的代码中有图表命名)......

于 2018-04-30T08:07:25.960 回答