Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как присвоить ячейке событие

248
19 декабря 2006 года
Dmitry2064
590 / / 06.12.2006
Как надо написать в макросе, чтобы при заполнении в текущем ряду 15-го (например) столбца (т.е. конкретной ячейки в текущем ряду), цвет всей строки (Fill) становился бы серым, а текст черным?
Ячейку я заполняю быстрой клавой "Ctrl+Sh+;".

Спасибо.
405
20 декабря 2006 года
Dmitrii
554 / / 16.12.2004
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 15 Then
    If Target.Value <> "" Then
        With Rows(Target.Row)
            .Font.ColorIndex = 1
            .Interior.ColorIndex = 15
            .Interior.Pattern = xlSolid
        End With
    End If
End If
End Sub

Этот код надо разместить в модуле кода того рабочего листа, на котором Вам нужно выполнить описанные действия.
248
20 декабря 2006 года
Dmitry2064
590 / / 06.12.2006
Прошу прощения за тупость. А что значит "в модуле кода раб. листа"? У меня просто пара макросов под именами Макрос1-Макрос3. Их список вызывается по Alt-F8. Все. Больше никаких специальных кодов рабочего листа нет. На моем листе не выполняется никакая процедура-программа (ничего не пересчитывается и не вычисляется). Просто надо, что бы заполнив нужную колонку, данная строка становилась бы серой. Это будет обозначать, что по данной строке работа закончена (данный документ готов). Т.е. мой рабочий лист выполняет роль памятки с указанием времени прохождения документа по этапам обработки (типа "взят на верстку", "распечатан", "внесена правка", "сдан в тираж"). И вот когда я заполняю ячейку "сдан в тираж", вся строка должна стать серой.

Еще раз прошу прощения за возможную тупость.:o
405
21 декабря 2006 года
Dmitrii
554 / / 16.12.2004
Цитата: Dmitry2064
А что значит "в модуле кода раб. листа"?


Всё очень просто.
1) Каждый рабочий лист книги - это объект. Кроме рабочих листов книга может содержать и другие объекты, например, листы диаграмм, формы...
2) За каждым объектом книги закреплён специальный модуль для размещения кодов макросов, обрабатывающих события этого объекта.
3) Все объекты и их модули кода входят в состав VB-проекта книги.

Добраться до модуля кода рабочего листа можно так:
- нажать Alt-F11 (в левом верхнем углу, сразу под панелью инструментов, будет отображаться дерево объектов VB-проекта книги);
- указать "мышью" на имя нужного объекта и дважды щёлкнуть левой кнопкой (откроется окно модуля кода этого объекта).
Остаётся вставить приведённый мной пример кода в этот модуль.

Цитата: Dmitry2064
На моем листе не выполняется никакая процедура-программа (ничего не пересчитывается и не вычисляется).


Изменение содержимого ячейки (хоть вставка, хоть удаление, хоть редактирование) - это событие, объекта типа "Рабочий лист" ("Worksheet"). Название события - "Change". Оно регистрируется приложением автоматически. Если в модуль кода рабочего листа вставить процедуру обработки этого события, то можно заставить Excel выполнять при изменении содержимого ячейки те или иные действия.

Цитата: Dmitry2064
У меня просто пара макросов под именами Макрос1-Макрос3. Их список вызывается по Alt-F8.


Код обработки события рабочего листа в этом списке не отображается. Следовательно, вручную вызвать его для исполнения нельзя. Но в этом и нет необходимости. Как уже сказано, он будет активирован автоматически.

248
21 декабря 2006 года
Dmitry2064
590 / / 06.12.2006
Спасибо за терпеливое объяснение. Про модули понятно (и где сидят, и к чему относятся).
Код разместил в модуле листа.
Но после вставки времени в нужный столбец ничего не меняется. Может надо указать, что при наступлении события в этиой ячейке надо то-то и то-то?
И на строке Worksheet_Change(ByVal Target As Range) не вызывается помощь. Т.е. Help не знает таких слов ;)
248
21 декабря 2006 года
Dmitry2064
590 / / 06.12.2006
Получилось. Сначала этот код находился в Модуле2. А я его скопировал именно в модуль листа (сразу не сообразил), на котором это должно исполняться. И заработало.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог