Excel 将多个MsgBox合并为一个
当我们打开此工作簿时,此代码将在一个区域中查找包含文本“RCA Pending”的单元格,并将弹出一个MsgBox,让用户知道该列中的哪一行包含特定文本。问题是,如果有多行包含此文本,那么还会有多个MsgBox弹出窗口Excel 将多个MsgBox合并为一个,excel,vba,Excel,Vba,当我们打开此工作簿时,此代码将在一个区域中查找包含文本“RCA Pending”的单元格,并将弹出一个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
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挂起”的所有行?尝试此代码:
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
Private Sub Auto_Open()
Dim i作为变体
暗淡的芬德兰奇作为射程
作为字符串的Dim Msg
设置FindRange=范围(“AB2:AB2000”)
对于我在芬德兰奇的每一个人
如果i=“RCA待定”,则
如果Msg=”“,则
Msg=“在单元格”和“&i.地址中找到“RCA挂起”
其他的
Msg=Msg&Chr(10)&“在单元格中找到待处理的RCA”&“i.地址”
如果结束
如果结束
接下来我
如果是“Msg”,则MsgBox Msg,VBE感叹号为“注意”
端接头
尝试以下代码:
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
Private Sub Auto_Open()
Dim i作为变体
暗淡的芬德兰奇作为射程
作为字符串的Dim Msg
设置FindRange=范围(“AB2:AB2000”)
对于我在芬德兰奇的每一个人
如果i=“RCA待定”,则
如果Msg=”“,则
Msg=“在单元格”和“&i.地址中找到“RCA挂起”
其他的
Msg=Msg&Chr(10)&“在单元格中找到待处理的RCA”&“i.地址”
如果结束
如果结束
接下来我
如果是“Msg”,则MsgBox Msg,VBE感叹号为“注意”
端接头
试试这个
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
试试这个
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
为什么
Chr(13)
?那不应该是Chr(10)
?我道歉。显然,一个单独的Chr(13)
也可以解释为下一行字符。@Jeeped,使用Chr(13)
有什么问题吗?我在VBA中使用Chr(13)
,在excel单元格中使用Chr(10)
。不,它似乎可以解释为下一行字符,虽然严格来说,我不认为应该这样做。回车(例如Chr(13)
)应始终伴随换行符(例如Chr(10)
),但Chr(10)
可以单独使用。它应该是vbCrLf
或vbLf
,而不是vbCr
@Fadi谢谢,这非常有效。当我完成测试并向同事展示时,需求发生了变化……哈哈。现在,他们只需要计算“RCA待定”在该范围内出现的次数,而不需要每个人的地址。但你的回答对未来的需求很有参考价值。@IronMan,欢迎你。要计数,您可以使用MsgBox WorksheetFunction.CountIf(列(“AB”),“RCA挂起”)
。为什么Chr(13)
?那不应该是Chr(10)
?我道歉。显然,一个单独的Chr(13)
也可以解释为下一行字符。@Jeeped,使用Chr(13)
有什么问题吗?我在VBA中使用Chr(13)
,在excel单元格中使用Chr(10)
。不,它似乎可以解释为下一行字符,虽然严格来说,我不认为应该这样做。回车(例如Chr(13)
)应始终伴随换行符(例如Chr(10)
),但Chr(10)
可以单独使用。它应该是vbCrLf
或vbLf
,而不是vbCr
@Fadi谢谢,这非常有效。当我完成测试并向同事展示时,需求发生了变化……哈哈。现在,他们只需要计算“RCA待定”在该范围内出现的次数,而不需要每个人的地址。但你的回答对未来的需求很有参考价值。@IronMan,欢迎你。要计数,您可以使用MsgBox工作表function.CountIf(列(“AB”),“RCA待定”)
。谢谢您的回答。我选择了Fadi's,因为当我打开工作簿时它会工作,而这正是触发此sub所需的。虽然这是一个可靠的答案,但我还是投了你的一票。好的,只要把代码放在你的自动打开子程序中就行了?我会这样做,但请阅读我上面关于新需求更改的评论。谢谢你的回答。我选择了Fadi's,因为当我打开工作簿时它会工作,而这正是触发此sub所需的。虽然这是一个可靠的答案,但我还是投了你的一票。好吧,把代码放在你的自动打开子程序中?我会这样做,但请阅读我上面关于新需求更改的评论。