2016-02-04 98 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

我會這樣做,但請閱讀我上面關於新需求變更的評論。 –