Vba 高级筛选器在一种情况下复制,但在另一种情况下失败?

Vba 高级筛选器在一种情况下复制,但在另一种情况下失败?,vba,excel,excel-2007,Vba,Excel,Excel 2007,我有一个高级过滤器,其标准如下: 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:" &

我有一个高级过滤器,其标准如下:

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
而且效果很好。它复制标题和数据。
但在下一个案例中,我没有以下标准:

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
,它会显示一个
范围(F2:F518
),因此那里有数据要复制。 另一方面,如果选中
SiteData
,则只显示
范围(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
选项显式
子调度()
将新闻表设置为工作表、将名称表设置为工作表、将ws设置为工作表
作为对象的暗淡单元
将范围设置为字符串
作为字符串的Dim ClientRange
作为字符串的Dim ClntCrit
Dim ClntName作为字符串
Dim ClientCcs作为字符串
将SiteRange设置为字符串
暗淡的工作人员范围为字符串
作为字符串的Dim代码范围
最后一排一样长
ActiveWorkbook.Sheets(“明细表”)。激活
设置名称表=图纸(“明细表”)
Application.ScreenUpdating=False
范围(“$BE$2”)。选择
Selection.Value=“客户名称”
范围(“$BE$3”)。选择
Selection.Value=“*-ccs*”
范围(“$BF$2”)。选择
Selection.Value=“客户名称”
范围($BF$3”)。选择
Selection.Value=“*-ccs*”
范围(“$BG$2”)。选择
Selection.Value=“客户名称”
范围(“B2”)。选择
Lastrow=单元格(Rows.Count,ActiveCell.Column).End(xlUp).Row
ClientRange=“B2:&“B”和Lastrow
范围(“F2”)。选择
Lastrow=单元格(Rows.Count,ActiveCell.Column).End(xlUp).Row
SiteRange=“F2:&“F”和Lastrow
范围(“G2”)。选择
Lastrow=单元格(Rows.Count,ActiveCell.Column).End(xlUp).Row
StaffRange=“G2:&“G”和Lastrow
范围(“H2”)。选择
Lastrow=单元格(Rows.Count,ActiveCell.Column).End(xlUp).Row
CodeRange=“H2:&“H”和Lastrow
范围(“$BF$2”)。选择
ClntName=“$BF$2:$BF$3”
范围(“$BE$2”)。选择
ClntCrit=“$BE$2:$BE$3”
范围(ClientRange)。高级筛选器操作:=xlFilterCopy,
标准范围:=范围(ClntCrit),复制范围:=范围(“$BG$2”),
唯一:=真
范围(ClientRange)。高级筛选器操作:=xlFilterCopy,
CriteriaRange:=范围(ClntName),CopyToRange:=范围(“AA2”),
唯一:=真
范围(SiteRange)。高级筛选器操作:=xlFilterCopy,
CopyToRange:=范围(“AB2”),唯一:=真
范围(StaffRange)。高级筛选器操作:=xlFilterCopy,
CopyToRange:=范围(“AC2”),唯一:=真
范围(CodeRange).AdvancedFilter操作:=xlFilterCopy,
CopyToRange:=范围(“AD2”),唯一:=真
端接头
前两个带条件的高级过滤器工作正常。接下来的三个高级过滤器仅返回标题


希望有人能看到这种安排中的冲突,因为它应该起作用。

我认为您应该为“范围”指定“工作表参考”

我认为我已经找到了解决方案。今天晚些时候,我将在完整的程序上运行它,但目前这是可行的:

我将不带条件的高级过滤器移到带条件的高级过滤器上方,换句话说,不带条件的高级过滤器首先运行,结果是:

所有高级过滤器都将适当的范围复制到相应的范围,没有任何问题


我必须仔细阅读这些高级过滤器,毫无疑问,我会发现必须按特定顺序运行它们。

我无法复制您的问题。同样的代码在我这边也适用。谢谢@L42。。。节目后期会有什么影响这个结果吗?可能会。首先尝试将它与代码的其余部分隔离,如果它仍然像您描述的那样运行,则将其作为单独的例程运行。如果没有,那么您的代码的其余部分可能会影响它。谢谢@Arya。。。我会试试你的建议,因为到目前为止我还没有解决这个问题的运气。没有运气。。。我尝试了这个工作簿。工作表(1)。范围,但它没有改变结果。。谢谢你的建议。