Как изменить цвет заливки строки по щелчку мыши

Автор FESH66, 08.02.2011, 22:15

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

FESH66

Собственно и весь вопрос. Надо изменить цвет строки, например на красный, при щелчке мышью по номеру строки и вернуть первоначальное состояние при повторном щелчке.

_Boroda_

#1
В модуль листа такой макрос
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = Columns.Count Then
   If Target.Interior.ColorIndex = 3 Then
       Target.Interior.ColorIndex = 0
   Else: Target.Interior.ColorIndex = 3
   End If
End If
End Sub



К сообщению уважаемого KuklP ниже:
согласен, так короче. Можно еще короче
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count = Columns.Count Then
        Target.Interior.ColorIndex = (Target.Interior.ColorIndex <> 3) * -3
    End If
End Sub
Скажи мне, кудесник, любимец ба'гов...



Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995

kuklp

С позволения уважаемого Александра, чуть сократим код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count = Columns.Count Then
        Target.Interior.ColorIndex = Abs((Target.Interior.ColorIndex <> 3)) * 3
    End If
End Sub
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

FESH66

#3
Спасибо большое! А как сделать так, что б данная процедура  работала в любой открытой книге и на любом листе? Или же всегда надо будет копировать макрос в модуль листа? И ограничить количество выделяемых колонок, скажем, десятью? Проститите за ламерские вопросы :-[

GWolf

Цитата: FESH66 от 09.02.2011, 06:23
Спасибо большое! А как сделать так, что б данная процедура  работала в любой открытой книге и на любом листе? Или же всегда надо будет копировать макрос в модуль листа? И ограничить количество выделяемых колонок, скажем, десятью? Проститите за ламерские вопросы :-[

Доброго дня!
В открытой с данным макросом книге, но на любом ее листе и при выделении десяти колонок:

В модуль "Эта Книга" пишем

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Columns.Count = 10 Then
        Target.Interior.ColorIndex = Abs((Target.Interior.ColorIndex <> 3)) * 3
    End If
End Sub

Запуск в любой книге - разместить макрос в книге Personal.xls (не проверял).
Путей к вершине - множество. Этот один из многих!

Alex_ST

Всё это, конечно, элегантно и коротко (особенно - метод определения, что кликнули по номерочку строки - СУПЕР), но одно из требований задания не удовлетворяется: при повторном клике по строке старая заливка ячеек не восстанавливается. А если она ещё и разная у ячеек, то это вообще кирдык: не запоминать же в массиве исходный цвет каждой ячейки в строке... :D
С уважением, Алексей

FESH66

2Alex_ST Нет, все работает и цвет меняет и возвращает исходный цвет(т.е. без заливки) даже если строка была, к примеру, зеленого цвета.

2GWolf К сожалению, Ваш код не работает, я так уже пробывал... Стоит вернуть строку

"If Target.Columns.Count = 10 Then"

к исходному

"If Target.Columns.Count = Columns.Count Then"  выделяется строка целиком на любом листе.

GWolf

Цитата: FESH66 от 09.02.2011, 12:49
...
2GWolf К сожалению, Ваш код не работает, я так уже пробывал... Стоит вернуть строку

"If Target.Columns.Count = 10 Then"

к исходному

"If Target.Columns.Count = Columns.Count Then"  выделяется строка целиком на любом листе.

Гм, обращаю Ваше внимание что в моем варианте код будет срабатывать, если выделены ДЕСЯТЬ ячеек строки!
Путей к вершине - множество. Этот один из многих!

FESH66

2GWolf Ааа, вон оно как... Это не то, что мне нужно.
Исходные данные:
Есть какая-то таблица состоящая из постоянного количества столбцов и переменного количества строк.
Задача выбрать определенные строки, (не факт, что они идут подряд) и скопировать на другой лист выбранные строки (цвет это как признак того , что нужная строка не пропущена) для дальнейшей обработки... В принципе можно и всю строку помечать, ничего страшного, но как-то не аккуратненько  ::)

GWolf

ну так и в чем проблема?
Если Ваша таблица из десяти столбцов, то недоконца выделенная строка - это еще один уровень контроля внимательности пользователя.
Ведь выделение отменяется лишь при повторном выделении ТОЙ ЖЕ строки!

Путей к вершине - множество. Этот один из многих!

kuklp

А Вы бы форум почитали. В соседней теме:https://forum.msexcel.ru/microsoft_excel/makros_perenosa_dannyh_iz_odnogo_fayla_v_drugoy-t4801.0.html Алексей выложил макрос по переносу строк. И не надо танцев с бубнами.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

FESH66

Цитата: GWolf от 09.02.2011, 13:34
ну так и в чем проблема?
Если Ваша таблица из десяти столбцов, то недоконца выделенная строка - это еще один уровень контроля внимательности пользователя.
Ведь выделение отменяется лишь при повторном выделении ТОЙ ЖЕ строки!

Проблем нет. Не до конца выделенная строка - это просто замечательно. Но у меня выделяются ВСЕ строки (сколько их там -  64К?) 10ти колонок. Или я что-то не то делаю.

2KuklP
Почитаю канешна... Я только вчера зарегистрировался на этом форуме, до этого и не знал о его существованиии и не успел ознакомится с этой кладезью макрописатетельской мудрости.
Извините, что отвлек... ;)

Тему можно прикрыть, раз есть та, которая мне, кажись, и нужна

GWolf

to KukIP: Никакие это не танцы, всего лишь ВАРИАНТЫ решения задач. Согласен, что глубина проработки зависит от подготовленности решающего. Но! Зачем же тогда форум надобен был бы. Выставили в сети "Я РЕШАЮ ВСЕ!" и решали бы все задачи.  ;)

А ссылку Вами данную я посмотрел и ... скопировал ВСЮ тему. - Как учебник. СПАСИБО ребята!

to FESH66: Поздравляю от всего сообщества с открытием НАС! Обращайтесь, поможем чем сможем. Удачи!
Путей к вершине - множество. Этот один из многих!

kuklp

Цитата: GWolf от 09.02.2011, 14:29
to KukIP: Никакие это не танцы, всего лишь ВАРИАНТЫ решения задач. Согласен, что глубина проработки зависит от подготовленности решающего. Но! Зачем же тогда форум надобен был бы. Выставили в сети "Я РЕШАЮ ВСЕ!" и решали бы все задачи.  ;)
Про танцы я написал к тому, что нет смысла пачкать таблицу заливками(а потом же это назад в божеский вид приводить надо будет), если есть более короткий и эффективный способ. Никто же не ходит в ближайший гастроном через соседнюю область:-) Никак не хотел задеть Вас своим высказыванием.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Wasilic

Break!, ребята! Мне однажны тАк написали.
Цитата: FESH66 от 08.02.2011, 22:15
Собственно и весь вопрос. Надо изменить цвет строки, например на красный, при щелчке мышью по номеру строки и вернуть первоначальное состояние при повторном щелчке.
В том то и дело, что FESH66 не пояснил, для чего ему это нужно. Оказывается:
ЦитироватьЕсть какая-то таблица состоящая из постоянного количества столбцов и переменного количества строк. Задача выбрать определенные строки, (не факт, что они идут подряд) и скопировать на другой лист выбранные строки (цвет это как признак того , что нужная строка не пропущена) для дальнейшей обработки...
То FESH66.  А почему сразу не описать задачу до конца? Возможно, были бы сразу предложены другие варианты решения Вашей задачи. Ну или конечное решение таким же образом. И не было бы подобных разборок.
Лично я подумал, что этот вопрос не серьезный и задан так, на всякий случай, а вдруг пригодится.  :)
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.