我尝试过多种方法来过滤列中的唯一值(包括空格和内部空格的空白)。我想过滤这些值,然后将它们粘贴到另一张表中的列a中。
Sub filter_2()
With Sheets("ICM flags")
.Columns("a").AdvancedFilter Action:=xlFilterCopy, copytorange:=Sheets("Flag Update (2)").Range("a2"), Unique:=True
End With
End Sub
上面的方法适用于.range("a2")
但是如果我尝试使用.range("a1")
我得到运行时错误1004类的高级过滤方法失败。
我通过以下方法得到运行时错误1004类的高级过滤方法失败。
Sub unique_filter()
Sheets("ICM flags").Columns("a").AdvancedFilter _
Action:=xlFilterCopy, _
copytorange:=Sheets("Flag Update (2)").Range("a1"), Unique:=True
End Sub
对于上述两种方法以及对Davesexcel的编辑回答:
Sub AdvFilter()
Dim ws As Worksheet, sh As Worksheet
Dim rng As Range, Frng As Range
Set sh = Sheets("ICM Flags")
Set Frng = sh.Range("A:A")
Set ws = Sheets("Flag Update (2)")
Set rng = ws.Range("A1")
'Frng.AdvancedFilter Action:=xlFilterCopy, copytorange:=rng, Unique:=True
Frng.AdvancedFilter Action:=xlFilterInPlace, Unique:=True
End Sub
该方法适用于FilterInPlace
,但不适用于CopyToRange
答案 0 :(得分:3)
当我运行你的代码时,我的工作没有任何错误。
这是相同的代码,但使用变量并且可能更适合您。
Sub AdvFilter()
Dim ws As Worksheet, sh As Worksheet
Dim rng As Range, Frng As Range
Set ws = Sheets("Flag Update (2)")
Set rng = ws.Range("A1")
Set sh = Sheets("ICM flags")
Set Frng = sh.Range("A:A")
Frng.AdvancedFilter Action:=xlFilterCopy, copytorange:=rng, Unique:=True
End Sub
答案 1 :(得分:0)
似乎问题是由于尝试使用CopyToRange
复制到另一个工作表而引起的。我已经解决了这个问题,首先复制到同一张纸上,然后将这些值复制到我想要的纸张上
Sub AdvFilter() 'filters flags copied from ICM to unique values and pastes into Flag update sheet.
Dim ws As Worksheet, sh As Worksheet
Dim rng As Range, Frng As Range, Prng As Range
Set ws = Sheets("Flag Update (2)")
Set sh = Sheets("ICM Flags 1")'destination sheet
Set Frng = sh.Range("A:A")'filter range
Set rng = sh.Range("c1")'filter output range
Frng.AdvancedFilter Action:=xlFilterCopy, copytorange:=rng, Unique:=True
ws.Columns("a").Value = sh.Columns("c").Value 'Separate copying as the filter didn't like copying to another sheet
End Sub
答案 2 :(得分:0)
实际上 需要将目标设为活动工作表,然后才能从任何其他工作表或工作簿中获取唯一值