есть диапазон строк, для которого должен работать макрос (либо диапазон строк и столбцов, либо только строк и один столбец - зависит от сложности/возможности реализации)
если выделяем какую-либо ячейку в этом диапазоне, то в некоторой целевой ячейке (вне этого диапазона), получаем номер выделенной строки и каким-либо образом (например, изменением фона ячейки) подсвечиваем в этой строке ячейку, которая находится в определенном столбце.
на примере: есть список фамилий (ячеек) в столбик (которые и определяют диапазон строк) "кликаем" на одну из них (или любую на строке) в целевой ячейке получаем номер строки, а ячейка с фамилией временно меняет фон
ячейка, куда должен попадать ответ от макроса, выделена красным шрифтом в прилагаемом примере
как задать ограничения макросу по столбцам? т.е. чтобы на выделение реагировали ячейки только отпределённого диапазона столбцов?
p.s. необходим только один клик. Т.е. сам факт выделения ячейки без дополнительного клика по какой-либо кнопке с назначенным макросом
есть диапазон строк, для которого должен работать макрос (либо диапазон строк и столбцов, либо только строк и один столбец - зависит от сложности/возможности реализации)
если выделяем какую-либо ячейку в этом диапазоне, то в некоторой целевой ячейке (вне этого диапазона), получаем номер выделенной строки и каким-либо образом (например, изменением фона ячейки) подсвечиваем в этой строке ячейку, которая находится в определенном столбце.
на примере: есть список фамилий (ячеек) в столбик (которые и определяют диапазон строк) "кликаем" на одну из них (или любую на строке) в целевой ячейке получаем номер строки, а ячейка с фамилией временно меняет фон
ячейка, куда должен попадать ответ от макроса, выделена красным шрифтом в прилагаемом примере
как задать ограничения макросу по столбцам? т.е. чтобы на выделение реагировали ячейки только отпределённого диапазона столбцов?
p.s. необходим только один клик. Т.е. сам факт выделения ячейки без дополнительного клика по какой-либо кнопке с назначенным макросом
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("B1:C24")) Is Nothing Then Application.EnableEvents = False Range("C1:C24").Interior.ColorIndex = xlNone Range("R30") = Cells(Target.Row, 2) Cells(Target.Row, 3).Interior.Color = vbRed Application.EnableEvents = True End If End Sub
[/vba]
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("B1:C24")) Is Nothing Then Application.EnableEvents = False Range("C1:C24").Interior.ColorIndex = xlNone Range("R30") = Cells(Target.Row, 2) Cells(Target.Row, 3).Interior.Color = vbRed Application.EnableEvents = True End If End Sub
RAN, спасибо вставил на лист если листов много (12 шт., помесячно), но одинаковых, то надо вставлять на каждый лист?
он стирает фон всех ячеек а можно, чтобы фон сохранялся, у нужной ячейки изменялся (может как-то через условное форматирование это возможно, через условие)?
в принципе, можно хранить "исходные" цвета в ячейке напротив. Например, в столбце А. Брать от туда. какой командой можно это сделать?
Как можно сделать, чтобы все цвета ячеек выбранной строки сохранялись в соответствующих ячейках, например, 2-ой строки. Затем из каждого цвета вычиталось 10%, чтобы повысить конрастность и уменьшить яркость. Так мы выделим всю строку диапазона, на которой стоим. при "уходе" со строки, она восстанавливала бы свои исходные цвета из 2-ой строки. (я расширил в вашем примере диапазон столбцов с B:C до B:Y)
RAN, спасибо вставил на лист если листов много (12 шт., помесячно), но одинаковых, то надо вставлять на каждый лист?
он стирает фон всех ячеек а можно, чтобы фон сохранялся, у нужной ячейки изменялся (может как-то через условное форматирование это возможно, через условие)?
в принципе, можно хранить "исходные" цвета в ячейке напротив. Например, в столбце А. Брать от туда. какой командой можно это сделать?
Как можно сделать, чтобы все цвета ячеек выбранной строки сохранялись в соответствующих ячейках, например, 2-ой строки. Затем из каждого цвета вычиталось 10%, чтобы повысить конрастность и уменьшить яркость. Так мы выделим всю строку диапазона, на которой стоим. при "уходе" со строки, она восстанавливала бы свои исходные цвета из 2-ой строки. (я расширил в вашем примере диапазон столбцов с B:C до B:Y)карандаш
Сообщение отредактировал карандаш - Среда, 23.01.2013, 17:19
RAN, попробовал скорректировать код - не получилось.
давайте примем начальными условиями, что цвет ячейки слева равен цвету ячейки ФИО.
при выделении "целевой" ячейки с фамилией она теряет свой "нативный" цвет и становится, например, красной. после "потери фокуса" (когда фокус "ловит" другая ячейка, то она восстанавливает свой цвет за счет копирования цвета слева в вашем коде надо заменить "обесцвечивание" диапазона с фамилиями на копирование цвета заливки с соседней левой ячейки. как это можно было бы сделать?
(заодно и ячейку "R30" можно подкрасить в цвет соседней с "целевой" ячейки. Тоже не получилось сделать самостоятельно.)
может кто из гуру поможет, если RAN'a пока нет?
RAN, попробовал скорректировать код - не получилось.
давайте примем начальными условиями, что цвет ячейки слева равен цвету ячейки ФИО.
при выделении "целевой" ячейки с фамилией она теряет свой "нативный" цвет и становится, например, красной. после "потери фокуса" (когда фокус "ловит" другая ячейка, то она восстанавливает свой цвет за счет копирования цвета слева в вашем коде надо заменить "обесцвечивание" диапазона с фамилиями на копирование цвета заливки с соседней левой ячейки. как это можно было бы сделать?
(заодно и ячейку "R30" можно подкрасить в цвет соседней с "целевой" ячейки. Тоже не получилось сделать самостоятельно.)
может кто из гуру поможет, если RAN'a пока нет?карандаш
Сообщение отредактировал карандаш - Среда, 23.01.2013, 19:53
но фамилии так и не удается раскрасить красками из соседних ячеек
*** прим. что можно сделать, чтобы не закрывать файл и не открывать его заново после ошибки программы в VB? программа перестает работать впадает в кому или ступор
так хоть тупым перебором и методом научного тыка можно как-то нащупать решение
но фамилии так и не удается раскрасить красками из соседних ячеек
*** прим. что можно сделать, чтобы не закрывать файл и не открывать его заново после ошибки программы в VB? программа перестает работать впадает в кому или ступор
так хоть тупым перебором и методом научного тыка можно как-то нащупать решениекарандаш
Сообщение отредактировал карандаш - Среда, 23.01.2013, 22:45
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("B1:AH24")) Is Nothing Then Application.EnableEvents = False Range("C1:C24").Interior.ColorIndex = Range("Â1:Â24").Interior.ColorIndex Range("R30") = Cells(Target.Row, 2) 'Cells(Target.Row, 3).Interior.Color = vbRed Range("S30").Interior.Color = Cells(Target.Row, 3).Interior.Color Application.EnableEvents = True End If End Sub
[/vba]
RAN, у меня есть такая буква строчка
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("B1:AH24")) Is Nothing Then Application.EnableEvents = False Range("C1:C24").Interior.ColorIndex = Range("Â1:Â24").Interior.ColorIndex Range("R30") = Cells(Target.Row, 2) 'Cells(Target.Row, 3).Interior.Color = vbRed Range("S30").Interior.Color = Cells(Target.Row, 3).Interior.Color Application.EnableEvents = True End If End Sub
*** прим. что можно сделать, чтобы не закрывать файл и не открывать его заново после ошибки программы в VB? программа перестает работать впадает в кому или ступор
Кто спрашивал? Я ответил. Причем тут
Цитата (карандаш)
у меня есть такая буква строчка
Цитата (карандаш)
*** прим. что можно сделать, чтобы не закрывать файл и не открывать его заново после ошибки программы в VB? программа перестает работать впадает в кому или ступор
Ээээ, немного не понял. Найти в панели VBA кныпочку Reset, и нажать. А это Range("C1:C24").Interior.ColorIndex = Range("Â1:Â24").Interior.ColorIndex не работало, не работает, и работать не будет!
PS Правда, без выполнения макроса WW тоже не будет работать дальше.
Ээээ, немного не понял. Найти в панели VBA кныпочку Reset, и нажать. А это Range("C1:C24").Interior.ColorIndex = Range("Â1:Â24").Interior.ColorIndex не работало, не работает, и работать не будет!
PS Правда, без выполнения макроса WW тоже не будет работать дальше.RAN
Быть или не быть, вот в чем загвоздка!
Сообщение отредактировал RAN - Среда, 23.01.2013, 23:04
RAN, кнопку ресет нажимал - не помогает макрос сейчас пропишу и заведу под него большую красную кнопку
но...
цикл можно как-то изобразить? ведь диапазон известен просто тупо последовательно перекопировать цвета закраски с ячеек одного столбца на ячейки другого подскажите, как правильно сделать, чтобы работало?
RAN, кнопку ресет нажимал - не помогает макрос сейчас пропишу и заведу под него большую красную кнопку
но...
цикл можно как-то изобразить? ведь диапазон известен просто тупо последовательно перекопировать цвета закраски с ячеек одного столбца на ячейки другого подскажите, как правильно сделать, чтобы работало?карандаш
Очищаю постановку заключительной части задачи от шелухи
Имеем работающий код: [vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub ' проверяем, что фокус захватил единичную ячеку, а не диапазон If Not Intersect(Target, Range("B5:AH24")) Is Nothing Then ' проверяем нахождение фокуса в "целевом" диапазоне Application.EnableEvents = False ' Range("C5:C24").Interior.Color = Range("A5:A24").Interior.Color ' восстанавливаем цвета фона ячеек в третьей колонке путем копирования цвета из первой колонки поячеясто Cells(Target.Row, 3).Interior.Color = vbRed ' портим/подкрашиваем "целевую" ячейку в третьем столбце "целевой" строки Range("R30") = Cells(Target.Row, 2) ' копируем содержимое "целевой" ячеки в "индикаторную" ячейку вне диапазона Range("S30").Interior.Color = Cells(Target.Row, 3).Interior.Color ' копируем цвет фона "целевой" ячеки в "индикаторную" ячейку - типа отображается не только содержимое, но формат Application.EnableEvents = True End If End Sub
[/vba] который позволяет видеть, в какой строке мы находимся (данных/столбцов много, поэтому кликая на ячейку в диапазоне мы можем видеть, кому именно принадлежат данные) в колонке 2 находятся ФИО
не получается "восстановить" цвет фона нужен цикл переноса цветов закраски из нулевой колонки (которая фактически служит просто хранилищем цветов для ячеек ФИО) во вторую. цветом фона ФИО выделяются группы принадлежности ФИО
Очищаю постановку заключительной части задачи от шелухи
Имеем работающий код: [vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub ' проверяем, что фокус захватил единичную ячеку, а не диапазон If Not Intersect(Target, Range("B5:AH24")) Is Nothing Then ' проверяем нахождение фокуса в "целевом" диапазоне Application.EnableEvents = False ' Range("C5:C24").Interior.Color = Range("A5:A24").Interior.Color ' восстанавливаем цвета фона ячеек в третьей колонке путем копирования цвета из первой колонки поячеясто Cells(Target.Row, 3).Interior.Color = vbRed ' портим/подкрашиваем "целевую" ячейку в третьем столбце "целевой" строки Range("R30") = Cells(Target.Row, 2) ' копируем содержимое "целевой" ячеки в "индикаторную" ячейку вне диапазона Range("S30").Interior.Color = Cells(Target.Row, 3).Interior.Color ' копируем цвет фона "целевой" ячеки в "индикаторную" ячейку - типа отображается не только содержимое, но формат Application.EnableEvents = True End If End Sub
[/vba] который позволяет видеть, в какой строке мы находимся (данных/столбцов много, поэтому кликая на ячейку в диапазоне мы можем видеть, кому именно принадлежат данные) в колонке 2 находятся ФИО
не получается "восстановить" цвет фона нужен цикл переноса цветов закраски из нулевой колонки (которая фактически служит просто хранилищем цветов для ячеек ФИО) во вторую. цветом фона ФИО выделяются группы принадлежности ФИОкарандаш
Сообщение отредактировал карандаш - Четверг, 24.01.2013, 07:30
А что, если немного иначе подойти - вообще не убивать исходный цвет, а перекрашивать его УФом? В общем, посмотрите в файлике, может, подойдет. Да, сразу скажу, что условия задачи я не очень хорошо понял и, поэтому, может что-то и не совсем так сделал.
В двух словах код ставит пробел в столбце А той строки, которая выделена. Все остальное делает условное форматирование. В нем можно менять раскраску и диапазон для раскраски
А что, если немного иначе подойти - вообще не убивать исходный цвет, а перекрашивать его УФом? В общем, посмотрите в файлике, может, подойдет. Да, сразу скажу, что условия задачи я не очень хорошо понял и, поэтому, может что-то и не совсем так сделал.
В двух словах код ставит пробел в столбце А той строки, которая выделена. Все остальное делает условное форматирование. В нем можно менять раскраску и диапазон для раскраски_Boroda_
это практически то, что нужно! точнее, то что нужно "практически" - уже придирка
досадно, что непонятно, от куда берётся красный цвет выделения и вообще непонятно как это ЧУДО из двух строк работает
хотелось бы его заменить (образец брать из А1, например просто непонятно каким лучше выделять скорее всего белым, наверное, т.к. вся таблица цветная в принципе, и темнокрасный тоже хорошо, но тогда надо текст белым делать, иначе плохо черные буквы на красном видны
Цитата (_Boroda_)
условия задачи я не очень хорошо понял
файл с макетом работающей таблицы прилагаю
p.s. а можно "подсвечивать" все ячейки строки этого диапазона?
p.s. где прочитать почему и как такой компактный код работает? или можно в двух словах?
_Boroda_,
ахренеть !!!
это практически то, что нужно! точнее, то что нужно "практически" - уже придирка
досадно, что непонятно, от куда берётся красный цвет выделения и вообще непонятно как это ЧУДО из двух строк работает
хотелось бы его заменить (образец брать из А1, например просто непонятно каким лучше выделять скорее всего белым, наверное, т.к. вся таблица цветная в принципе, и темнокрасный тоже хорошо, но тогда надо текст белым делать, иначе плохо черные буквы на красном видны
Цитата (_Boroda_)
условия задачи я не очень хорошо понял
файл с макетом работающей таблицы прилагаю
p.s. а можно "подсвечивать" все ячейки строки этого диапазона?
p.s. где прочитать почему и как такой компактный код работает? или можно в двух словах?карандаш