我有一个脚本可以查看整个列并查找1到9之间的值,如果它遇到一个数字,它会抛出一个消息框,如果它当前没有它会抛出10个消息框,我知道这是因为第二个框仍然在循环中。
我已经尝试将它放在循环之外但没有成功,任何指针都很适合获得Else:MsgBox"所有位置都正确输入"显示一次!
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
答案 0 :(得分:3)
您可以引入一个布尔类型变量来存储 true 或 false 。默认情况下,任何布尔变量都是 false ,因此默认情况下found
等于 false (您没有明确说出found = false
但它是可选的)。因此,当rng
不是什么时,您只需要将其值更改为 true 。在退出循环之前添加了found = true
。
除非事实真的,否则某些事情总是错误的。因此,当值匹配时,您可以切换变量状态。
在宏代码的底部有一个额外的行,用于检查found
是否 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