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