Здравствуйте, помогите, пожалуйста, написать макрос. Есть файл-Excel, это тест и в определенный столбец нужно вводить только, например, цифру 1. Пользователь ошибся и ввел что-то другое. И нужно мне, чтобы выходило окошко диалоговое, например, введено неправильное значение, повторите попытку. И ячейка, в которую введено неправильное значение обнулялась.
Здравствуйте, помогите, пожалуйста, написать макрос. Есть файл-Excel, это тест и в определенный столбец нужно вводить только, например, цифру 1. Пользователь ошибся и ввел что-то другое. И нужно мне, чтобы выходило окошко диалоговое, например, введено неправильное значение, повторите попытку. И ячейка, в которую введено неправильное значение обнулялась.Tatsiana
Здравствуйте. Если Вы в проверке данных выберите не "Предупреждение", как сейчас, а "Остановку", то другое значение нельзя будет ввести. Или это не подходит? Можно еще дополнительно напоминалку поставить, там же в проверке данных, Сообщение при вводе. Но проверка данных от копирования не спасает.
Здравствуйте. Если Вы в проверке данных выберите не "Предупреждение", как сейчас, а "Остановку", то другое значение нельзя будет ввести. Или это не подходит? Можно еще дополнительно напоминалку поставить, там же в проверке данных, Сообщение при вводе. Но проверка данных от копирования не спасает.gling
В инструкции к тесту указано, какая цифра должна вводиться в тот или иной столбец, но человеческий фактор... В данном случае в столбец D вводится только 1, а в столбец E только 0. Также ячейка может быть и пустой
В инструкции к тесту указано, какая цифра должна вводиться в тот или иной столбец, но человеческий фактор... В данном случае в столбец D вводится только 1, а в столбец E только 0. Также ячейка может быть и пустойTatsiana
Private Sub Worksheet_Change(ByVal Target As Range) If Target = "" Then Exit Sub Application.EnableEvents = False If Not Application.Intersect(Range("D5:D32"), Target) Is Nothing Then If Target.Offset(, 1) <> "" Then Target = "" MsgBox "Уже есть ответ - НЕТ." Else If Target <> 1 Then MsgBox "Вводить можно только 1-цу." Target = "" End If End If End If If Not Application.Intersect(Range("E5:E32"), Target) Is Nothing Then If Target.Offset(, -1) <> "" Then Target = "" MsgBox "Уже есть ответ - ДА." Else If Target <> 0 Then MsgBox "Вводить можно только 0." Target = "" End If End If End If Application.EnableEvents = True End Sub
[/vba]
Код в модуль листа.
Только есть вопрос, зачем две колонки? Для усложнения проверки? В одной то, два ответа не сделаешь. Либо 0, либо 1. А СЧЕТЕСЛИ() посчитает и 1-цы и 0-ли. ЗЫ. ВО как. Посмотрел, 0-ли то и не считаются, тем более вводить в одну колонку D и 1 и 0 проще будет. И код проверки короче. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target = "" Then Exit Sub Application.EnableEvents = False If Not Application.Intersect(Range("D5:D32"), Target) Is Nothing Then If Target > 1 Then MsgBox "Вводить можно только 1-цу или 0." Target = "" End If End If Application.EnableEvents = True End Sub
[/vba]
Так наверное надо.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target = "" Then Exit Sub Application.EnableEvents = False If Not Application.Intersect(Range("D5:D32"), Target) Is Nothing Then If Target.Offset(, 1) <> "" Then Target = "" MsgBox "Уже есть ответ - НЕТ." Else If Target <> 1 Then MsgBox "Вводить можно только 1-цу." Target = "" End If End If End If If Not Application.Intersect(Range("E5:E32"), Target) Is Nothing Then If Target.Offset(, -1) <> "" Then Target = "" MsgBox "Уже есть ответ - ДА." Else If Target <> 0 Then MsgBox "Вводить можно только 0." Target = "" End If End If End If Application.EnableEvents = True End Sub
[/vba]
Код в модуль листа.
Только есть вопрос, зачем две колонки? Для усложнения проверки? В одной то, два ответа не сделаешь. Либо 0, либо 1. А СЧЕТЕСЛИ() посчитает и 1-цы и 0-ли. ЗЫ. ВО как. Посмотрел, 0-ли то и не считаются, тем более вводить в одну колонку D и 1 и 0 проще будет. И код проверки короче. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target = "" Then Exit Sub Application.EnableEvents = False If Not Application.Intersect(Range("D5:D32"), Target) Is Nothing Then If Target > 1 Then MsgBox "Вводить можно только 1-цу или 0." Target = "" End If End If Application.EnableEvents = True End Sub
А не проще проверять введённое значение и очищать ячейку, если оно не равно допустимому? Визуальный эффект будет такой же, как если заблокированы все клавиши, кроме 0 и 1.
А не проще проверять введённое значение и очищать ячейку, если оно не равно допустимому? Визуальный эффект будет такой же, как если заблокированы все клавиши, кроме 0 и 1.StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub 'If Target = "" Then Exit Sub Application.EnableEvents = False If Not Application.Intersect(Range("D5:D32"), Target) Is Nothing Then If Target <> 0 And Target <> 1 Then MsgBox "Вводить можно только 1-цу или 0." Target = "" End If End If Application.EnableEvents = True End Sub
[/vba]
Может так записать? [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub 'If Target = "" Then Exit Sub Application.EnableEvents = False If Not Application.Intersect(Range("D5:D32"), Target) Is Nothing Then If Target <> 0 And Target <> 1 Then MsgBox "Вводить можно только 1-цу или 0." Target = "" End If End If Application.EnableEvents = True End Sub
Не проще ли сделать, чтоб выбор в ячейке был только тот, что вы предложите и никакие макросы ненужны? Например как тут, форма для голосования.Ссылка удалена. Выкладывайте файлы сюда В данном случае использовано "за", "против", "воздержался", в вашем случае будет "1" или "0". Здесь, для ячеек С12:R365, использована "проверка данных" по списку $A$6:$A$8, т.е. подставляется выбор данных только тех, что находятся в ячейках А6, А7, А8, меняем значение ячеек, меняется и выбор. Надеюсь доходчиво объяснил.)) Отредактировал ваш файл как надо и выложил.
Не проще ли сделать, чтоб выбор в ячейке был только тот, что вы предложите и никакие макросы ненужны? Например как тут, форма для голосования.Ссылка удалена. Выкладывайте файлы сюда В данном случае использовано "за", "против", "воздержался", в вашем случае будет "1" или "0". Здесь, для ячеек С12:R365, использована "проверка данных" по списку $A$6:$A$8, т.е. подставляется выбор данных только тех, что находятся в ячейках А6, А7, А8, меняем значение ячеек, меняется и выбор. Надеюсь доходчиво объяснил.)) Отредактировал ваш файл как надо и выложил.IWI