Страницы: 1 2 След.
RSS
Выделение строк цветом
 
Уважаемые форумчане.  
Есть программы выделения строк цветом  
 
Код:  
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
Cells.Interior.ColorIndex = xlNone  
 
With Target.EntireRow.Interior  
.ColorIndex = 37  
.Pattern = xlGray25  
.PatternColorIndex = 24  
End With  
End Sub  
или  
 
Код:  
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
If Target.Cells.Count <= 2500 Then  
' Проверка на количество ячеек. Слишком большое количество  
' выделенных ячеек замедляет работу, т.к. при выполнении макроса  
' определяется адрес каждой выделенной ячейки.  
ActiveSheet.Cells.FormatConditions.Delete  
Dim RSMin As Integer  
Dim CSMin As Integer  
Dim RSMax As Integer  
Dim CSMax As Integer  
' ---------начало блока------------  
For Each Target In Selection.Cells  
If RSMin = 0 Then RSMin = Target.Row  
If CSMin = 0 Then CSMin = Target.Column  
If Target.Row < RSMin Then  
RSMin = Target.Row  
ElseIf Target.Row > RSMax Then  
RSMax = Target.Row  
End If  
If Target.Column < CSMin Then  
CSMin = Target.Column  
ElseIf Target.Column > CSMax Then  
CSMax = Target.Column  
End If  
Next  
'--------конец блока--------------  
' определяются максимальные и минимальные  
' срока и столбец выделенного блока  
'--------начало блока-------------  
With Range(Cells(RSMin, 1), Cells(RSMax, 256))  
.FormatConditions.Add Type:=xlExpression, Formula1:="=1"  
.FormatConditions(1).Interior.ColorIndex = 40  
End With  
'--------конец блока---------------  
' выделяются сроки выделенного диапазона  
'--------начало блока---------------  
'With Range(Cells(1, CSMin), Cells(65000, CSMax))  
'.FormatConditions.Delete  
'.FormatConditions.Add Type:=xlExpression, Formula1:="=1"  
'.FormatConditions(1).Interior.ColorIndex = 36  
'End With  
'--------конец блока---------------  
' выделяются столбцы выделенного диапазона  
'--------начало блока---------------  
With Range(Cells(RSMin, CSMin), Cells(RSMax, CSMax))  
.FormatConditions.Delete  
.FormatConditions.Add Type:=xlExpression, Formula1:="=1"  
.FormatConditions(1).Interior.ColorIndex = 34  
End With  
'--------конец блока---------------  
' выделяется выделенный диапазон  
Else  
End If  
End Sub  
При этом изменяется цвет (как свойство) ячейки. И не работает режим копирование/вставка.  
 
Возможны ли такие действия:    
1. Кликаем на ячейку (активация) .  
2. "Подсвечиваетя" вся строка.  
3. Копируем значение из выделенной ячейки и вставляем в другую ячейку. Или не только значение, но и все параметры ячейки которыми она обладала до подсвечивания строки?  
 
Т.е. раскраска листа должна оставаться неизменной. А подсвечивание должно помогать только ориентироваться в записях и давать возможность работать в режиме копирование/вставка.
 
Я встречал надстройку, которая выделяет строку и столбец активной ячейки четырьмя прямыми линиями, как бы продолжая границы ячейки во все стороны.  
С точки зрения копирования-вставки это лучше, т.к. формат ячеек не меняется.  
Поищите.
 
Где-то близко по смыслу - "Координатное выделение":  
http://www.planetaexcel.ru/tip.php?aid=61
 
vikttur,  
спасибо за отклик!  
 
{quote}{login=vikttur}{date=18.01.2011 12:29}{thema=}{post}Где-то близко по смыслу - "Координатное выделение":  
http://www.planetaexcel.ru/tip.php?aid=61{/post}{/quote}  
 
