VBA显示选择选项
我正在尝试编写一个代码,根据选中的复选框显示一个值。总共有5个复选框,我将在将来添加其他复选框,因此我想知道是否有一种简单的方法来确定选中哪些复选框以确定要显示哪些值。我可以用一种非常迂回的方式来做这件事,但如果可能的话,我希望最小化我的代码 换句话说,如果我写出每个场景,我必须为所有不同的选择可能性编写单独的代码: 1只、2只、3只、4只、5只 1+2,1+3,1+4,1+5,2+3,2+4,2+5,3+4,3+5,4+5 1+2+3,1+2+4,1+2+5,1+3+4,1+3+5,1+4+5,2+3+4,2+3+5,3+4+5 1+2+3+4、1+2+3+5、1+3+4+5、2+3+4+5 1+2+3+4+5 每个值都与一个子集相关联,如果选中该子集,该子集将填充数组。填充完数组后,我需要对所选的数组执行一个附加函数。执行的功能相同,但如果未选择某个值,我不希望执行该功能,因为否则它将破坏我的功能。该函数本身用于从已选择到另一个数组的数组中选择重复项。您可以对每个复选框使用:VBA显示选择选项,vba,permutation,Vba,Permutation,我正在尝试编写一个代码,根据选中的复选框显示一个值。总共有5个复选框,我将在将来添加其他复选框,因此我想知道是否有一种简单的方法来确定选中哪些复选框以确定要显示哪些值。我可以用一种非常迂回的方式来做这件事,但如果可能的话,我希望最小化我的代码 换句话说,如果我写出每个场景,我必须为所有不同的选择可能性编写单独的代码: 1只、2只、3只、4只、5只 1+2,1+3,1+4,1+5,2+3,2+4,2+5,3+4,3+5,4+5 1+2+3,1+2+4,1+2+5,1+3+4,1+3+5,1+4+5
- 第一个值是1(
=2
)0
- 第二个值是2(
=2
)1
- 第三个值是4(
=2
)2
- 第四个值是8(
=2
)2
- 第五个值是16(
=2
)4
0
,2只为1
,依此类推3
,1+3是5
,1+4是9
,1+5是17
至少,我希望这会给你一些想法或提示
在这方面,@JMax所指的内容通常被称为。下面是一个快速教程: 创建一个名为Form1的示例表单,其中包含5个名为Check1、Check2、Check3、Check4和Check5的复选框。然后在标准代码模块中添加以下两个函数:
Function GetSelectedBoxes() As Long
Dim Ctl As Control, Total As Long
For Each Ctl In Forms!form1
If Ctl.ControlType = acCheckBox Then
If Ctl Then
Total = Total + 2 ^ CLng(Mid(Ctl.Name, 6))
End If
End If
Next Ctl
GetSelectedBoxes = Total
End Function
Sub ShowSelectedBoxes()
Dim Total As Long, i As Integer
Total = GetSelectedBoxes
For i = 1 To 5
If Total And 2 ^ i Then Debug.Print "Check" & i & " selected"
Next i
End Sub
现在打开Form1并选中框1、3和4。运行ShowSelectedBox例程,您应该会在即时窗口中获得以下输出:
Check1 selected
Check3 selected
Check4 selected
在我的示例中,我使用了For…Loop
来实现紧凑性,但您也可以很容易地将其分解为单独的If…Then
语句,以便使用复选框执行更有意义的操作
此方法最多支持31或32个单独的复选框