根据单选按钮选择组合(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 按钮