Здесь не работает копирование ячеек. Т.е. после копирования значения и перехода на новую ячейку в меню (Excel - Правка) Вставка не подсвечена (пропадает ее активация). Хотя в буфере скопированное значение еще есть. Вопрос в том и состоит - как оставить функцию Вставка из меню Excel?
 
Вот посмотрите такой примерчик (автор неизвестен).
 
1) использованная вами конструкция  
For Each Target In Selection.Cells  
некорректна  
 
для Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
Target = Selection  
то есть Target это передаваемая в модуль обработки события  
информация о том какой объект вызвал данное событие.  
Для  Worksheet_SelectionChange это все выбранные ячейки  
Если Вы хотите что-то сделать с выбранными ячейками (Selection=Target)  
For Each Mycell In target.Cells ....  
 
2) Назначение условного форматирования для строк выбранных ячеек  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
ActiveSheet.Cells.FormatConditions.Delete  
'если Выбранное.Строки.количество < 11  
if Target.rows.count < 11  
'c Выбранное.CтрокиПолностью  
With Target.EntireRow  
.FormatConditions.Add Type:=xlExpression, Formula1:="=1"  
.FormatConditions(1).Interior.ColorIndex = 40  
End With  
end if  
......
 
{quote}{login=Sergey11222}{date=18.01.2011 10:46}{thema=Re: }{post}  
Здесь не работает копирование ячеек. ....?{/post}{/quote}  
 
Собственно, по моим догадкам, тредстартера мучает вопрос::  
 
Какие команды VBA в модуле  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
могут привести к запрету вставки в выбранные ячейки  
после выполнения обработки события selection.CanPaste = false  
И что делать для того чтобы сохранить возможность вставки стандартными средствами экселя, если без данных команд не обойтись....  
 
 
?????????????????????????????????????????????????????????  
химмаш-сортировка-транзит
 
{quote}{post}  
И что делать ....  
{/post}{/quote}
 
{quote}{post}  
 
Какие команды VBA в модуле  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
могут привести к запрету вставки в выбранные ячейки  
после выполнения обработки события selection.CanPaste = false  
{/post}{/quote}  
 
dl,  
Мне не понятен Ваш пост. Поясните, пожалуйста Ваше предложение.
 
Вот, нашел то, о чем писал:  
http://www.cpearson.com/excel/RowLiner.htm
 
Нечто похожее видел.  
В данном примере формулы по краям диапазона стоят?
 
Казанский, спасибо за отклик.  
 
Внизу на сайте есть заметка:  
 
Несколько пользователей, прежде всего пользователи с европейскими версиями Excel, сообщили, что RowLiner приводит Excel к отказу. Причина этого неизвестна. Я работал с инженерами службы поддержки Microsoft, чтобы разрешить эту проблему, но Microsoft не может определить природу или причину катастрофического отказа.  
 
А у Вас есть рекомендации по использованию этой программы? Или Ваши рекомендации?
 
Есть еще одно небольшое ограничение:  
 
RowLiner отключит опцию Отмены. Это - ограничение, наложенное базовой конструкцией Excel, и не может быть изменено.  
 
Уважаемые форумчане, а есть ли вообще таковая возможность в Excel? Подсветить строку и скопировать/вставить из ячеки значение?
 
Sergey11222, смущает вот что: Вам нужно после процедуры посдветки/копирования/вставки - вернуть в строку "старое" форматирование. А для этого нужно запомнить куда-то значение заливки (как минимум) для каждой (КАЖДОЙ) ячейки строки. Оно того стоит?
 
Юрий М,  
Все ячейки запоминать не требуется.  
Последовательность действий следующая:  
1. Активируется одна ячейка.  
2. «Подсвечивается» вся строка, в которой находится эта ячейка.  
3. Копируется значение активированной ячейки.  
4. Вставляется значение в другую ячейку.  
Между п.3 и п.4 становится недоступным меню вставить, хотя в буфере обмена скопированное значение есть. Вот как вытащить это значение в Excel. Или как-то иначе?
 
