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

Обмен опытом => Microsoft Excel => Тема начата: GWolf от 27.05.2021, 08:59

Название: Красим ячейку А - в ячейку Б, отметка.
Отправлено: GWolf от 27.05.2021, 08:59
Доброго дня, друзья!
Нашел на просторах Интернета много примеров, когда, например: в ячейку B2 вносим значение, при этом ячейка C2 становится зеленой. Но долго искал другую схему: ячейку B2 красим в зеленый цвет, при этом в ячейке C2 появляется значение, ну например: "<>".
Наконец нашел, но код, отслеживающий это действо, располагается в листе, что очень неудобно.
Подскажите, пожалуйста, возможно ли как-то реализовать эту схему, но с кодом следящим не из листа? Ну, там через классы или еще как? Я, к сожалению в классах пока полный нуб. Поэтому буду признателен любой помощи.
На скрепке, файлик, следящий по первому сценарию.
Название: Re: Красим ячейку А - в ячейку Б, отметка.
Отправлено: nilem от 27.05.2021, 20:31
GWolf, добрый вечер!
А почему не нравится, что код находится в модуле листа?
Вроде нормально все работает...
Название: Re: Красим ячейку А - в ячейку Б, отметка.
Отправлено: GWolf от 28.05.2021, 06:58
Доброго дня, уважаемый nilem! Спасибо что откликнулись.
Дело в том, что лист содержит некую таблицу с набором данных и кучей отметок и форматов настроенных пользователем. И когда сей лист приходится копировать в другую книгу. А копирую именно лист, а не данные или таблицу, что бы не сбивать настройки размеров столбцов и т.п., то кусок кода в листе, уже не соответствующий новой задаче вообщем то не нужен. А чистить его программно - не проще ли сразу его разместить, как я и описал в первом посте, т.е. вне листа?
Название: Re: Красим ячейку А - в ячейку Б, отметка.
Отправлено: Serge 007 от 28.05.2021, 09:03
GWolf, здравствуйте

Цитата: GWolf от 28.05.2021, 06:58...кусок кода в листе, уже не соответствующий новой задаче вообщем то не нужен. А чистить его программно - не проще ли сразу его разместить, как я и описал в первом посте, т.е. вне листа?
Не проще. Но вопрос в другом - зачем вообще что-то "чистить" в коде?
Название: Re: Красим ячейку А - в ячейку Б, отметка.
Отправлено: nilem от 28.05.2021, 10:01
Скопировать лист в книгу и сохранить ее (книгу) без поддержки макросов - не?
Или попробуйте разместить ваш код в модуле ЭтаКнига
Private Sub Workbook_SheetSelectionChange
только надо будет добавить условие, чтобы срабатывал на определенном листе.
Название: Re: Красим ячейку А - в ячейку Б, отметка.
Отправлено: GWolf от 28.05.2021, 18:53
Добрый вечер, друзья!
Спасибо что откликнулись.
Цитата: nilem от 28.05.2021, 10:01
Скопировать лист в книгу и сохранить ее (книгу) без поддержки макросов - не?
Это не вариант. В книгу, куда лист копируется, свои макросы и, привнесенные, ну совсем не к месту будут. И без поддержки, как сами понимаете, не выйдет.
А вот эту идею:
ЦитироватьИли попробуйте разместить ваш код в модуле ЭтаКнига
Private Sub Workbook_SheetSelectionChange
только надо будет добавить условие, чтобы срабатывал на определенном листе.
я попробовал реализовать. Вроде получилось. Вот только бы еще после выдачи сообщения о том что идентификатор уже установлен, курсор оставался на ячейке с крайним окрашиванием. Шо-то не могу допилить.
Пример реализации в файле.
Цитата: Serge 007 от 28.05.2021, 09:03
Не проще.
Согласен. Да и шо-то мне никак эти классы не даются ;))
Название: Re: Красим ячейку А - в ячейку Б, отметка.
Отправлено: Serge 007 от 31.05.2021, 09:27
Цитата: GWolf от 28.05.2021, 18:53...после выдачи сообщения о том что идентификатор уже установлен, курсор оставался на ячейке с крайним окрашиванием...
Не понял, о чём речь?
Название: Re: Красим ячейку А - в ячейку Б, отметка.
Отправлено: GWolf от 03.06.2021, 20:02
Цитата: Serge 007 от 31.05.2021, 09:27
Не понял, о чём речь?
Дело в том, что макрос срабатывает только при переходе на любую другую ячейку, отличную от окрашенной. Не соображу, как его вернуть по координатам окрашенной?
Название: Re: Красим ячейку А - в ячейку Б, отметка.
Отправлено: nilem от 08.06.2021, 23:23
возможно, это нужно было:
Function ChangeColor(Shh As Worksheet)
With Shh
    If .Range(myAddress).Interior.ColorIndex = myColor Then Exit Function
    nR = .Range(myAddress).Row
    If .Cells(nR, 2).Text <> "<>" Then
        .Cells(nR, 2) = "<>"
    Else
        With Application
            .EnableEvents = False
            .Range(myAddress).Activate
            .EnableEvents = True
        End With
        MsgBox "В этой строке (" & nR & ") уже установлен идентификатор.", vbCritical + vbOKOnly, ""
    End If
End With
End Function