我不知道我哪里出错了。脚本可以工作,但它不会自动运行,除非我进入VBA应用程序并单击脚本运行的播放按钮。有人可以帮忙吗?
Private Sub HideChart1()
If ActiveWorkbook.Sheets("User Interface").Range("F8") = "Yes" Then
ActiveWorkbook.Sheets("Sheet1").ChartObjects("Chart 6").Visible = True
Else
ActiveWorkbook.Sheets("Sheet1").ChartObjects("Chart 6").Visible = False
End If
End Sub
答案 0 :(得分:5)
处理SheetChange
,并在那里调用您的程序。
Private Sub Worksheet_Change(ByVal Target As Range)
HideChart1
End Sub
完成。不要在事件处理程序中实现逻辑,它是第一个地狱门和spaghettification。有一个单独的,专门的程序完美 - 您需要的只是自动调用它。
如果HideChart1
在其自己的标准模块中实现,则需要使其Public
能够从工作表的代码隐藏中调用它;在该模块的顶部添加Option Private Module
,以避免将成员公开为宏和/或工作表函数。
答案 1 :(得分:1)
如果我的评论是正确的,那么您需要这样的内容:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("F8")) Is Nothing Then
If Target.Worksheet.Range("F8").Value = "Yes" Then
ActiveWorkbook.Sheets("Sheet1").ChartObjects("Chart 6").Visible = True
Else
ActiveWorkbook.Sheets("Sheet1").ChartObjects("Chart 6").Visible = False
End If
End If
End Sub
您可以在此处找到有关工作表更改事件的更多信息 automatically execute an Excel macro on a cell change
该问题的关键点是将代码放在工作表模块中,而不是常规模块或工作簿模块中。
答案 2 :(得分:1)
您想使用Worksheet Change
事件。
未经测试,但应该有效。将它放在“用户界面”工作表模块中。:
Private Sub Worksheet_Change(ByVal target As Range)
If target = Range("F8") And target.Value = "Yes" Then
ActiveWorkbook.Sheets("Sheet1").ChartObjects("Chart 6").Visible = True
Else
ActiveWorkbook.Sheets("Sheet1").ChartObjects("Chart 6").Visible = False
End If
End Sub
对于Worksheet Change
,我不认为(关键字“思考”)您需要指定Range("F8")
预期要使用的工作表,因为根据定义,它是活动表。如果您愿意,请在此之前添加工作表名称以确保。