Новости:

Теперь на форум можно залогиниться / зарегистрироваться с помощью ВКонтакте. Уже существующие пользователи могут связать свою учетную запись с аккаунтом ВКонтакте одним кликом в профиле пользователя http://forum.msexcel.ru/index.php?action=profile;area=account

Главное меню

Красим ячейку А - в ячейку Б, отметка.

Автор GWolf, 27.05.2021, 08:59

« назад - далее »

GWolf

Доброго дня, друзья!
Нашел на просторах Интернета много примеров, когда, например: в ячейку B2 вносим значение, при этом ячейка C2 становится зеленой. Но долго искал другую схему: ячейку B2 красим в зеленый цвет, при этом в ячейке C2 появляется значение, ну например: "<>".
Наконец нашел, но код, отслеживающий это действо, располагается в листе, что очень неудобно.
Подскажите, пожалуйста, возможно ли как-то реализовать эту схему, но с кодом следящим не из листа? Ну, там через классы или еще как? Я, к сожалению в классах пока полный нуб. Поэтому буду признателен любой помощи.
На скрепке, файлик, следящий по первому сценарию.
Путей к вершине - множество. Этот один из многих!

nilem

GWolf, добрый вечер!
А почему не нравится, что код находится в модуле листа?
Вроде нормально все работает...

GWolf

Доброго дня, уважаемый nilem! Спасибо что откликнулись.
Дело в том, что лист содержит некую таблицу с набором данных и кучей отметок и форматов настроенных пользователем. И когда сей лист приходится копировать в другую книгу. А копирую именно лист, а не данные или таблицу, что бы не сбивать настройки размеров столбцов и т.п., то кусок кода в листе, уже не соответствующий новой задаче вообщем то не нужен. А чистить его программно - не проще ли сразу его разместить, как я и описал в первом посте, т.е. вне листа?
Путей к вершине - множество. Этот один из многих!

Serge 007

GWolf, здравствуйте

Цитата: GWolf от 28.05.2021, 06:58...кусок кода в листе, уже не соответствующий новой задаче вообщем то не нужен. А чистить его программно - не проще ли сразу его разместить, как я и описал в первом посте, т.е. вне листа?
Не проще. Но вопрос в другом - зачем вообще что-то "чистить" в коде?
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

nilem

Скопировать лист в книгу и сохранить ее (книгу) без поддержки макросов - не?
Или попробуйте разместить ваш код в модуле ЭтаКнига
Private Sub Workbook_SheetSelectionChange
только надо будет добавить условие, чтобы срабатывал на определенном листе.

GWolf

Добрый вечер, друзья!
Спасибо что откликнулись.
Цитата: nilem от 28.05.2021, 10:01
Скопировать лист в книгу и сохранить ее (книгу) без поддержки макросов - не?
Это не вариант. В книгу, куда лист копируется, свои макросы и, привнесенные, ну совсем не к месту будут. И без поддержки, как сами понимаете, не выйдет.
А вот эту идею:
ЦитироватьИли попробуйте разместить ваш код в модуле ЭтаКнига
Private Sub Workbook_SheetSelectionChange
только надо будет добавить условие, чтобы срабатывал на определенном листе.
я попробовал реализовать. Вроде получилось. Вот только бы еще после выдачи сообщения о том что идентификатор уже установлен, курсор оставался на ячейке с крайним окрашиванием. Шо-то не могу допилить.
Пример реализации в файле.
Цитата: Serge 007 от 28.05.2021, 09:03
Не проще.
Согласен. Да и шо-то мне никак эти классы не даются ;))
Путей к вершине - множество. Этот один из многих!

Serge 007

Цитата: GWolf от 28.05.2021, 18:53...после выдачи сообщения о том что идентификатор уже установлен, курсор оставался на ячейке с крайним окрашиванием...
Не понял, о чём речь?
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

GWolf

#7
Цитата: Serge 007 от 31.05.2021, 09:27
Не понял, о чём речь?
Дело в том, что макрос срабатывает только при переходе на любую другую ячейку, отличную от окрашенной. Не соображу, как его вернуть по координатам окрашенной?
Путей к вершине - множество. Этот один из многих!

nilem

возможно, это нужно было:
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