Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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/8/sorting/2.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
Excel “基于用户表单隐藏行”复选框_Excel_Sorting_Checkbox_Userform_Vba - Fatal编程技术网

Excel “基于用户表单隐藏行”复选框

Excel “基于用户表单隐藏行”复选框,excel,sorting,checkbox,userform,vba,Excel,Sorting,Checkbox,Userform,Vba,各位早上好, 我有一个宏,我想对数据进行排序。我的工作簿中的一个按钮调用一个带有10个复选框的小用户表单。用户应该选择他想要查看的类别,然后单击“排序”。我想要的结果只是他选择要显示的类别,但我从附加的宏中得到一个全有或全无的结果。下面是支持表单/按钮对类别进行排序的宏。我在谷歌和其他几个论坛上搜索过,找不到与我的问题相关的答案!如果您能提供任何帮助,我们将不胜感激 谢谢 Private Sub cmdSort_Click() LastRow = Range("A" & Rows.Co

各位早上好,

我有一个宏,我想对数据进行排序。我的工作簿中的一个按钮调用一个带有10个复选框的小用户表单。用户应该选择他想要查看的类别,然后单击“排序”。我想要的结果只是他选择要显示的类别,但我从附加的宏中得到一个全有或全无的结果。下面是支持表单/按钮对类别进行排序的宏。我在谷歌和其他几个论坛上搜索过,找不到与我的问题相关的答案!如果您能提供任何帮助,我们将不胜感激

谢谢

Private Sub cmdSort_Click()

LastRow = Range("A" & Rows.Count).End(xlUp).Row

If chkFE = True Then
    For Each cell In Range("BC4:BC" & LastRow)
        If UCase(cell.Value) <> "Fire Extinguishers" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkChem = True Then
    For Each cell In Range("BD4:BD" & LastRow)
        If UCase(cell.Value) <> "Chem" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkFL = True Then
    For Each cell In Range("BE4:BE" & LastRow)
        If UCase(cell.Value) <> "FL" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkElec = True Then
    For Each cell In Range("BF4:BF" & LastRow)
        If UCase(cell.Value) <> "Elec" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkFP = True Then
    For Each cell In Range("BG4:BG" & LastRow)
        If UCase(cell.Value) <> "FP" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkLift = True Then
    For Each cell In Range("BH4:BH" & LastRow)
        If UCase(cell.Value) <> "Lift" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkPPE = True Then
    For Each cell In Range("BI4:BI" & LastRow)
        If UCase(cell.Value) <> "PPE" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkPS = True Then
    For Each cell In Range("BJ4:BJ" & LastRow)
        If UCase(cell.Value) <> "PS" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkSTF = True Then
    For Each cell In Range("BK4:BK" & LastRow)
        If UCase(cell.Value) <> "STF" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If

If chkErgonomics = True Then
    For Each cell In Range("BL4:BL" & LastRow)
        If UCase(cell.Value) <> "Ergonomics" Then
        cell.EntireRow.Hidden = True
        End If
    Next

End If



Unload frmSort

End Sub
Private Sub cmdSort\u Click()
LastRow=范围(“A”和Rows.Count).End(xlUp).Row
如果chkFE=True,则
对于范围内的每个单元格(“BC4:BC”和LastRow)
如果UCase(单元格值)“灭火器”,则
cell.EntireRow.Hidden=True
如果结束
下一个
如果结束
如果chkChem=True,则
对于范围内的每个单元格(“BD4:BD”和LastRow)
如果UCase(单元格值)“Chem”,则
cell.EntireRow.Hidden=True
如果结束
下一个
如果结束
如果chkFL=True,则
对于范围内的每个单元格(“BE4:BE”&LastRow)
如果UCase(单元格值)“FL”,则
cell.EntireRow.Hidden=True
如果结束
下一个
如果结束
如果chkElec=True,则
对于范围内的每个单元格(“BF4:BF”和LastRow)
如果UCase(cell.Value)“Elec”,则
cell.EntireRow.Hidden=True
如果结束
下一个
如果结束
如果chkFP=True,则
对于范围内的每个单元格(“BG4:BG”和LastRow)
如果UCase(cell.Value)“FP”,则
cell.EntireRow.Hidden=True
如果结束
下一个
如果结束
如果chkLift=True,则
对于范围内的每个单元格(“BH4:BH”和LastRow)
如果UCase(单元格值)“提升”,则
cell.EntireRow.Hidden=True
如果结束
下一个
如果结束
如果chkPPE=True,则
对于范围内的每个单元格(“BI4:BI”和LastRow)
如果UCase(cell.Value)“PPE”,则
cell.EntireRow.Hidden=True
如果结束
下一个
如果结束
如果chkPS=True,则
对于范围内的每个单元格(“BJ4:BJ”和LastRow)
如果UCase(cell.Value)“PS”,则
cell.EntireRow.Hidden=True
如果结束
下一个
如果结束
如果chkSTF=True,则
对于范围内的每个单元格(“BK4:BK”和LastRow)
如果UCase(cell.Value)“STF”,则
cell.EntireRow.Hidden=True
如果结束
下一个
如果结束
如果chkErgonomics=True,则
对于范围内的每个单元格(“BL4:BL”和LastRow)
如果UCase(单元格值)“人体工程学”,则
cell.EntireRow.Hidden=True
如果结束
下一个
如果结束
卸载frmSort
端接头

您实际上是在筛选,而不是排序。这就提出了一个问题,为什么不让用户直接使用Excel的
过滤器
按钮和对话框呢

要回答您的问题,只有选中一个
复选框
,您的代码才会工作。对于选中的每个复选框,代码都会隐藏所有其他类别的行。因此,只有最后一个复选框的类别才会显示行


你可以试着改变你的逻辑。从隐藏所有行开始,为单击类别的任何行设置
hidden=False

我想分享@AlphaFrog为我提供的解决方案,它可以完美地工作:

Private Sub cmdSort_Click() 

Dim i As Long, rng As Range, arrCriteria As Variant 

Set rng = Rows(3) 'Headers
arrCriteria = Array("Fire Extinguishers", "Chem", "FL", "Elec", "FP", _ 
"Lift", "PPE", "PS", "STF", "Ergonomics") 

Application.ScreenUpdating = False 
Rows.Hidden = False 
With Range("BC3:BL" & Range("A" & Rows.Count).End(xlUp).Row) 
    For i = 1 To 10 
        If Me.Controls("CheckBox" & i) Then 
            .AutoFilter i, arrCriteria(i - 1) 
            Set rng = Union(rng, .SpecialCells(xlCellTypeVisible).EntireRow) 
            .AutoFilter 
        End If 
    Next i 
    .Parent.AutoFilterMode = False 
    .EntireRow.Hidden = True 
    rng.EntireRow.Hidden = False 
End With 
Application.ScreenUpdating = True 

Unload frmSort 

End Sub
链接到原始答案:

我尝试了相反的方法,但仍然存在同样的问题。我从来没有得出一个合乎逻辑的解释,因为这对我来说似乎是有意义的。然而,我在下面贴出了对我有用的答案。谢谢你的意见!这是一个很好的答案。过滤是一种方式。请注意,交叉发布到其他网站并不被认为是一种很好的做法:。事实上,另一个论坛的每个问题都有一个链接,上面写着“我同意这些规则。”#3是你不会在没有明确说明的情况下交叉发帖。这对我来说没什么大不了的,但是如果知道的话我会很高兴的。对不起,我只是想在应该得到的地方给予表扬。下次我一定会弄清楚的。谢谢