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