Профессиональные приемы работы в Microsoft Excel

Обмен опытом => Microsoft Excel => Тема начата: pkojuhoff от 19.06.2018, 16:25

Название: Ввод данных с определенными условиями
Отправлено: pkojuhoff от 19.06.2018, 16:25
Добрый день! Коллеги, создал макрос, если нажимаем кнопку "ДА", то при внесении уникального номера, вся строка окрашивается в зеленый цвет, при нажатии клавиши "НЕТ", строка окрашивается в красный цвет.
Теперь получилась проблема, при внесении повторно уникального номера нет понятия проходил ли он или нет.
Подскажите, как сделать таким образом чтоб при вводе данных, столбец DZ, при повторяющемся значении (только строки залитые зеленым цветом) при нажатии кнопки "ДА", выдавал ошибку что такой уникальный номер уже существует. При нажатии кнопки "НЕТ", все работало как и ранее.

Я так понимаю нужен способ описать на VBA диапазон "весь UsedRange за исключением указанных ячеек", в данном случае чтоб искал уникальное значение в колонке DZ b залитой зеленым цветом, и если оно есть в зеленой заливке, чтоб сразу выдавал: "MsgBox("ДАННЫЙ УНИКАЛЬНЫЙ НОМЕР НАРЯДА УЖЕ СУЩЕСТВУЕТ!! Продолжить составление реестра?", vbYesNo + vbCritical + vbDefaultButton2)", и принажатии да продолжаем работу, при нажатии нет макрос останавливается.
Спасайте!
Название: Re: Ввод данных с определенными условиями
Отправлено: boa от 19.06.2018, 22:55
Где-то подобную тему вы уже открывали...
Согласно правилам всех форумов вы должны указывать ссылки на однотипные темы.

Ваш макрос содержит множество противоречий и мусора, с которыми ни кто не захочет разбираться. Киллометр а-бы-как написанного кода, который можно сжать до десятка строк...
Лично я бы его полностью переписал, но если бы вы смогли сформулировать более конкретно "что надо", типа есть "это", а надо "это" , и лучше это показать в файле, - "было" - "надо", то быстрее бы нашелся помошник, ведь, в принципе, на всех форумах помогают одни и те же люди, просто ваша формулировка вопроса отталкивает от помощи.
Сконцентрируйтесь на главном!
"входные данные" - "алгоритм обработки" - "результат"
Название: Re: Ввод данных с определенными условиями
Отправлено: pkojuhoff от 20.06.2018, 08:43
Простыми словами.

Приходит файл изначально все строки в белой заливки. Это наряды переданные нам за неделю.
Монтажники мне несут наряды в печатной форме отработанные и не отработанные. Вот у каждого наряда есть уникальный номер.
Сначала я проверяю отработанные наряды и в MSGBOX вношу уникальный номер  и строка окрашивается в зеленый цвет.
Потом проверяю не отработанные и строка окрашивается в красный цвет.
Но бывают хитрые монтажники они два раза один и тот же наряд подают на оплату мне, и я им дважды плачу за один и тот же наряд.
Вот мне надо те наряды которые уже я вносил (то есть они зеленые уже стали), чтоб выдавало ошибку, что такой наряд уже проходил.

Можно сделать так чтоб при окраске в зелёный цвет, проверка уникального номера была по реестру. Если в реестре есть такой номер, то выдаёт ошибку, что наряд проходил. При окраске в красный, чтоб такая проверка не проходила. Так как наряд может быть выполнен в другой день и чтоб он окрасился в зелёный и записался в реестр. Можно так закрутить?
Название: Re: Ввод данных с определенными условиями
Отправлено: boa от 20.06.2018, 11:28
Добрый день,
в Module2 мой вариант макроса
Название: Re: Ввод данных с определенными условиями
Отправлено: pkojuhoff от 20.06.2018, 17:34
Ну это поиск ячейки, а мне надо чтоб при использования макроса, если вводишь уникальный номер, чтоб перед тем как окрасить строку в зеленый цвет, проходил ли такой номер в реестре. И если в реестре такой номер есть, то выпадала ошибка.
Название: Re: Ввод данных с определенными условиями
Отправлено: pkojuhoff от 20.06.2018, 18:02
Разобрался, на листе "реестр" запретил ввод повторных данных.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Columns("A")) Is Nothing And Target.Count = 1 Then
    Dim iCl As Range
    On Error Resume Next
    Application.EnableEvents = False
    Set iCl = Columns("A").Find(Target.Value)
    If Not iCl Is Nothing And iCl.Address <> Target.Address Then
        MsgBox "Äàííûå ïî íàðÿäó: '" & Target.Value & "' â Îò÷¸òå óæå èìåþòñÿ!", vbCritical
        Target.Value = Empty
    End If
End If
Application.EnableEvents = True
End Sub

Всем спасибо!
Название: Re: Ввод данных с определенными условиями
Отправлено: boa от 20.06.2018, 21:49
Логика макроса такова, что если ячейка была окрашена в зеленый, т.е. была добавлена в реестр, то она не может попасть в реестр повторно, кроме как если вы сами ее ручками не добавите.