excel中带if case for checkbox的VBA

excel中带if case for checkbox的VBA,vba,excel,Vba,Excel,我有一个userform,其中有8个复选框 每个复选框都分配给一个名为autofilter的调用函数 我想有一个vba,在这样的方式,多个复选框被使用,然后它应该显示选中复选框的结果 如何在VBA中实现。我对该如何处理这个问题感到惊讶 期待论坛的帮助 这是我的自动过滤程序 Sub autofilter() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Result") wslr = ws.Cells(Rows.Count, 1).End(xl

我有一个userform,其中有8个复选框

每个复选框都分配给一个名为autofilter的调用函数

我想有一个vba,在这样的方式,多个复选框被使用,然后它应该显示选中复选框的结果

如何在VBA中实现。我对该如何处理这个问题感到惊讶

期待论坛的帮助

这是我的自动过滤程序

Sub autofilter()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Result")
wslr = ws.Cells(Rows.Count, 1).End(xlUp).Row
Set myfilt = ws.Range("A1:AFU" & wslr)
myfilt.autofilter Field:=12, Criteria1:= _
"USA"
End Sub
类似地,在autofilter7之前,我也在其他位置使用它们

现在,我让代码以这样的方式工作:如果复选框1为真,它将调用autofilter1

我希望有一个VBA,这样,当我选择一个或多个复选框时,它应该一起调用它们的自动筛选功能。我怎样才能做到这一点

[![我有这样设计的带有复选框的用户表单。在命令按钮中,我有以下代码

If CheckBox1.Value = True Then
Call autofilter
End If
类似地,我对其他复选框也有相同的设置。
]]

如果没有所有确切的细节,很难回答,但我认为您正在寻找以下内容: 在命令按钮_单击子代码中,您应具有以下内容:

已编辑:注意顶部的
Dim i作为字符串

  Dim formControl As Control
  Dim i As String
  'loop through every control in the userform
  For Each formControl In Me.Controls
        'Test if the control is a checkbox
        If LCase(TypeName(formControl)) = "checkbox" Then
              If formControl.Value = True Then
                    'The below is very crude and you should find a better way of getting parameter from checkbox
                    'The below also assumes you use ONE filterFunction that takes a parameter
                    'You need to get the number from the checkbox, so take the number from the name of the checkbox
                    i = Right(formControl.Name, 1) - 1
                    'myFilterFunction i (Use this only if you have parameterised your function)
                    'change i to empty string if it was 0.
                    i = IIf(i = 0, "", i)
                    'This calls a function represented by the string
                     Application.Run "myFilterFunction" & i
              End If
        End If
  Next formControl

目前,在您描述它的时候,代码应该可以工作。将函数名替换为自动筛选函数名…

我们需要您现有的代码来提供建议。我有自动筛选函数的代码。但我不知道在这种情况下我该怎么做?我可以发布一个算法吗?抱歉@DavidG,这就是为什么我没有任何代码就发布了它,我很惊讶要做什么,我有一个基本的知识,如果我能找到一些想法的话,我会在网上进行研究,但我找不到任何与这种情况有关的东西,或者可以帮助我发布你到目前为止所得到的东西。可能会发布一个包含8个复选框和值的列表(以文本或图像形式),告诉您尝试了什么,哪些不适合您。好的,我会发布@Juliance代码运行良好,但问题是,我有8个复选框,它们链接到8个自动筛选函数。当我单击第一个复选框并给出“确定”时,它显示的是第二个自动筛选的函数,而不是第一个。有8个复选框和8个自动筛选函数,如果我单击复选框1、2、3,那么我应该看到自动筛选、自动筛选1和自动筛选2的结果。然后你应该从变量i-
i=Right(formControl.Name,1)中减去1-1
。同时测试i=0,如果是,不要在“myFilterFunction”中附加任何内容,因为它仍然不能以我想要的方式工作。我可以发布另一个问题,描述清楚吗?为什么不编辑这篇文章,并解释问题所在。如果需要,还可以发布更多代码