2016-02-04 116 views
1

当我们打开此工作簿时,此代码将查看范围并查找包含文本“RCA Pending”的单元格,并弹出一个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挂起”被发现的所有行弹出?

回答

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)'有什么问题,我在VBA中使用'Chr(13)',在excel单元中使用'Chr(10)'。 – 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

感谢您的回答。我和Fadi一起去了,因为它在我打开需要触发这个子部分的工作簿时起作用。我确实给你一个赞成,因为它是一个坚实的答案。 –

+1

好的,只需将代码放入自动打开的子例程中即可? – Davesexcel

+0

我会这样做,但请阅读我上面关于新需求变更的评论。 –