3

我有一个脚本可以查看整个列并查找 1 - 9 之间的值,如果遇到一个数字,它会抛出一个消息框,如果它当前没有抛出 10 个消息框,我知道这是因为第二个框仍然是 incide循环。

我曾尝试将其置于循环之外,但没有成功,任何指针都可以很好地让 Else: MsgBox "All locations correct entered" 显示一次!

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
4

1 回答 1

3

您可以引入存储truefalse的布尔类型变量。默认情况下,任何布尔变量都是false,因此found默认情况下等于false(您没有明确说明found = false,但它是可选的)。因此,您只需要在不是什么都没有时将其值更改为true 。在退出循环之前rng添加。found = true

除非它是真的,否则事物总是错误的,这是合乎逻辑的。因此,当值匹配时,您切换变量状态。

在宏代码的底部有一个额外的行来检查是否foundfalse。如果是,则将显示一个消息框而不是 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
于 2013-09-27T11:28:56.800 回答