Вы сами себе противоречите:  
{quote}{login=Sergey11222}{date=17.01.2011 11:33}{thema=Выделение строк цветом}{post} раскраска листа должна оставаться неизменной.{/post}{/quote}  
Ведь после подсветки, если это заливка, поменяется форматирование ВСЕЙ строки.
 
Так Вы попробовали RowLiner, или пребываете в сомнениях и раздумиях?  
Я проверил - копировать и вставлять он позволяет.  
Что касается того, что RowLiner может приводить Excel к отказу - так Excel и сам по себе падает (причем, по моему опыту, 2007 гораздо чаще, чем 2000). И ничего, все работают. Включите автосохранение.
 
Ещё - смотрели ли файл, который предложил nilem?
 
Не совсем так. При копировании и последующем переходе на новую ячейку формат строки восстанавливается.
 
В дополнение
 
Казанский, спасибо за рекомендацию.  
Обязательно попробую
 
{quote}{login=Sergey11222}{date=19.01.2011 10:26}{thema=Re: canpaste = могу_вставить? Уточнение вопроса.....}{post}{quote}{post}  
 
Какие команды VBA в модуле  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
могут привести к запрету вставки в выбранные ячейки  
после выполнения обработки события selection.CanPaste = false  
{/post}{/quote}  
 
dl,  
Мне не понятен Ваш пост. Поясните, пожалуйста Ваше предложение.{/post}{/quote}  
 
 
ТОЖДЕСТВЕННО РАВНО ВАШЕМУ    
"Между п.3 и п.4 становится недоступным меню вставить"  
С ОДНИМ УТОЧНЕНИЕМ  
"По какой причине?"  
естественный ответ на этот вопрос -    
в ходе выполнения кода эксель сбрасывает возможность вставки, это произойдёт на вполне определённой строке кода.  
 
на пальцах  
делаете пустой модуль  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
end sub  
он будет обрабатываться при любом новом выборе ячейки,  
при этом меню вставки остаётся активным,  
втавляете в модуль команду/оператор VBA  
мой вопрос (не к Вам а ко всем)  
кто нибудь знает после выполнения каких команд  
произойдёт сбрасывание режима вставки.
 
Казанский  
Да попробовал RowLiner,  
Отмена действительно не работает  
!?
 
{quote}{login=Sergey11222}{date=20.01.2011 11:52}{thema=}{post}В дополнение{/post}{/quote}  
 
режим вставки  у меня работает.  
код править не хотите? (см мой пост от 19.01.2011, 09:50)
 
dl  
 
{quote}{login=dl}{date=19.01.2011 09:50}{thema=target в event процедурах}{post}1) использованная вами конструкция  
For Each Target In Selection.Cells  
некорректна  
 
для Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
Target = Selection  
то есть Target это передаваемая в модуль обработки события  
информация о том какой объект вызвал данное событие.  
Для  Worksheet_SelectionChange это все выбранные ячейки  
Если Вы хотите что-то сделать с выбранными ячейками (Selection=Target)  
For Each Mycell In target.Cells ....  
 
2) Назначение условного форматирования для строк выбранных ячеек  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
ActiveSheet.Cells.FormatConditions.Delete  
'если Выбранное.Строки.количество < 11  
if Target.rows.count < 11  
'c Выбранное.CтрокиПолностью  
With Target.EntireRow  
.FormatConditions.Add Type:=xlExpression, Formula1:="=1"  
.FormatConditions(1).Interior.ColorIndex = 40  
End With  
end if  
......{/post}{/quote}  
 
Тогда не получилось сделать Вставку и сейчас не получается.  
Подскажите, пожалуйста, что я сделал не так?  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
If Target.Cells.Count <= 2500 Then  
' Проверка на количество ячеек. Слишком большое количество  
' выделенных ячеек замедляет работу, т.к. при выполнении макроса  
' определяется адрес каждой выделенной ячейки.  
'ActiveSheet.Cells.FormatConditions.Delete  
ActiveSheet.Cells.FormatConditions.Delete  
'если Выбранное.Строки.количество < 11  
If Target.Rows.Count < 11 Then  
'c Выбранное.CтрокиПолностью  
With Target.EntireRow  
.FormatConditions.Add Type:=xlExpression, Formula1:="=1"  
.FormatConditions(1).Interior.ColorIndex = 40  
End With  
End If  
 
