MsgBox出现多次... reaarange宏,因此它只显示一次

时间:2013-09-27 11:24:20

标签: 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
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

1 个答案:

答案 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