1

我有一个宏,它基本上可以按我的意愿工作(在选择两个冲突的复选框时提醒用户) - 下面的代码。G2 中的 1 是为指示这种情况而生成的值。

错误消息在 SelectionChange 上触发,但这似乎仅在鼠标选择另一个单元格时出现。工作表包含一系列供用户选择的复选框,其目的是让用户只使用复选框,而无需直接选择或输入单元格。在这种情况下,即使发生了所描述的场景,错误消息也永远不会触发。

有没有办法通过更新工作表上的任何复选框来触发 msgbox 宏?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Range("G2") = 1 Then

    MsgBox "ERROR - Select AND Reject checked"

    End If

End Sub

另外,我想扩展范围以应用于 G 列中的所有单元格,但我似乎无法让它为我工作。我看过一些引用“G:G”的例子,但到目前为止我只让这个对一个细胞起作用。

对于任何明显的错误,我提前道歉,我已经使用 Excel 一段时间了 - 但我对使用 VBA 是全新的。

4

1 回答 1

1

互斥选项通常用选项按钮(也称为单选按钮)而不是复选框来表示。您是否有任何理由不为此任务使用选项按钮?

至于为所有复选框调用相同的代码,复选框必须是表单控件(而不是 ActiveX 控件),您可以将它们分配给此宏:

Sub CheckBox_Clicked()

    Dim chk As CheckBox

    Set chk = ActiveSheet.CheckBoxes(Application.Caller)
    MsgBox chk.Name

End Sub

最后,对于要监视整个列的 SelectionChange 事件,它看起来类似于:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim ClickedCell As Range
    Dim rngClicked As Range

    Application.EnableEvents = False

    Set rngClicked = Intersect(Columns("G"), Target)
    If Not rngClicked Is Nothing Then
        For Each ClickedCell In rngClicked.Cells
            If ClickedCell.Value = 1 Then MsgBox "ERROR - Select AND Reject checked"
        Next ClickedCell
    End If

    Application.EnableEvents = True

End Sub
于 2013-08-08T21:33:40.030 回答