Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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 如果没有,IsError(匹配)没有绕过错误。如何跳过未找到的匹配?_Excel_Vba - Fatal编程技术网

Excel 如果没有,IsError(匹配)没有绕过错误。如何跳过未找到的匹配?

Excel 如果没有,IsError(匹配)没有绕过错误。如何跳过未找到的匹配?,excel,vba,Excel,Vba,目标:找到输入到数组标题中的列标题,然后将这些列复制到新的工作表中 原始数据有200多个列,手动获取它们是不可能的,因此这只是使用MATCH在第一行中搜索有问题的标题。如果未找到标题,我将在HeaderLoc=Match行上获得RTE 1004:应用程序定义或对象定义错误 我尝试将HeaderLoc更改为Variant,以允许它假设一个错误值,但这不起作用 我的错误陷阱If Not iError行未到达-我还尝试在分配HeaderLoc 如何在不使用处理错误的情况下继续处理错误?此外,此解决方

目标:找到输入到数组
标题中的列标题
,然后将这些列复制到新的工作表中

原始数据有200多个列,手动获取它们是不可能的,因此这只是使用
MATCH
在第一行中搜索有问题的标题。如果未找到标题,我将在
HeaderLoc=Match
行上获得
RTE 1004:应用程序定义或对象定义错误

我尝试将HeaderLoc更改为Variant,以允许它假设一个错误值,但这不起作用

我的错误陷阱
If Not iError
行未到达-我还尝试在分配
HeaderLoc


如何在不使用
处理错误的情况下继续处理错误?此外,此解决方案似乎与许多其他已被接受的解决方案一致,因此我想知道为什么它在这里不起作用,但在其他情况下却起作用。这是因为我的数组的分配方式吗



跳过错误并测试
0

Dim HeaderLoc As Long
Dim Headers

Headers = Array("Header1", "Header2", Etc........)

Application.ScreenUpdating = False
    For i = LBound(Headers) To UBound(Headers)
        HeaderLoc = 0
        On Error Resume Next
            HeaderLoc = WorksheetFunction.Match(Headers(i), Raw.Rows(1), 0)
        On Error GoTo 0
            If HeaderLoc > 0 Then
                Raw.Range(Raw.Cells(2, HeaderLoc), Raw.Cells(LR, HeaderLoc)).Copy
                Des.Cells(2, i + 13).PasteSpecial xlPasteValues
            End If
    Next i
Application.ScreenUpdating = True
或者使用Application.Match和变量

Dim HeaderLoc As Variant
Dim Headers

Headers = Array("Header1", "Header2", Etc........)

Application.ScreenUpdating = False
    For i = LBound(Headers) To UBound(Headers)
        HeaderLoc = Application.Match(Headers(i), Raw.Rows(1), 0)
            If Not IsError(HeaderLoc) Then
                Raw.Range(Raw.Cells(2, HeaderLoc), Raw.Cells(LR, HeaderLoc)).Copy
                Des.Cells(2, i + 13).PasteSpecial xlPasteValues
            End If
    Next i
Application.ScreenUpdating = True

尝试
Application.Match
,它允许您捕获并检查我认为的错误。将headerloc声明为variant@ScottCraner试过了——这是有问题的;)你是复制品:这是关于你的,而不是被接受的。@Urderboy为什么?重复的是。
Dim HeaderLoc As Variant
Dim Headers

Headers = Array("Header1", "Header2", Etc........)

Application.ScreenUpdating = False
    For i = LBound(Headers) To UBound(Headers)
        HeaderLoc = Application.Match(Headers(i), Raw.Rows(1), 0)
            If Not IsError(HeaderLoc) Then
                Raw.Range(Raw.Cells(2, HeaderLoc), Raw.Cells(LR, HeaderLoc)).Copy
                Des.Cells(2, i + 13).PasteSpecial xlPasteValues
            End If
    Next i
Application.ScreenUpdating = True