Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA显示选择选项_Vba_Permutation - Fatal编程技术网

VBA显示选择选项

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

我正在尝试编写一个代码,根据选中的复选框显示一个值。总共有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

每个值都与一个子集相关联,如果选中该子集,该子集将填充数组。填充完数组后,我需要对所选的数组执行一个附加函数。执行的功能相同,但如果未选择某个值,我不希望执行该功能,因为否则它将破坏我的功能。该函数本身用于从已选择到另一个数组的数组中选择重复项。

您可以对每个复选框使用:

  • 第一个值是1(
    =2
    0
  • 第二个值是2(
    =2
    1
  • 第三个值是4(
    =2
    2
  • 第四个值是8(
    =2
    2
  • 第五个值是16(
    =2
    4
因此,当您对每个排列求和时,您可以检查一个唯一的数字

  • 1只为
    0
    ,2只为
    1
    ,依此类推
  • 1+2是
    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个单独的复选框