Vba MsgBox出现多次…重新排列宏,因此只显示一次
我有一个脚本,它遍历整个列,查找1-9之间的值,如果遇到一个数字,它会抛出一个消息框,如果没有,它当前会抛出10个消息框,我知道这是因为第二个框仍然在循环中 我曾尝试将其置于循环之外,但没有成功,任何指针都可以让Else:MsgBox“所有位置正确输入”显示一次Vba MsgBox出现多次…重新排列宏,因此只显示一次,vba,loops,msgbox,Vba,Loops,Msgbox,我有一个脚本,它遍历整个列,查找1-9之间的值,如果遇到一个数字,它会抛出一个消息框,如果没有,它当前会抛出10个消息框,我知道这是因为第二个框仍然在循环中 我曾尝试将其置于循环之外,但没有成功,任何指针都可以让Else:MsgBox“所有位置正确输入”显示一次 Sub Scoring() Dim FindString As String Dim rng As Range Dim startVal As Integer, endVal As Integer startVal = 1 endVa
Sub Scoring()
Dim FindString As String
Dim rng As Range
Dim startVal As Integer, endVal As Integer
startVal = 1
endVal = 9
For i = startVal To endVal
FindString = CStr(i)
With Sheets("Scoring").Range("S:S")
Set rng = .Find(What:=FindString, _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not rng Is Nothing Then
MsgBox "There are one or more risks that do not contain the minimum information required for import, please ammend these and try again.", True
Exit For
Else: MsgBox "All locations correctly entered"
End If
End With
Next i
End Sub
您可以引入一个布尔类型变量来存储true或false。默认情况下,任何布尔变量都是false,因此默认情况下
found
等于false(您没有明确地说found=false
,但它是可选的)。因此,只有当rng
不是空时,才需要将其值更改为true。在退出循环之前添加了found=true
有些东西总是假的,除非是真的,这是合乎逻辑的。因此,当值匹配时,可以切换变量状态
在宏代码的底部有一个额外的行,用于检查找到的是否为false。如果是,则将显示一个消息框,而不是10+
希望这有帮助
Sub Scoring()
Dim FindString As String
Dim rng As Range
Dim startVal As Integer, endVal As Integer, i As Long
startVal = 1
endVal = 9
Dim found As Boolean
For i = startVal To endVal
FindString = CStr(i)
With Sheets("Scoring").Range("S:S")
Set rng = .Find(What:=FindString, _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not rng Is Nothing Then
MsgBox "There are one or more risks that do not contain the minimum information required for import, please ammend these and try again.", True
found = True
Exit For
End If
End With
Next i
If Not found Then MsgBox "All locations correctly entered"
End Sub