Dim RSMin As Integer  
Dim CSMin As Integer  
Dim RSMax As Integer  
Dim CSMax As Integer  
' ---------начало блока------------  
For Each Mycell In Target.Cells  
If RSMin = 0 Then RSMin = Target.Row  
If CSMin = 0 Then CSMin = Target.Column  
If Target.Row < RSMin Then  
RSMin = Target.Row  
ElseIf Target.Row > RSMax Then  
RSMax = Target.Row  
End If  
If Target.Column < CSMin Then  
CSMin = Target.Column  
ElseIf Target.Column > CSMax Then  
CSMax = Target.Column  
End If  
Next  
'--------конец блока--------------  
' определяются максимальные и минимальные  
' срока и столбец выделенного блока  
'--------начало блока-------------  
With Range(Cells(RSMin, 1), Cells(RSMax, 256))  
.FormatConditions.Add Type:=xlExpression, Formula1:="=1"  
.FormatConditions(1).Interior.ColorIndex = 40  
End With  
'--------конец блока---------------  
' выделяются сроки выделенного диапазона  
'--------начало блока---------------  
'With Range(Cells(1, CSMin), Cells(65000, CSMax))  
'.FormatConditions.Delete  
'.FormatConditions.Add Type:=xlExpression, Formula1:="=1"  
'.FormatConditions(1).Interior.ColorIndex = 36  
'End With  
'--------конец блока---------------  
' выделяются столбцы выделенного диапазона  
'--------начало блока---------------  
With Range(Cells(RSMin, CSMin), Cells(RSMax, CSMax))  
.FormatConditions.Delete  
.FormatConditions.Add Type:=xlExpression, Formula1:="=1"  
.FormatConditions(1).Interior.ColorIndex = 34  
End With  
'--------конец блока---------------  
' выделяется выделенный диапазон  
Else  
End If  
End Sub
 
то что получилось у меня вместо вашего кода  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
 
'удаление всего условного форматирования  
ActiveSheet.Cells.FormatConditions.Delete  
 
If Target.Cells.Count <= 2500 Then  
'если количество выбранных строк < 11  
'выделяются строки выделенного диапазона  
If Target.Rows.Count < 11 Then  
With Target.EntireRow  
.FormatConditions.Add Type:=xlExpression, Formula1:="=1"  
.FormatConditions(1).Interior.ColorIndex = 40  
End With  
End If  
'если количество выбранных столбцов < 11  
'выделяются столбцы выделенного диапазона  
If Target.Columns.Count < 11 Then  
With Target.EntireColumn  
.FormatConditions.Delete  
.FormatConditions.Add Type:=xlExpression, Formula1:="=1"  
.FormatConditions(1).Interior.ColorIndex = 36  
End With  
End If  
'выделение выбранного диапазона  
With Target  
.FormatConditions.Delete  
.FormatConditions.Add Type:=xlExpression, Formula1:="=1"  
.FormatConditions(1).Interior.ColorIndex = 34  
End With  
 
Else  
End If  
End Sub
 
на рисунке показано что у меня (правда это 2010)  
копирование вставка работают
 
файл рисунка
 
Нет в  2003 не работает.  
А Вы в 2010 вставить нажать пробовали? Срабатывает?
 
у меня всё работает  
выделяю ячейку  
через правую кнопку мыши копирую  
перехожу на другую ячейку (выделение строк и столбцов корректно обрабатывается)  
через правую кнопку мыши вставляю  
(операцию вставки могу повторить сколько угодно раз)  
могу даже через меню вставки вставить ячейки со сдвигом.
Страницы: 1 2 След.
Наверх