除非我点击播放按钮,否则VBA excel不会运行

时间:2016-06-14 16:24:05

标签: excel vba

我不知道我哪里出错了。脚本可以工作,但它不会自动运行,除非我进入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

3 个答案:

答案 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")预期要使用的工作表,因为根据定义,它是活动表。如果您愿意,请在此之前添加工作表名称以确保。