我有一个高级过滤器,其标准如下:
Range(ClientRange).AdvancedFilter Action:=xlFilterCopy,
CriteriaRange:=Range(ClntName), CopyToRange:=Range("AA2"), unique:=True
而且效果很好。它复制标题和数据。
但在下一种情况下,我没有以下标准:
Range("F2").Select
Lastrow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
SiteRange = "F2:" & "F" & Lastrow
Range(SiteRange).AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("AB2"), Unique:=True
Range("AB2").Select
Lastrow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
SiteData = "AB2:" & "AB" & Lastrow
它只复制来自 F2 的标题,并将其放在 AB2 上。如果我检查SiteRange
它会显示一个Range(F2:F518
),所以那里有数据可以复制。另一方面,如果您选中SiteData
它只显示Range(AB2:AB2)
我一定错过了什么;谁能帮忙弄清楚?
我削减了程序以仅显示高级过滤器,并说明它们似乎如何有选择地工作。我知道这是我的编程,但希望它会更容易看到问题。代码如下:
Option Explicit
Sub Scheduling()
Dim NewSheet As Worksheet, NameSheet As Worksheet, ws As Worksheet
Dim cell As Object
Dim SheetRange As String
Dim ClientRange As String
Dim ClntCrit As String
Dim ClntName As String
Dim ClientCcs As String
Dim SiteRange As String
Dim StaffRange As String
Dim CodeRange As String
Dim Lastrow As Long
ActiveWorkbook.Sheets("Schedules").Activate
Set NameSheet = Sheets("Schedules")
Application.ScreenUpdating = False
Range("$BE$2").Select
Selection.Value = "Client Name"
Range("$BE$3").Select
Selection.Value = "*-ccs*"
Range("$BF$2").Select
Selection.Value = "Client Name"
Range("$BF$3").Select
Selection.Value = "<>*-ccs*"
Range("$BG$2").Select
Selection.Value = "Client Name"
Range("B2").Select
Lastrow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
ClientRange = "B2:" & "B" & Lastrow
Range("F2").Select
Lastrow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
SiteRange = "F2:" & "F" & Lastrow
Range("G2").Select
Lastrow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
StaffRange = "G2:" & "G" & Lastrow
Range("H2").Select
Lastrow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
CodeRange = "H2:" & "H" & Lastrow
Range("$BF$2").Select
ClntName = "$BF$2:$BF$3"
Range("$BE$2").Select
ClntCrit = "$BE$2:$BE$3"
Range(ClientRange).AdvancedFilter Action:=xlFilterCopy,
CriteriaRange:=Range(ClntCrit), CopyToRange:=Range("$BG$2"),
unique:=True
Range(ClientRange).AdvancedFilter Action:=xlFilterCopy,
CriteriaRange:=Range(ClntName), CopyToRange:=Range("AA2"),
unique:=True
Range(SiteRange).AdvancedFilter Action:=xlFilterCopy,
CopyToRange:=Range("AB2"), unique:=True
Range(StaffRange).AdvancedFilter Action:=xlFilterCopy,
CopyToRange:=Range("AC2"), unique:=True
Range(CodeRange).AdvancedFilter Action:=xlFilterCopy,
CopyToRange:=Range("AD2"), unique:=True
End Sub
带有条件的前两个高级过滤器工作正常。接下来的三个高级筛选器仅返回标题。
希望有人能看到这种安排中的冲突在哪里,因为它应该有效。
我认为您应该为"范围"指定"工作表引用"
我已经找到了解决方案。今天晚些时候,我将在完整的程序上运行它,但现在这是有效的:
我将不带条件的高级过滤器移到带条件的高级过滤器上方,换句话说,没有条件的高级过滤器首先运行,结果是:
所有高级过滤器都将适当的范围复制到相应的范围,没有任何问题。
我将不得不阅读这些高级过滤器,毫无疑问,我会发现必须按特定顺序运行它们?