powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / WorksheetChange Event
4 сообщений из 4, страница 1 из 1
WorksheetChange Event
    #37143558
geoandpor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, пожалуйста!
Впервые пытаюсь создать макрос и немного не получается.
Очень буду благодарен за помощь.

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

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
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
...
Рейтинг: 0 / 0
WorksheetChange Event
    #37143650
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: geoandpor
> Цель макроса - автоматически выделять и окрашивать строку таблицы в определенный цвет по значению активной ячейки
> строки (она крайняя правая).

А зачем для этого макрос?
Бордер у всех одинаком, ставь сразу. Потом закрашивай все ячейки цветом из последнего Else. Потом идешь в меню
Формат->Условное форматирование и на появившейся форме прописываешь три условия. Потом выделяешь ячейку с условным
форматированием, и "кисточкой" копируешь формат на всю таблицу. И получаешь все без макросов вообще.

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

В чем кривость заключается?

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

Зачем активировать книгу в которой работаешь сейчас?

> If ActiveCell.Value = 1 Then

Target1 - это параметер, в который передается изменяющийся Range, а ты его переприсваиваешь. Заведи себе свою
переменную для этих целей

И сделай его читаемым, не жалей отступов:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
If ActiveCell.Value =  1  Then
    Target1.Interior.Color = RGB( 226 ,  0 ,  0 )
Else
    If ActiveCell.Value =  2  Then
        Target1.Interior.Color = RGB( 27 ,  169 ,  82 )
    Else
        If ActiveCell.Value =  3  Then
            Target1.Interior.Color = RGB( 255 ,  192 ,  0 )
        Else
            Target1.Interior.Color = RGB( 255 ,  255 ,  255 )
        End If
    End If
End If

для наглядности можно поменять на select case
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Select Case ActiveCell.Value
Case  1 
    Target1.Interior.Color = RGB( 226 ,  0 ,  0 )
Case  2 
    Target1.Interior.Color = RGB( 27 ,  169 ,  82 )
Case  3 
    Target1.Interior.Color = RGB( 255 ,  192 ,  0 )
Case Else
    Target1.Interior.Color = RGB( 255 ,  255 ,  255 )
End Select

> MsgBox "You just changed " & Target1.Address

А зачем сообщение пользователю?

> К сообщению приложен файл (TEMPLATE E-NET. xlsm ): cкачать. Размер - 19Kb

У меня нет офиса старше 2003-ей версии :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
WorksheetChange Event
    #37144019
geoandpor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, Игорь,
Большое спасибо за отклик!

Условным форматированием не смог обойтись - не получается скопировать формат на все строки - именно строки необходимо окрашивать.

А кривость заключается в том, что окрашивается другая строка, т.е. та куда попадает курсор после нажатия Enter. Думаю, что происходят несколько измений на листе.

Messagebox для меня, чтобы мне видеть где произошли изменения.

Спасибо еще раз.
...
Рейтинг: 0 / 0
WorksheetChange Event
    #37144212
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
geoandporУсловным форматированием не смог обойтись - не получается скопировать формат на все строки - именно строки необходимо окрашивать.
Это просто. Там прописывается формула с абсолютной адресацией, тебе нужно убрать знак доллара($) после имени столбца. Вообщем посмотри в моем варианте как я написал формулу

geoandporА кривость заключается в том, что окрашивается другая строка, т.е. та куда попадает курсор после нажатия Enter.
Это потому, что ты оперируешь ActiveCell, а активной ячейкой становится другая. поэтому все вычисления производятся для неё. Тебе нужно оперировать параметром, который передается в событие - Target. Именно Target содержит изменяемую ячейку :)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / WorksheetChange Event
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]