2013-09-27 3 views
3

У меня есть сценарий, который просматривает весь столбец и ищет значения между 1 - 9, если он встречает номер, он выдает окно с сообщением, если оно doesnt он в настоящее время бросает 10 ящиков сообщений, я знаю, это потому, что второй ящик все еще находится в цикле.MsgBox Появляется несколько раз ... reaarange macro, поэтому он отображается только один раз

Я попытался выставить его из цикла, но без успеха, любые указатели были бы хороши, чтобы получить 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 

ответ

3

Вы можете ввести логическую переменную типа, которая хранит истинную или ложные. Любые логические переменные: 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 
+0

Идеально подходят ... спасибо так много, что это достаточно хорошим решение! – Methexis

Смежные вопросы