我有一个包含值下拉列表的单元格图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语句?
答案 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) ......