我收到错误
范围类的自动过滤方法失败
就行了
RngToSearch.AutoFilter 1, Criteria1:=ProgramNoVal
我要做的是根据ProgramNoVal
过滤程序主页的C栏中的数据,然后在RngDest
的Mkting标签中复制相应列K的值。
Sub test()
Dim ProgramNoVal
Dim RngToSearch As Range, Rng As Range, RngDest As Range
ProgramNoVal = Sheets("Instructions").Range("G12").Value
With Sheets("Mkting")
Set RngDest = .Range("D1")
End With
Sheets("ProgramMain").Select
Set RngToSearch = Range("C1:K30000")
Set Rng = RngToSearch.Offset(1, 8).Resize(RngToSearch.Rows.Count - 1, 1)
ActiveSheet.AutoFilterMode = False
RngToSearch.AutoFilter 1, Criteria1:=ProgramNoVal
Rng.SpecialCells(xlCellTypeVisible).Copy RngDest
RngToSearch.AutoFilter
End Sub
我使用vlookup尝试了另一种方法。我发现了FoundRow的类型不匹配。它找到的值是一个字符串。我尝试了字符串,长,范围等,但没有任何作用。对这些代码中的任何一个的解决方案表示赞赏。 vlookup的代码是:
Sub test()
Dim ProgramNoVal
Dim RngToSearch As Range, Rng As Range, RngDest As Range
Dim foundRow As long
With Sheets("Mkting")
Set RngDest = .Range("D1")
End With
ProgramNoVal = Sheets("Instructions").Range("G12").Value
Set RngToSearch = Sheets("ProgramMain").Range("C1:K30000")
foundRow = Sheets("ProgramMain").Application.VLookup(ProgramNoVal, RngToSearch, 9, False)
If Not IsError(foundRow) Then
RngToSearch.Cells(foundRow, 1).Copy RngDest
End If
End Sub
答案 0 :(得分:0)
Dim foundRow as Variant
。
这是因为,如果找不到/不存在该值,则Application.Vlookup
将返回错误类型,这将在分配给Long类型变量时引发不匹配。
但是由于vlookup返回值而不是单元格的位置,我们无法按照我们尝试的方式使用(这是我没有测试我的代码所得到的)
而不是VLOOKUP
使用MATCH
:
foundRow = Sheets("ProgramMain").Application.Match(ProgramNoVal, RngToSearch.Columns(1), False)
Match
函数返回搜索值的相对行位置。由于我们正在搜索从第1行开始的范围,因此我们可以使用此值而不进行任何修改:
If Not IsError(foundRow) Then
RngToSearch.Cells(foundRow, 1).Copy RngDest
End If