Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2011, 11:24   #1
geoandpor
Новичок
Джуниор
 
Регистрация: 02.03.2011
Сообщений: 3
По умолчанию WorksheetChange Event

Помогите, пожалуйста!
Впервые пытаюсь создать макрос и немного не получается.
Очень буду благодарен за помощь.

Цель макроса - автоматически выделять и окрашивать строку таблицы в определенный цвет по значению активной ячейки строки (она крайняя правая).

То, что получилось работает несколько кривовато.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target1 As Range)
Worksheets("Main").Activate

If ActiveCell.Value = 1 Then
Set Target1 = Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, ActiveCell.Column))
Target1.Interior.Color = RGB(226, 0, 0)
Target1.Borders.Color = RGB(194, 194, 194)
Else
If ActiveCell.Value = 2 Then
Set Target1 = Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, ActiveCell.Column))
Target1.Interior.Color = RGB(27, 169, 82)
Target1.Borders.Color = RGB(194, 194, 194)
Else
If ActiveCell.Value = 3 Then
Set Target1 = Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, ActiveCell.Column))
Target1.Interior.Color = RGB(255, 192, 0)
Target1.Borders.Color = RGB(194, 194, 194)
Else
Set Target1 = Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, ActiveCell.Column))
Target1.Interior.Color = RGB(255, 255, 255)
Target1.Borders.Color = RGB(194, 194, 194)

End If
End If
End If

MsgBox "You just changed " & Target1.Address

End Sub
geoandpor вне форума Ответить с цитированием
Старый 02.03.2011, 12:37   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

аналогичная тема была и решения были.
видите-ли закрасить - не проблема. проблема в том, что когда фокус перемещается на другую строку, старой строке необходимо вернуть первоначальное оформление (не оставлять же ее окрашеной).
поищите по форуму, было
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 02.03.2011, 12:38   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Да уж, в макросе много лишнего...

код можно сократить в несколько раз, но, увы, я не смог понять, что должен делать макрос...

Зачем при изменении ячейки на ЛЮБОМ листе активировать лист Main?
Разве неважно, в каком столбце произошло изменения значения ячейки?

Прикрепите пример файла - и на его примере своими словами разъясните, что и как должно работать.
А код мы и сами придумаем.

Да и вообще - зачем макрос, если есть условное форматирование?
EducatedFool вне форума Ответить с цитированием
Старый 02.03.2011, 13:31   #4
geoandpor
Новичок
Джуниор
 
Регистрация: 02.03.2011
Сообщений: 3
По умолчанию WorkSheet Change

Спасибо большое за отклик!
Высылаю файл.

Условное форматирование в данном случае не предоставляет все возможности для форматирования.

<Зачем при изменении ячейки на ЛЮБОМ листе активировать лист Main?
Наверное, можно удалить. Это мой первый опыт.

<Разве неважно, в каком столбце произошло изменения значения ячейки?
Да, важно, но не смог задать это условие

С уважением,
Вложения
Тип файла: zip TEMPLATE E-NET.zip (13.4 Кб, 10 просмотров)
geoandpor вне форума Ответить с цитированием
Старый 02.03.2011, 13:57   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
словное форматирование в данном случае не предоставляет все возможности для форматирования
Неужели?
Каких возможностей в УФ вам не хватает?
EducatedFool вне форума Ответить с цитированием
Старый 02.03.2011, 14:12   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Поместите этот код в МОДУЛЬ ЛИСТА:

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub    ' если изменилось более одной ячейки
    Select Case Target.Value ' в зависимости от значения изменённой ячейки
        Case 1: InteriorColor = RGB(226, 0, 0): BordersColor = RGB(194, 194, 194)
        Case 2, 3, 6: InteriorColor = RGB(27, 169, 82): BordersColor = RGB(194, 194, 194)
        Case 4: InteriorColor = RGB(226, 0, 0): BordersColor = RGB(194, 194, 194)
        Case 8 To 11, 19: InteriorColor = RGB(255, 192, 0): BordersColor = RGB(194, 194, 194)
        Case Is > 38: InteriorColor = RGB(226, 0, 0): BordersColor = RGB(194, 194, 194)
        Case Else: InteriorColor = RGB(226, 0, 0): BordersColor = RGB(194, 194, 194)
    End Select
    ' перекрашиваем ячейки
    Intersect(Target.EntireRow, [a:j]).Interior.Color = InteriorColor
    Intersect(Target.EntireRow, [a:j]).Borders.Color = BordersColor
End Sub
Пример в файле: http://excelvba.ru/XL_Files/Sample__...__16-13-00.zip
EducatedFool вне форума Ответить с цитированием
Старый 02.03.2011, 16:50   #7
geoandpor
Новичок
Джуниор
 
Регистрация: 02.03.2011
Сообщений: 3
По умолчанию

Здорово! Огромное Вам спасибо.
Всего наилучшего!
geoandpor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Event на класс JAD! Общие вопросы по Java, Java SE, Kotlin 1 18.10.2010 11:56
Event... MyLastHit Общие вопросы Delphi 5 31.07.2010 01:35
Очистка стека event-ов Ivan_32 JavaScript, Ajax 0 06.02.2010 01:48
Объект события Event Gerzs Общие вопросы Delphi 0 01.11.2009 10:08
Event для TextField goog Общие вопросы по Java, Java SE, Kotlin 0 15.03.2009 00:17