我在框架中添加了几个复选框,我需要在这些复选框中创建一个选择案例语句。有没有办法通过select case语句选择框架内的复选框?
我在下面尝试过(我的框架名为diet_frame)但是我遇到了类型不匹配错误。
Private Sub add_button_Click()
Dim target_range As Range: Set target_range = Range("A2:G29")
Dim period As String
target_range.End(xlDown).Offset(1, 0).Select
With Selection: i = 1
Selection.Value = name_input
Selection.Offset(0, i) = period_input.Value
Select Case diet_frame <<<--- name of my frame, trying to get to the checkboxes placed inside it.
Case meat_input.Value = True
Selection.Offset(0, i + 1) = carnivore
Case vegetation_input.Value = True
Selection.Offset(0, i + 1) = herbivore
Case vegetation_input = True And meat_input = True
Selection.Offset(0, i + 1) = omnivore
End Select
Selection.Offset(0, i + 6) = group_input.Value
End With
答案 0 :(得分:1)
帮助说
尝试使用True关键字作为select case语句的表达式 - 布尔值可自动转换为数字和字符串 - 以及每个Case子句的复选框值。这也需要你将你的复选框都为True的情况移动到Case层次结构中的第一个位置 - 原因是当表达式匹配多个Case子句时,只执行第一个匹配后的语句< / p>
答案 1 :(得分:1)
帧通常用于对选项(无线电)按钮进行分组,以使它们互斥。我不认为他们提供了您期望的功能。你需要明确一些事情:name_input,period_input,group_input来自哪里?如果这些是细胞,我希望看到一些&#34; RangeRefersTo&#34;。您是否有一组复选框或许多与Selection对象的这些行对齐的集合?以编程方式生成或手动生成(并保留工作簿的生命周期)?你可能意味着&#34; ForEach ...在选择&#34;而不是&#34; With&#34;? With不会为你迭代细胞。顺便说一下,你不会增加你的&#34; i&#34;列号,为什么不只是硬编码1,2和7?如果您有许多静态复选框,请使用tag属性存储与它们关联的行号。如果你没有绑定细胞,这是一种将它们绑定到特定细胞的方法。如果你有很多盒子和绑定单元格,那么你就可以不再使用3个名字,而不会有额外的麻烦。你想轮询一堆复选框?
(quite possibly pseudocode)
Dim ctrl as control
For Each ctrl in controls
If ctrl.typeof = "checkbox" then
'maybe further specificity based on If ctrl.name = "somename" ...
' more code...
cells(ctrl.tag,7).value2 = whatever
End if
就您的&#34;选择&#34;而言,如果您只是放Select Case True
(奇怪但有效),您的代码将按原样运行,但对于Omnivores,您需要设置值3倍。实际上,你甚至不需要VBA。你可以使用单元格公式完成所有这些。将1加入真正的粘合细胞用于肉类,2用于蔬菜。将它们的总和放在目标单元格中的IF或CHOOSE公式中(其中&#34; ... vore&#34;将出现)。所以1是Carnie,2是Veggie,3是Omni。在Gnu / Linux盒子上或者我更明确。