Excel 如何使宏仅在遇到特定筛选器时运行

Excel 如何使宏仅在遇到特定筛选器时运行,excel,vba,Excel,Vba,我有一个大宏,它从主工作簿和15份日报中大量复制并粘贴到源工作簿。宏相当大,我只粘贴相关部分 源文件通过以下代码与主工作簿匹配(一切正常): 但问题就在这里,现在我在源文件中的CRV密钥是这样的 CL810681AG5421BPGB- 然而,在主工作簿中,它是这样的 column A Column B Obligation Active CRV Key NO CL810681AG5421BPGB- NO

我有一个大宏,它从主工作簿和15份日报中大量复制并粘贴到源工作簿。宏相当大,我只粘贴相关部分

源文件通过以下代码与主工作簿匹配(一切正常):

但问题就在这里,现在我在源文件中的CRV密钥是这样的 CL810681AG5421BPGB-

然而,在主工作簿中,它是这样的

column A                 Column B
Obligation Active        CRV Key
NO                       CL810681AG5421BPGB- 
NO                       CL810681AG5421BPGB-
YES                      CL810681AG5421BPGB-

如您所见,我的代码将只与第一行匹配,但我希望我的代码先找到“是”,如果找不到,则转到“否”。是否可能?您可以尝试以下逻辑:

Option Explicit

Sub Test_Date()

    Dim CRV_Key_Yes As String, CRV_Key_No As String
    Dim Lastrow As Long, i As Long, Line As Long
    Dim Appears As Boolean

    With ThisWorkbook.Worksheets("Sheet1")

        Lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row

        CRV_Key_Yes = "YES" & "_" & "CL810681AG5421BPGB-"
        CRV_Key_No = "NO" & "_" & "CL810681AG5421BPGB-"

        Appears = False

        For i = 2 To Lastrow

            If .Range("A" & i).Value & "_" & .Range("B" & i).Value = CRV_Key_Yes Then
                Line = i
                Appears = False
                Exit For
            ElseIf .Range("A" & i).Value & "_" & .Range("B" & i).Value = CRV_Key_No And Appears = False Then
                Line = i
                Appears = True
            End If

        Next i

        MsgBox "CRV Key match on line " & Line & "."

    End With

End Sub

您能否对数据进行排序,以便首先显示
YES
?如果没有,您可能需要有两个循环(一个用于
,一个用于
),以及某种提前退出条件或布尔标志,以指示是否找到了与
匹配的循环?希望这是有意义的。把它放在字典里,在你需要的时候检查它是否存在。我认为排序应该会有帮助。让我试着给你回电话。如果这不起作用,我会检查字典,部分排序似乎可以解决问题,但我也会尝试使用您的逻辑。所以,如果我有一套特定的说明,当它说是的时候,我可以在下面写下“出现=错误”?是的。当为“是”时,显示=False以将布尔值设置为其初始形式。
Option Explicit

Sub Test_Date()

    Dim CRV_Key_Yes As String, CRV_Key_No As String
    Dim Lastrow As Long, i As Long, Line As Long
    Dim Appears As Boolean

    With ThisWorkbook.Worksheets("Sheet1")

        Lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row

        CRV_Key_Yes = "YES" & "_" & "CL810681AG5421BPGB-"
        CRV_Key_No = "NO" & "_" & "CL810681AG5421BPGB-"

        Appears = False

        For i = 2 To Lastrow

            If .Range("A" & i).Value & "_" & .Range("B" & i).Value = CRV_Key_Yes Then
                Line = i
                Appears = False
                Exit For
            ElseIf .Range("A" & i).Value & "_" & .Range("B" & i).Value = CRV_Key_No And Appears = False Then
                Line = i
                Appears = True
            End If

        Next i

        MsgBox "CRV Key match on line " & Line & "."

    End With

End Sub