我的情况是,我有一个销售人员列表被过滤并将所有过滤后的数据移动到它自己的电子表格中。我遇到的问题是宏也过滤了小计行,所以它创建了一个没有数据的工作表,它也创建了一个工作表很大的情况我无法保存文件。
我写了一些代码,我认为这会阻止任何以“Sheet”开头的工作表不被过滤,但我不知道如何在字符串中使用通配符。需要一个通配符,因为“Sheet#”根据月份不同而不同。
Dim Sht As Worksheet
Dim Rng As Range
Dim List As Collection
Dim varValue As Variant
Dim E As Long
' // Set your Sheet name
Set Sht = Application.ActiveSheet
' // set your auto-filter, A6
With Sht.Range("A2")
.AutoFilter
End With
' // Set your agent Column range # (2) that you want to filter it
Set Rng = Range(Sht.AutoFilter.Range.Columns(22).Address)
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort.SortFields.Add
Key:=Range _
("V:V"), SortOn:=xlSortOnValues, Order:=xlAscending,
DataOption:= _
xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' // Create a new Collection Object
Set List = New Collection
' // Fill Collection with Unique Values
On Error Resume Next
For E = 2 To Rng.Rows.Count
List.Add Rng.Cells(E, 1), CStr(Rng.Cells(E, 1))
Next E
' // Start looping in through the collection Values
For Each varValue In List
' // Filter the Autofilter to macth the current Value
'Rng.AutoFilter Field:=22, Criteria1:=varValue, _
' Operator:=xlAnd, Criteria2:="<>"
Rng.AutoFilter Field:=22, Criteria1:="<>Sheet*", _
Operator:=xlAnd, Criteria2:=varValue
' // Copy the AutoFiltered Range to new Workbook
'If List = (Blanks) Then
Sht.AutoFilter.Range.Copy
Criteria1:=“&lt;&gt; Sheet *”代码是我尝试做的,上面的代码就是之前的代码。所以我的问题是如何防止创建小计行表?
答案 0 :(得分:0)
不要将工作表名称添加到自动筛选条件。只需在自动过滤之前检查工作表名称。
If Not ActiveSheet.Name Like "Sheet*" Then
'Do whatever you need to do
End If
另一方面,如果您想要包含以工作表开头的工作表名称,则可以删除Not
关键字:
If ActiveSheet.Name Like "Sheet*" Then
答案 1 :(得分:0)
因此,在使用代码一段时间后,我意识到使用通配符“Sheet *”将无法工作,因为所有过滤结果首先以“Sheet”开头。但是添加
console.log([] == []) // false, different object reference
console.log(['test'] == ['test']) // false
console.log('test' == 'test') // true, both are primitive
console.log(['test'].toString()) // 'test'
console.log(['test'] == 'test') // true, ['test'] converted to 'test' due to ==
console.log(['test'] === 'test') // false, strict comparison without type conversion
// More amazing JS tricks!
console.log([] == 0) // true
console.log([] == '') // true
console.log('' == 0) // true
console.log('' == false) // true
console.log(false == 0) // true
console.log([] == false) // true
// OOOPS...
console.log({} != true) // true
console.log({} != false) // true
// as you see here, NEVER USE == ! use === instead
(表示如果过滤后的结果不是空白而不是继续代码)If varValue <> "" Then
之后
它解决了这个问题。现在,代码成功跳过了小计行。
答案 2 :(得分:0)
在工作表名称字符串中附加时间戳。基本思想是使用“时间”功能,即时间(现在),其中时间可以提取为yy,mm,dd,hh,ss
。单独定义变量字符串以存储每个所需的时间组件。然后,创建一个类似sheetname= myname string+my dd+ my hh....
的名称我认为如果您尝试将时间结果直接添加到工作表名称字符串,则可能会出现问题,因此请先保存时间结果,然后组合字符串。
我想通过使用sheets(1).name ="blank"
设置工作簿来启动项目。隐藏它,取消隐藏它,并永久复制它。
祝你好运。