根据单选按钮选择组合(VBA Excel)用可变文本填充文本框

Posted

技术标签:

【中文标题】根据单选按钮选择组合(VBA Excel)用可变文本填充文本框【英文标题】:Fill a textbox with varaible text depending on Radio Button selection combo (VBA Excel) 【发布时间】:2018-08-27 04:32:06 【问题描述】:

我需要一些帮助来获取正确的代码来执行以下操作:

我在用户窗体的框架内有 4 组单选按钮 每个组都是一个简单的“是/否”单选按钮 我有一个文本框,我想根据选择的“是”单选按钮的数量自动填充 A-D 的分数范围。

“否”复选框确实不应该对文本框做任何事情

用户表单名称 = TP_UF 框架名称 = fun_opt_frame “是”的选项按钮名称 = fun_score_yes1-4 文本框名称 = fun_scorebox

逻辑:

4 是的 = A 3 是的 = B 2 是的 = C 1 是 = D

选择yesses的顺序无关紧要,它是一个总数。我尝试使用框架使用代码,但不确定这是否是最好的方法。出于任何原因,这些单选按钮的框架是不需要的,也许是为了更容易编码。所以如果不需要让它工作,我可以扔掉框架。

我不知道从哪里开始。任何帮助,将不胜感激。

pic

【问题讨论】:

【参考方案1】:

您理解的最快和最简单的方法是——我猜——下面的代码。您必须将代码放入用户窗体的类模块中。

Option Explicit

Dim opt1 As Byte
Dim opt2 As Byte
Dim opt3 As Byte
Dim opt4 As Byte

Private Sub opt1Yes_Click()
    opt1 = 1
    EvalOpt
End Sub
Private Sub opt1No_Click()
    opt1 = 0
    EvalOpt
End Sub
Private Sub opt2yes_Click()
    opt2 = 1
    EvalOpt
End Sub
Private Sub opt2No_Click()
    opt2 = 0
    EvalOpt
End Sub
Private Sub opt3yes_Click()
    opt3 = 1
    EvalOpt
End Sub
Private Sub opt3No_Click()
    opt3 = 0
    EvalOpt
End Sub
Private Sub opt4yes_Click()
    opt4 = 1
    EvalOpt
End Sub
Private Sub opt4No_Click()
    opt4 = 0
    EvalOpt
End Sub

Private Sub EvalOpt()
Dim sumOpt As Byte
Dim res As String
    sumOpt = opt1 + opt2 + opt3 + opt4
    Select Case sumOpt
    Case 1: res = "D"
    Case 2: res = "C"
    Case 3: res = "B"
    Case 4: res = "A"
    Case Else: res = ""
    End Select
    Me.fun_scorebox.text = res
End Sub

我假设选项按钮命名为 opt1Yes、opt1No、opt2Yes、opt2No 等。 更高级的解决方案可能是使用类模块并以这种方式“收集”选项按钮。

【讨论】:

嗨@Storax,感谢您的帮助,让我试试这个并回复您 嗨@Storax,所以我尝试了这些,但目前无法正常工作。虽然这似乎很容易做到,但我不确定这段代码到底发生了什么。我唯一改变的是单选框的名称。如上所述,单选按钮被称为 fun_score_yes1 到 4 和 fun_score_no1 到 4(我之前没有提到“否”的。我按照说明创建了一个类模块并插入了所有代码,更改了名称,但没有任何反应。我将在另一个推荐中发布代码,因为我没有字符。 你是如何在没有达到字符限制的情况下发布所有这些代码的? 正如我在帖子中所说,您必须将代码放入用户表单的类模块中。无需创建新的类模块。它带有用户表单。您可能还需要重命名选项按钮的单击事件。在您的情况下,重命名点击事件将意味着 opt1Yes_Click 变为 fun_score_yes1_Click 等等。有关用户表单的快速介绍,请查看here【参考方案2】:

我最终以不同的方式解决了这个问题,并使用计数器让它工作。谢谢您的帮助!在这里发布代码以防其他人需要它。

    Option Explicit

    Private Sub OptionButton1_Change()
    set_counter
    End Sub

    Private Sub OptionButton2_Change()
    set_counter
    End Sub

    Private Sub OptionButton3_Change()
    set_counter
    End Sub

    Private Sub OptionButton4_Change()
    set_counter
    End Sub

    Private Sub OptionButton5_Change()
    set_counter
    End Sub

   Private Sub OptionButton6_Change()
   set_counter
   End Sub

   Private Sub OptionButton7_Change()
   set_counter
   End Sub

   Private Sub OptionButton8_Change()
   set_counter
   End Sub

   Private Sub set_counter()
    Dim x As Integer, counter As Integer
     Me.TextBox1.Value = ""
     counter = 0
     For x = 1 To 8 Step 2
       If Me.Controls("OptionButton" & x).Value = True Then counter = counter + 1
     Next x
        Me.TextBox1.Value = Choose(counter, "D", "C", "B", "A")
   End Sub

  Private Sub UserForm_Activate()
    Me.TextBox1.Value = ""
  End Sub

  Private Sub UserForm_Click()
    Dim x As Integer
      Me.TextBox1.Value = ""
      For x = 1 To 8
         Me.Controls("OptionButton" & x).Value = False
      Next x
  End Sub

【讨论】:

以上是关于根据单选按钮选择组合(VBA Excel)用可变文本填充文本框的主要内容,如果未能解决你的问题,请参考以下文章

从组合框中选择下一个项目,然后单击 Excel VBA 按钮

如何使用 VBA 根据值和组合框选择填充 excel 中的行?

Excel VBA:根据Combobox选择隐藏页面

Excel VBA - 用户定义函数 - 可变大小参数

excel VBA 组合框 取值

从组合框和命令按钮 VBA 添加到工作表