3

列全体を調べて 1 ~ 9 の値を探すスクリプトがあります。現在 10 個のメッセージ ボックスがスローされていない場合はメッセージ ボックスがスローされます。これは、2 番目のボックスがまだ incide であるためです。ループ。

ループの外に配置しようとしましたが、成功しませんでした。 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
4

1 に答える 1

3

trueまたはfalseを格納するブール型変数を導入できます。ブール変数はデフォルトでfalseであるため、デフォルトではfalsefoundに等しくなります(明示的に言う必要はありませんが、オプションです)。そのため、何もない場合にのみ値をtrueに変更する必要があります。ループを終了する前に追加されます。found = falserngfound = true

真でない限り、何かが常に偽であることは論理的です。したがって、値が一致すると、変数の状態が切り替わります。

マクロ コードの最後に、foundfalseかどうかをチェックする追加の行があります。その場合、10 個以上ではなく 1 個のメッセージ ボックスが表示されます。

お役に立てれば

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 に答える