я, вероятно, тормоз, но я вижу выше своей таблички-образца Вами добавленную таблицу с шестью столбцами, пробую там набирать, двойники вводятся, ничего не контролируется как мне правильно проверить? пробовал в 2007 и в 2003 Екселе.
я, вероятно, тормоз, но я вижу выше своей таблички-образца Вами добавленную таблицу с шестью столбцами, пробую там набирать, двойники вводятся, ничего не контролируется как мне правильно проверить? пробовал в 2007 и в 2003 Екселе.alex74
Я ничего не добавлял, эта табличка была в Вашем файле-примере 123 Вводите данные в Вашу табличку. В скрытом столбце - формула для условий, к столбцам "фамилия" и "дата" применил проверку ввода. Но наверное макрос нужно делать - при ручном вводе срабатывает, а если копируешь и вставляешь - не срабатывает. А может у меня комп или я сам глючу
Я ничего не добавлял, эта табличка была в Вашем файле-примере 123 Вводите данные в Вашу табличку. В скрытом столбце - формула для условий, к столбцам "фамилия" и "дата" применил проверку ввода. Но наверное макрос нужно делать - при ручном вводе срабатывает, а если копируешь и вставляешь - не срабатывает. А может у меня комп или я сам глючу _Igor_61
Конечно, на них же нужно условия распространить Протяните вниз желтый столбец, потом выделите какую-нибудь ячейку в диапазоне А3:А13, и посмотрите через меню "Данные" - "Проверка данных" что там написано, что за формула стоит, и так же в столбце "В". Вот это и нужно сначала распространить на ячейки ниже Вашей таблицы, а потом уже вводить данные. А заполнить можно так: выделите например А10:В10 (т.е. то, где проверка уже установлена) и протяните вниз, и потом с помощью выделения и Del очистите то, что автоматически заполнилось. И еще (из сообщения №7:
Цитата
наверное макрос нужно делать - при ручном вводе срабатывает, а если копируешь и вставляешь - не срабатывает. А может у меня комп или я сам глючу
Конечно, на них же нужно условия распространить Протяните вниз желтый столбец, потом выделите какую-нибудь ячейку в диапазоне А3:А13, и посмотрите через меню "Данные" - "Проверка данных" что там написано, что за формула стоит, и так же в столбце "В". Вот это и нужно сначала распространить на ячейки ниже Вашей таблицы, а потом уже вводить данные. А заполнить можно так: выделите например А10:В10 (т.е. то, где проверка уже установлена) и протяните вниз, и потом с помощью выделения и Del очистите то, что автоматически заполнилось. И еще (из сообщения №7:
Цитата
наверное макрос нужно делать - при ручном вводе срабатывает, а если копируешь и вставляешь - не срабатывает. А может у меня комп или я сам глючу
Добрый день. Если данные вносятся ручками, (а не копированием строк) то вот так будет работать [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 2 Then Exit Sub If Not IsDate(Target.Value) Then Exit Sub With Range("A3:A" & Target.Row - 1) Set fio = .Find(what:=Target.Offset(0, -1).Value) If Not fio Is Nothing Then fadr = fio.Address Do flag = (Target.Value - fio.Offset(0, 1).Value) > 1095 Set fio = .FindNext(fio) Loop While Not fio Is Nothing And fio.Address <> fadr If flag Then Exit Sub Else Rows(Target.Row).ClearContents End If End If End With End Sub
[/vba]
Добрый день. Если данные вносятся ручками, (а не копированием строк) то вот так будет работать [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 2 Then Exit Sub If Not IsDate(Target.Value) Then Exit Sub With Range("A3:A" & Target.Row - 1) Set fio = .Find(what:=Target.Offset(0, -1).Value) If Not fio Is Nothing Then fadr = fio.Address Do flag = (Target.Value - fio.Offset(0, 1).Value) > 1095 Set fio = .FindNext(fio) Loop While Not fio Is Nothing And fio.Address <> fadr If flag Then Exit Sub Else Rows(Target.Row).ClearContents End If End If End With End Sub
Если данные вносятся ручками, (а не копированием строк) то вот так будет работать
Ваш вариант работает, ввести дубль не позволяет - дубльФио и невернаяДата просто исчезают, можно ли вставить сообщение об ошибке? и у меня такой глупый вопрос: я открываю Ваш файл, но по Alt+F8 мне не видно вашего кода
Если данные вносятся ручками, (а не копированием строк) то вот так будет работать
Ваш вариант работает, ввести дубль не позволяет - дубльФио и невернаяДата просто исчезают, можно ли вставить сообщение об ошибке? и у меня такой глупый вопрос: я открываю Ваш файл, но по Alt+F8 мне не видно вашего кодаalex74
wbr Alex
Сообщение отредактировал alex74 - Среда, 04.10.2017, 15:26
добр день застрял на ровном месте. не понимаю почему оно то работает, то нет. в аттаче красным - не работающая проверка, хотя строчкой ниже видно что другое фио проверяется правильно
добр день застрял на ровном месте. не понимаю почему оно то работает, то нет. в аттаче красным - не работающая проверка, хотя строчкой ниже видно что другое фио проверяется правильноalex74
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 2 Then Exit Sub If Not IsDate(Target.Offset(0, -1)) Then Exit Sub With Range("B2:B" & Target.Row - 1) Set fio = .Find(what:=Target.Value) If Not fio Is Nothing Then fadr = fio.Address Do flag = (Target.Offset(0, -1).Value - fio.Offset(0, -1).Value) > 1825 Set fio = .FindNext(fio) Loop While Not fio Is Nothing And fio.Address <> fadr If flag Then Exit Sub Else Rows(Target.Row).ClearContents MsgBox "Такой товарищ нам не нужен!" End If End If End With End Sub
[/vba]
Проверяйте [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 2 Then Exit Sub If Not IsDate(Target.Offset(0, -1)) Then Exit Sub With Range("B2:B" & Target.Row - 1) Set fio = .Find(what:=Target.Value) If Not fio Is Nothing Then fadr = fio.Address Do flag = (Target.Offset(0, -1).Value - fio.Offset(0, -1).Value) > 1825 Set fio = .FindNext(fio) Loop While Not fio Is Nothing And fio.Address <> fadr If flag Then Exit Sub Else Rows(Target.Row).ClearContents MsgBox "Такой товарищ нам не нужен!" End If End If End With End Sub
отлично! работает. уже обнаружили лайфхак - если ввести дубликата с разницей более пяти лет), а потом в этой записи исправить дату на древнюю (уже нет 5лет разницы), то ругательства на недопустимость не будет. обьяснил чтобы так не делали. а вот если в книге несколько листов, то макрос нужно привязывать (по Alt+F11) к книге или к конкретному листу где он должен проверять данные?
отлично! работает. уже обнаружили лайфхак - если ввести дубликата с разницей более пяти лет), а потом в этой записи исправить дату на древнюю (уже нет 5лет разницы), то ругательства на недопустимость не будет. обьяснил чтобы так не делали. а вот если в книге несколько листов, то макрос нужно привязывать (по Alt+F11) к книге или к конкретному листу где он должен проверять данные?alex74
макрос работает на конкретном листе, при изменении значений в столбце В. Можно прописать в каждый лист. Или сделать отдельным модулем, а в каждом листе прописать обращаться за проверкой.
макрос работает на конкретном листе, при изменении значений в столбце В. Можно прописать в каждый лист. Или сделать отдельным модулем, а в каждом листе прописать обращаться за проверкой.sboy
Чтобы ручки-то шаловливые не сували куда не нужно - вообще запрещаем даже выделять дату, если есть лоси с котами [vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim d_ As Range, d0_ As Range Set d0_ = Intersect(Target, Range("A2").Resize(Rows.Count - 1)) If d0_ Is Nothing Then Exit Sub For Each d_ In d0_ If IsDate(d_) Then If d_.Offset(, 1) <> "" Then d_.Offset(, 1).Select Exit Sub End If End If Next d_ End Sub
Чтобы ручки-то шаловливые не сували куда не нужно - вообще запрещаем даже выделять дату, если есть лоси с котами [vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim d_ As Range, d0_ As Range Set d0_ = Intersect(Target, Range("A2").Resize(Rows.Count - 1)) If d0_ Is Nothing Then Exit Sub For Each d_ In d0_ If IsDate(d_) Then If d_.Offset(, 1) <> "" Then d_.Offset(, 1).Select Exit Sub End If End If Next d_ End Sub
Девушки такие девушки. Не знаю какой смайлик поставить -) или -(.
Проверка по дате им уже не поможет, тк нормально у них введены только 2016г и частично 15г, а более старые периоды в поле Дата занесены номера приказов, номера распоряжений и тп мусор вместо ДД.ММ.ГГГГ.
Слезно просят такое: после ввода Фио, вывести на экран найденные, уже существующие в таблице записи с этой Фио, далее девушки уже самостоятельно оценят нужно ли продолжить ввод или же отказаться.
Посыпаю голову пеплом и извиняюсь за неверно изначально сформулированный вопрос. Сорри.
Девушки такие девушки. Не знаю какой смайлик поставить -) или -(.
Проверка по дате им уже не поможет, тк нормально у них введены только 2016г и частично 15г, а более старые периоды в поле Дата занесены номера приказов, номера распоряжений и тп мусор вместо ДД.ММ.ГГГГ.
Слезно просят такое: после ввода Фио, вывести на экран найденные, уже существующие в таблице записи с этой Фио, далее девушки уже самостоятельно оценят нужно ли продолжить ввод или же отказаться.
Посыпаю голову пеплом и извиняюсь за неверно изначально сформулированный вопрос. Сорри.alex74
wbr Alex
Сообщение отредактировал alex74 - Четверг, 19.10.2017, 11:58