使用此代码我已设置我使用的过滤器与userforms相关联,并带有复选框以选择要过滤的内容。目前,如果我过滤一个变量,如Utilities it Filters,但如果我移动到另一个过滤器说Clients然后我过滤而不是给我与之前过滤的特定实用程序相关联的客户端它清除所有内容并仅过滤客户端。
我在想解决方案可能需要处理方法: .SpecialCells(xlCellTypeVisible)
Private Sub Cancel_UF_Click()
UtilityFilter.Hide
Range("A1").Select
End Sub
Private Sub Confirm_UF_Click()
ActiveSheet.Unprotect ("UMC626")
ClearFilter
UpdateFilters
UtilityFilter.Hide
Application.ScreenUpdating = False
Range("A1").Select
ActiveSheet.Protect Password:="UMC626", _
DrawingObjects:=False, _
Contents:=True, _
Scenarios:=True
End Sub
Sub SelectAll_UF_Click()
If SelectAll = True Then
Electricty_UF.Value = True
Gas_UF.Value = True
NonUtility_UF.Value = True
SolarElectricity_UF.Value = True
SolarThermal_UF.Value = True
SolidWaste_UF.Value = True
Water_UF.Value = True
Else
Electricity_UF.Value = False
Gas_UF.Value = False
NonUtility_UF.Value = False
SolarElectricity_UF.Value = False
SolarThermal_UF.Value = False
SolidWaste_UF.Value = False
Water_UF.Value = False
End If
End Sub
Sub UpdateFilters()
Integer_UF = -1
If Electricity_UF.Value = True Then
Add_UF String_UF, "E"
Range("E6:E67").AutoFilter Field:=1, _
Criteria1:=String_UF, _
Operator:=xlFilterValues
End If
If Gas_UF.Value = True Then
Add_UF String_UF, "G"
Range("E6:E67").AutoFilter Field:=1, _
Criteria1:=String_UF, _
Operator:=xlFilterValues
End If
If NonUtility_UF.Value = True Then
Add_UF String_UF, "NU"
Range("E6:E67").AutoFilter Field:=1, _
Criteria1:=String_UF, _
Operator:=xlFilterValues
End If
If SolarElectricity_UF.Value = True Then
Add_UF String_UF, "SE"
Range("E6:E67").AutoFilter Field:=1, _
Criteria1:=String_UF, _
Operator:=xlFilterValues
End If
If SolarElectricity_UF.Value = True Then
Add_UF String_UF, "SE"
Range("E6:E67").AutoFilter Field:=1, _
Criteria1:=String_UF, _
Operator:=xlFilterValues
End If
If SolarThermal_UF.Value = True Then
Add_UF String_UF, "ST"
Range("E6:E67").AutoFilter Field:=1, _
Criteria1:=String_UF, _
Operator:=xlFilterValues
End If
If SolidWaste_UF.Value = True Then
Add_UF String_UF, "SW"
Range("E6:E67").AutoFilter Field:=1, _
Criteria1:=String_UF, _
Operator:=xlFilterValues
End If
If Water_UF.Value = True Then
Add_UF String_UF, "W"
Range("E6:E67").AutoFilter Field:=1, _
Criteria1:=String_UF, _
Operator:=xlFilterValues
End If
End Sub
Sub Add_UF(String_UF() As String, NewValue As String)
Integer_UF = Integer_UF + 1
ReDim Preserve String_UF(Integer_UF)
String_UF(Integer_UF) = NewValue
End Sub
我认为重点应放在Add_UF上 我在叫NewValue。是否有排序后对列进行排序?正如你在下面的图片中看到的那样,我希望能够对一个列进行排序。在能源上说然后在工作类型上排序。
答案 0 :(得分:2)
我不打算重新编写代码,但我可以提供实现您想要的信息和方法。
目前,您专注于一个专栏:
Range("E6:E67").AutoFilter Field:=1, _
您应该将其扩展到整个表区域:
ActiveSheet.Range("$A$5:$M$112").AutoFilter Field:=6, Criteria1:="Leeds"
数字6是过滤范围内的第六列。您也可以创建一个Range引用来引用filter-range:
Dim rngFilter As Range
Set rngFilter = Worksheets("Staff List").AutoFilter.Range
过滤器会累积,因此以下内容将过滤两列:
ActiveSheet.Range("$A$5:$M$112").AutoFilter Field:=6, Criteria1:="Leeds"
ActiveSheet.Range("$A$5:$M$112").AutoFilter Field:=7, Criteria1:="Sales"
在某些时候,您将清除过滤器:
ActiveSheet.ShowAllData
清除单个过滤器只是应用没有标准的过滤器:
ActiveSheet.Range("$A$5:$M$112").AutoFilter Field:=7
如果您在多个列上录制宏排序(使用自定义排序),则会创建如下代码,我已添加了一些注释:
'clear the previous Sort
ActiveWorkbook.Worksheets("Staff List").AutoFilter.Sort.SortFields.Clear
'accumulate the SortFields
ActiveWorkbook.Worksheets("Staff List").AutoFilter.Sort.SortFields.Add Key:= _
Range("C6:C112"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
ActiveWorkbook.Worksheets("Staff List").AutoFilter.Sort.SortFields.Add Key:= _
Range("B6:B112"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
'Apply the Sort
With ActiveWorkbook.Worksheets("Staff List").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
End With
录制宏还会显示可能对您有用的其他方法和属性。录制的代码不会很优雅,并且可以显着减少(整理),但它确实提供了有用的信息。