2015-05-19 5 views
0

Я проверяю ввод данных на листе Excel. Когда пользователь вводит неверные данные, отображается MsgBox, предоставляя возможность Abort/Retry/Ignore.excel vba - msgbox abort/retry/ignore

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If IsNumeric(Range("i17")) Then 
     If [I17] < 0 Then 
      result = MsgBox("Critical Error Encountered", vbAbortRetryIgnore + vbCritical, "Error Encountered") 
      If result = 3 Then 
       ActiveCell.Value = Empty    
      End If 
     End If 
    End If 
End sub 

Так как я написал этот код в SelectionChange, когда я нажимаю войти только тогда он показывает окно сообщения и поскольку я пишу Active.Cell = Empty он удаляет следующую ячейку, но я имею в виду это, чтобы очистить ячейку, которая содержит неверные данные.

+0

А что такое «ячейка, которая содержит недопустимые данные»? Это 'I17'? Тогда почему вы не очищаете 'I17'? Или это ячейка, которая была изменена * до * 'Worksheet_SelectionChange'? Затем используйте событие «Worksheet_Change (ByVal Target As Range)». Там 'Target' содержит эту ячейку. –

ответ

0

Если вы используете событие SelectionChange, диапазон Target - это только что выбранная ячейка, а не только что измененная ячейка. Если вы используете событие Change рабочего листа, то Target относится к ячейке, которая была изменена. Таким образом, если предположить, что ячейки I17 является своего рода субтотальной клетки/проверки, а не клетка, в которую пользователь вводит данные, попробуйте следующее:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If IsNumeric(Range("i17")) Then 
     If [I17] < 0 Then 
      result = MsgBox("Critical Error Encountered", vbAbortRetryIgnore + vbCritical, "Error Encountered") 
      If result = 3 Then 
       Target.Value = Empty 
       Target.Select 
      End If 
     End If 
    End If 
End Sub 

Этот код будет очистить ячейку только что изменил и изменить выбор обратно к тому, что если пользователь выбирает кнопку «Отмена» в сообщении.

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