【问题标题】:VBA Radio buttons: Select at least one optionVBA 单选按钮:选择至少一个选项
【发布时间】:2018-05-11 17:01:40
【问题描述】:

我有一个包含 6 个不同类别的用户表单,用户必须在 0-4 之间选择一个选项。每个选项都可以通过带有设置值的单选按钮进行选择,该设置值将写入父工作表中。属于一个类别的每组单选按钮都被分组 (a-e)。

有人可以帮我实现一种机制,通过显示提示用户选择一个选项的消息,强制用户在每个类别中选择一个选项吗?

工作流程是这样的:

用户选择选项 --> 选择的选项写在工作表中 --> Unload Me 在表单上

理想情况下,最好是“暂停”写入所有的宏(不继续到Unload Me)。而是显示消息,然后表单保持原样,以便用户可以返回并继续,而无需重做整个过程。

编辑:

感谢所有帮助。希望这会让事情变得更容易:

我正在使用的代码是由我放置在包含所有单选按钮的用户窗体上的“注册分数”按钮触发的。该按钮包含以下代码(其中 aa = 第一个单选按钮):

Private Sub CommandButton1_Click()
If aa.Value = False Then
MsgBox ("Please select at least one option")
Else
Range("A" & Rows.Count).End(xlUp).Offset(1).Value = "Category A"
Range("B" & Rows.Count).End(xlUp).Offset(1).Value = "0"
End If
Unload Me
End sub

我现在对每个单选按钮重复此代码。问题是,例如,如果用户在每个类别中正确选择了一个单选按钮但忘记了第一个,则表单将重置,这意味着用户必须重新执行整个操作。我当然也可以添加(为了简单起见,我在这里只包含了单选按钮,但正确的代码当然会包含 all 按钮):

Private Sub CommandButton1_Click()
If aa.Value = False and ab.Value = False And ac.Value = False Then
MsgBox ("Please select at least one option")

在这种情况下,用户必须为每个类别选择一个选项,但它也会重置整个表单,这意味着您必须重做所有事情。

【问题讨论】:

    标签: vba excel button userform


    【解决方案1】:

    怎么样:

    If Radio1.value = False And Radio2.value = False And Radio3.value = False And Radio4.value = False then
      Msgbox "Please select something from the first four Radio Buttons"
    Exit Sub
    End if
    

    【讨论】:

    • 谢谢。我用以下方法做了一个变体:If Radio1.value = False then MsgBox ("Please select one option") Else If Radio.Value = true then xxxxxxx Else 'do nothing End If End If
    • 如果您发现我的回答有用,请您将其标记为...谢谢。
    • 抱歉。忘记问后续了。使用这种方法可以部分解决问题,但如果If Radio.value = false 会卸载表单。有没有办法在不卸载表单的情况下重置宏?
    • 您可能必须更改“转到标签”的退出子程序,以便子例程从标签所在的位置继续...
    • 您可以将 Exit Sub 替换为“GoTo LabelName”,然后将“LabelName:”替换为您希望代码继续的地方......希望这是有道理的,很难给你更好的没有看到你的实际代码的建议......
    【解决方案2】:

    要确保选中一个,只需在 OK/Close 按钮​​的事件中添加一段代码,检查是否至少选择了一个按钮 - 如果未显示消息,然后退出 Sub 以中止例程,或将检查实现为一个返回布尔值且仅在返回 true 时才卸载的函数。

    顺便说一下,在您提议的工作流程中,如果您卸载表单,您将如何将用户的选择写入工作表?

    【讨论】:

    • 感谢您的回复。这就是我想要做的,但我实际上不知道如何做。我看到之前使用 {If IsNull} 的帖子,但我不知道如何将其应用于整个组。关于工作流程,我实际上写错了。感谢您指出了这一点。我会在 OP 中修复它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多