Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba MsgBox出现多次…重新排列宏,因此只显示一次_Vba_Loops_Msgbox - Fatal编程技术网

Vba 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

我有一个脚本,它遍历整个列,查找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

您可以引入一个布尔类型变量来存储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