使用 3 个 OptionButton - 操作和变量定义问题

Using 3 OptionButtons - trouble with actuation and variable definition with proceedures

提问人:Syndesis 提问时间:10/31/2023 更新时间:11/13/2023 访问量:41

问:

我的目标:使用单选按钮或选项按钮选择预定义的单元格,并用字母/数字指示符填充它们(在本例中为“N1”),使用 If-Then-Else,允许用户选择一组不同的单元格,但重复使用 N1 指示符。

问题 1:声明变量后,我总是在过程的第一行收到错误,指出变量未定义。

问题 2:使用 activeX 控件 optionButtons,因为它们允许与宏一起使用,因此在选择时不会激活它们。我可以使用表单按钮,但它们不适用于宏。

我已经多次重写了变量的声明(我现在是正确的),但是当过程的第一行运行时似乎仍然打嗝(已经写了几个变体以尝试纠正)。 关于问题的根源有什么想法吗?显示工作表、属性框和代码的屏幕截图

Excel VBA 变量 单选按钮 定义

评论

0赞 Tim Williams 10/31/2023
请不要使用代码图片 - 您可以将其作为文本直接复制/粘贴到您的帖子中。您正在常规模块中编写代码,因此它不知道(例如)或任何其他选项按钮是什么。您的代码属于工作表代码模块。opt_IECC
0赞 CLR 10/31/2023
你声明一个变量,是的。但是,您不会引用该变量,而是引用以相同名称开头的其他变量。
0赞 FunThomas 10/31/2023
(1) 不要将代码作为图像发布。(2) 是什么让您认为表单控件不适用于宏代码?(3) 您的控件是工作表的一部分。如果你想像你一样访问它们,你需要将代码放入工作表模块中,而不是放在常规模块中 - 在常规模块中,(以及所有其他模块)都是未知的。(4) 始终使用OPT_IECCOption Explicit
0赞 Tim Williams 10/31/2023
在工作表代码模块中,您可以将选项按钮称为 (eg) 。(在对象模块中是指对象本身,在本例中为工作表对象)Me.opt_IECCMe
0赞 Syndesis 10/31/2023
感谢@TimWilliams,我已将代码与 Sheet1 对象一起放置,并指示“OptionExplicit”,当我“运行”宏时没有收到错误消息,但似乎宏通过 Else 过程运行并且单元格保持空白。我似乎无法使用单选按钮本身来触发宏。

答:

0赞 user3598756 11/1/2023 #1

坚持使用ActiveX选项按钮,您可以在代码之后(放置在相关的工作表代码窗格中):

Option Explicit

Private Sub opt_ASHRAE_Click()
    N1Variable
End Sub

Private Sub opt_CECT24_Click()
    N1Variable
End Sub

Private Sub opt_IECC_Click()
    N1Variable
End Sub

Private Sub opt_NONE_Click()
    N1Variable
End Sub
 
Sub N1Variable()

    With Me
        If .opt_IECC Then
            .Range("D3, D6").Value = "N1"
            
        ElseIf .opt_ASHRAE Then
            .Range("D4, D7").Value = "N1"
            
        ElseIf .opt_CECT24 Then
            .Range("D5, D8").Value = "N1"
            
        Else
            .Range("D3:D9").ClearContents
        End If
    End With

End Sub

您可以注意到您需要第四个 OptionButton(我称之为“opt_NONE”)来触发范围内容删除

评论

0赞 Syndesis 11/4/2023
谢谢 user3598756,我尝试了您的示例,但按钮仍然无法操作,我错过了什么吗?我已经在工作表中将代码作为对象运行,它应该在模块中关闭吗?
0赞 Syndesis 11/12/2023 #2

感谢大家的帮助,我能够解决问题。正如建议的那样,我确实添加了第 4 个按钮来清除内容,但我发现了一种不同的策略来激活按钮并执行该功能:

Sub CheckRadioButton()


    If Worksheets(5).Shapes("Option Button 18").ControlFormat.Value = xlOn Then
        Range("E6,E9") = "N1"
        Range("F7,F10") = "N2"
        Range("G8,G11") = "N3"

    ElseIf Worksheets(5).Shapes("Option Button 19").ControlFormat.Value = xlOn Then
        Range("E7,E10") = "N1"
        Range("F8,F11") = "N2"
        Range("G9,G12") = "N3"

    ElseIf Worksheets(5).Shapes("Option Button 20").ControlFormat.Value = xlOn Then
        Range("E8,E11") = "N1"
        Range("F9,F12") = "N2"
        Range("G6,G9") = "N3"

    Else: Worksheets(5).Shapes("Option Button 21").ControlFormat.Value = xlOn
        Range("E6:G12").ClearContents
    End If
End Sub