excel 意外选中复选框的验证对话框

0dxa2lsx  于 2023-03-04  发布在  其他
关注(0)|答案(2)|浏览(76)

我正在尝试编写VBA,它将使我所有的复选框都询问用户是否真的要更改复选框的状态。
我写了这样一段话:

Sub ConfirmCheckbox()
    If MsgBox("Are you sure you want to check this box?", vbYesNo, "Confirm Checkbox") = vbYes Then
        ActiveSheet.CheckBoxes(Application.Caller).Value = True
    Else
        ActiveSheet.CheckBoxes(Application.Caller).Value = False
    End If
End Sub

但是如果某人由于先前的误点击而想要取消选中该框,则他将面临点击“是”(“是的,我想要取消选中”)将不会改变任何事情的问题,其中应当取消选中该框。
此外,我想将此更改应用到我的所有复选框一次。
我希望这不会让你很困惑。
感谢您的帮助!

fquxozlt

fquxozlt1#

这对我很有效:

Sub ConfirmCheckbox()
    With ActiveSheet.CheckBoxes(Application.Caller)
        If MsgBox("Are you sure you want to change this box?", vbYesNo, _
                                            "Confirm Checkbox") <> vbYes Then
            .Value = IIf(.Value = xlOff, xlOn, xlOff) 'revert the change
        End If
    End With
End Sub
a64a0gku

a64a0gku2#

ActiveSheet.CheckBoxes(Application.Caller).Value的值保存在某处,然后使用Notboolean切换为true/false
由于某种原因,我不能直接使用val = ActiveSheet.CheckBoxes(Application.Caller).Value,所以我添加了一个额外的If Then Else来设置值

Sub ConfirmCheckbox()
    Dim val As Variant
    
    If ActiveSheet.CheckBoxes(Application.Caller).Value = -4146 Then
        val = True
    Else
        val = False
    End If
    
    If MsgBox("Are you sure you want to check this box?", vbYesNo, "Confirm Checkbox") = vbYes Then
        ActiveSheet.CheckBoxes(Application.Caller).Value = Not val
    Else
        ActiveSheet.CheckBoxes(Application.Caller).Value = val
    End If
End Sub

相关问题