2016-02-04 4 views
1

Когда мы открываем эту книгу, этот код будет просматривать диапазон и находить ячейки, содержащие текст «Ожидание RCA», и выведет MsgBox, чтобы пользователь знал, какая строка в этом столбце содержит конкретный текст , Проблема состоит в том, что если есть несколько строк, содержащих этот текст, также будут множественные всплывающие окна MsgBox.Объединение нескольких MsgBox в один

Private Sub Auto_Open() 

Dim i As Variant 
Dim FindRange As Range 
Set FindRange = Range("AB2:AB2000") 

    For Each i In FindRange 
     If i = "RCA Pending" Then 

     MsgBox "Found 'RCA Pending' in cell" & " " & i.Address, vbExclamation, "Attention" 

     End If 
    Next i 
End Sub 

Что необходимо изменить в этом коде, так что есть только один всплывающее окно, в котором перечислены все строки, в которых были найдены «RCA Pending»?

ответ

3

Попробуйте этот код:

Private Sub Auto_Open()  

Dim i As Variant 
Dim FindRange As Range 
Dim Msg As String 
Set FindRange = Range("AB2:AB2000") 

    For Each i In FindRange 
     If i = "RCA Pending" Then 

     If Msg = "" Then 
     Msg = "Found 'RCA Pending' in cell" & " " & i.Address 
     Else 
     Msg = Msg & Chr(10) & "Found 'RCA Pending' in cell" & " " & i.Address 
     End If 

     End If 
    Next i 
    If Msg <> "" Then MsgBox Msg, vbExclamation, "Attention" 
End Sub 
+1

Почему 'Chr (13)'? Разве это не должно быть «Chr (10)»? [править] Мои извинения. По-видимому, соло 'Chr (13)' интерпретируется как символ следующей строки. – Jeeped

+0

@Jeeped, есть ли проблемы с использованием 'Chr (13)', я использую 'Chr (13)' в VBA и 'Chr (10)' в ячейках excel. – Fadi

+1

Нет, кажется, он интерпретируется как символ следующей строки, хотя, строго говоря, я не верю, что это нужно. Возврат каретки (например, «Chr (13)') всегда должен сопровождаться линией перевода (например, «Chr (10)»), но «Chr (10)» может стоять сам по себе. Он должен ** быть 'vbCrLf' или' vbLf', а не 'vbCr'. – Jeeped

2

Попробуйте это,

Sub Msgbox_It() 

    Dim sh As Worksheet 
    Dim LstRw As Long 
    Dim i As Range 
    Dim FindRange As Range 
    Dim Msg As String 

    Set sh = Sheets("Sheet1") 'name of worksheet 
    With sh 
     LstRw = .Cells(.Rows.Count, "AB").End(xlUp).Row 
     Set FindRange = .Range("AB2:AB" & LstRw) 

     For Each i In FindRange 
      If i = "RCA Pending" Then 
       Msg = Msg & i.Address & vbNewLine 
      End If 
     Next i 

     MsgBox "Found 'RCA Pending' in cell" & " " & Msg, vbExclamation, "Attention" 
    End With 
End Sub 
+0

Спасибо за ответ. Я пошел с Фади, потому что он работает, когда я открываю книгу, которая должна запускать этот суб. Я действительно давал вам свой шанс, хотя это был солидный ответ. –

+1

Хорошо, просто введите код в свою автоматическую подпрограмму? – Davesexcel

+0

Я бы сделал это, но прочитал мой комментарий выше о новом изменении требования. –

Смежные вопросы