遍历单元格,如果找不到值,则显示一条消息

时间:2019-07-08 15:08:16

标签: excel vba loops

我有一个宏,该宏循环通过一张工作表的单元格,在另一张工作表中查找该值,然后如果它们匹配则突出显示该行。我想添加一个消息框,如果找不到匹配的值,该消息框会弹出。我知道这是一个简单的问题,但是我很难弄清楚将布尔值放在哪个循环中。


Sub MarkXfer_noX()

Dim rng As Range
Dim rng2 As Range
Set rng = Worksheets("Transferred Routings").UsedRange
Dim i As Integer
Dim j As Integer
Dim ProdCI As String
Dim found As Boolean
Dim intRowCount As Integer


intRowCount = Sheets("Transferred Routings").UsedRange.Rows.count

For i = 2 To intRowCount

        If rng.Cells(i, 1) <> "" Then ProdCI = rng.Cells(i, 1) 'get the ProdCI number from column A if not blank
        Worksheets("All_ProCI").Activate 'activate main page
        Set rng2 = Worksheets("All_ProCI").UsedRange 'select a range on the main page

            For j = 2 To rng2.Rows.count 'from row 2 to the end
                If rng2.Cells(j, 2) = ProdCI Then 'if the ProdCI in column B matches the one we picked,
                    Call FillCell(j) 'call a sub in a different module and give it our current row
                    found = True
                Else
                    found = False
                End If
            Next

   Next

   If found = False Then
   MsgBox (ProdCI & " not found") 'Display a message if one of the items wasn't found on the main page. Currently has an error where the last one in the list always pops up.
   Else
   End If

End Sub

现在,无论如何,它始终显示一个msgbox,其最后一个值在该范围内。

1 个答案:

答案 0 :(得分:0)

谢谢,这是使用“查找”功能更新的工作代码

Sub MarkXfer_Find()

'Re-tooled to use the .Find function instead of looping through each
Dim rng As Range
Dim rng2 As Range
Set rng = Worksheets("Transferred Routings").UsedRange
Dim i As Integer
Dim ProdCI As String
Dim intRowCount As Integer
Dim intRowCount2 As Integer
Dim aCell As Range

intRowCount = Sheets("Transferred Routings").UsedRange.Rows.count

For i = 2 To intRowCount

        If rng.Cells(i, 1) <> "" Then ProdCI = rng.Cells(i, 1) 'get the ProdCI number from column A if not blank
        Worksheets("All_ProCI").Activate 'activate main page
        Set rng2 = Worksheets("All_ProCI").UsedRange 'select a range on the main page
        intRowCount2 = Worksheets("All_ProCI").UsedRange.Rows.count

        'use the Find function to put a value in aCell
        Set aCell = rng2.Range("B1:B" & intRowCount2).Find(What:=ProdCI, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

        If Not aCell Is Nothing Then
            'MsgBox ProdCI & " found"
            Call FillCell(aCell.row)

        Else 'If aCell is blank display msgbox
        MsgBox "ProdCI """ & ProdCI & """ not found"
        End If

Next


End Sub