Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:范围类的自动筛选方法失败_Excel_Vba - Fatal编程技术网

Excel VBA:范围类的自动筛选方法失败

Excel VBA:范围类的自动筛选方法失败,excel,vba,Excel,Vba,我发现了错误 范围类的自动筛选方法失败 在线 RngToSearch.AutoFilter 1,准则1:=ProgramNoVal 我试图做的是根据ProgramNoVal过滤程序主工作表C列中的数据,然后在RngDest复制我的Mkting选项卡中相应K列的值 我尝试了另一种方法,使用vlookup。我发现foundRow的类型不匹配。它正在查找的值是一个字符串。我试过弦乐、长距离、远距离等,但都没用。对于这两段代码中的任何一段的解决方案,我们都表示赞赏。vlookup的代码为: Sub te

我发现了错误

范围类的自动筛选方法失败

在线

RngToSearch.AutoFilter 1,准则1:=ProgramNoVal

我试图做的是根据ProgramNoVal过滤程序主工作表C列中的数据,然后在RngDest复制我的Mkting选项卡中相应K列的值

我尝试了另一种方法,使用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
将foundRow作为变体

这是因为,如果找不到/不存在该值,则Application.Vlookup将返回错误类型,这将在分配给长类型变量时引发不匹配

但是由于vlookup返回的是值,而不是单元格的位置,所以我们不能使用我们试图使用的方式,这就是我没有测试代码所得到的

使用匹配代替VLOOKUP:

Match函数返回搜索值的相对行位置。由于我们正在搜索从第1行开始的范围,因此可以使用此值而无需任何修改:

If Not IsError(foundRow) Then
    RngToSearch.Cells(foundRow, 1).Copy RngDest
End If

SheetsInstructions.RangeG12.value中的值是多少?例如,如果G12包含错误值,该自动筛选将失败。它不会。它有一个4位数字,用来标识我们使用的程序。然后我想在ProgramMain电子表格中找到同一个程序的数据。David,我试图修改你昨天给我的vlookup代码,但是遇到了一个类型不匹配的问题-见上文。谢谢你的帮助!哪一行给出了错误?对于类型不匹配,它的行是:foundRow=SheetsProgramMain.Application.vlookupprogrammannoval,RngToSearch,9,falshi,有效-谢谢!但是现在我在这行代码RngToSearch.cellsfundrow,1.Copy RngDest上得到了类型不匹配。不知道是什么原因造成的。Rngtosearch和RngDest都设置为range您做了什么来调试它?如果在这里问问题是你的第一选择,请重新考虑。在出现此错误时,foundRow的值是多少?我已经尝试了很多方法-因为将foundRow设置为一个变量是有效的,并且RngToSearch必须是一个范围,因为它正在查看C1:K3000,我假设问题在RngDest类型中?我试过RngDest,我能想到的所有东西的最终值都是字符串,但我也试过range和variant,但都不起作用。我肯定对vba中的对象缺乏了解,所以这可能就是问题所在。另外,foundRow让我很困惑-vlookup会找到我想要复制到D1中的特定单元格,但后来它被视为.Cells中的行号。我写了所有这些,所以希望很明显我正在尝试!我肯定从你的帖子中学到了很多东西——我一直在修改你的代码以供其他用途,所以我非常感谢这就是问题所在。。。vlookup从单元格返回值,而不是单元格的位置。。。等等
foundRow = Sheets("ProgramMain").Application.Match(ProgramNoVal, RngToSearch.Columns(1), False)
If Not IsError(foundRow) Then
    RngToSearch.Cells(foundRow, 1).Copy RngDest
End If