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

时间:2019-02-21 16:45:55

标签: excel vba

目标:查找输入到数组<redis-service-name>.<namespace>.svc.cluster.local:6379 say, redis service name is redis and namespace is default then it should be redis.default.svc.cluster.local:6379 中的列标题,然后将这些列复制到新表上。

原始数据有200列以上,因此无法手动获取它们,因此它仅使用<redis-pod-name>.<redis-service-name>.<namespace>.svc.cluster.local:6379 say, redis pod name is redis-0 and redis service name is redis and namespace is default then it should be redis-0.redis.default.svc.cluster.local:6379 在第一行中搜索有问题的标题。如果找不到标头,则在Headers行上得到MATCH

我试图将HeaderLoc更改为Variant,以使其采用错误值,但这不起作用。

我的错误陷阱RTE 1004: Application-defined or object defined error行未达到-我还试图在分配HeaderLoc = Match之前放置错误陷阱


如何在不使用If Not IsError的情况下继续显示错误?另外,此解决方案似乎与此处的许多其他公认解决方案保持一致,因此想知道为什么它在这里不起作用但在其他情况下确实如此。是因为分配数组的方式?


HeaderLoc

1 个答案:

答案 0 :(得分:2)

跳过错误并测试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