Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Выделение заголовков в таблице - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выделение заголовков в таблице (Макросы/Sub)
Выделение заголовков в таблице
aghient Дата: Воскресенье, 22.01.2017, 12:52 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте всем, мне создали макрос для выделения цветом заголовков в таблице, прошу помощи с одной проблемой в ней.
Когда я выделяю несколько ячеек в таблице + за её пределами, то все эти цвета закрашивают захваченные ячейки (имееется ввиду, которые за пределами таблицы) и если случайно нажать на весь столбец или всю строку, там цвет до упора распространяется. Можно ли это исправить?
К сообщению приложен файл: -1-.xls (50.5 Kb)


Сообщение отредактировал aghient - Воскресенье, 22.01.2017, 13:05
 
Ответить
СообщениеЗдравствуйте всем, мне создали макрос для выделения цветом заголовков в таблице, прошу помощи с одной проблемой в ней.
Когда я выделяю несколько ячеек в таблице + за её пределами, то все эти цвета закрашивают захваченные ячейки (имееется ввиду, которые за пределами таблицы) и если случайно нажать на весь столбец или всю строку, там цвет до упора распространяется. Можно ли это исправить?

Автор - aghient
Дата добавления - 22.01.2017 в 12:52
Roman777 Дата: Воскресенье, 22.01.2017, 13:42 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
aghient, не самый лучший вариант цветового выделения.
Наиболее быстрый вариант, на мой взгляд, для созданного макроса - поставить проверку, при которой, если выделенное кол-во ячеек равно кол-ву столбцов или кол-ву строк, выходить из макроса:
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim T As Range
If Target.Count = Columns(1).Cells.Count Then Exit Sub
If Target.Count = Rows(1).Cells.Count Then Exit Sub
If Intersect(Range("C7:Q24"), Target) Is Nothing Then
  Range("C6:Q6").Interior.Pattern = xlNone
  Range("B7:Q24").Interior.Pattern = xlNone
  Exit Sub
End If
Range("B5:Q24").Interior.ColorIndex = xlNone
For Each T In Target
  Target.Interior.ColorIndex = 15
  Cells(T.Row, 2).Interior.ColorIndex = 37
  Cells(6, T.Column).Interior.ColorIndex = 37
Next
End Sub
[/vba]
Но в этом случае макрос не будет выполняться, если общее кол-во выделенных ячеек будет равно 65536 или будет равно 256 (для файла в формате .xls).
Правда эта правка спасёт только от выделения 1 столбца (строки), а если их будет несколько, то тут сразу надо резко резать общее кол-во выделяемых ячеек до 255 максимум (если мы хотим избежать этого и в случае выделения столбца и в случае выделения строки).


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Воскресенье, 22.01.2017, 13:48
 
Ответить
Сообщениеaghient, не самый лучший вариант цветового выделения.
Наиболее быстрый вариант, на мой взгляд, для созданного макроса - поставить проверку, при которой, если выделенное кол-во ячеек равно кол-ву столбцов или кол-ву строк, выходить из макроса:
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim T As Range
If Target.Count = Columns(1).Cells.Count Then Exit Sub
If Target.Count = Rows(1).Cells.Count Then Exit Sub
If Intersect(Range("C7:Q24"), Target) Is Nothing Then
  Range("C6:Q6").Interior.Pattern = xlNone
  Range("B7:Q24").Interior.Pattern = xlNone
  Exit Sub
End If
Range("B5:Q24").Interior.ColorIndex = xlNone
For Each T In Target
  Target.Interior.ColorIndex = 15
  Cells(T.Row, 2).Interior.ColorIndex = 37
  Cells(6, T.Column).Interior.ColorIndex = 37
Next
End Sub
[/vba]
Но в этом случае макрос не будет выполняться, если общее кол-во выделенных ячеек будет равно 65536 или будет равно 256 (для файла в формате .xls).
Правда эта правка спасёт только от выделения 1 столбца (строки), а если их будет несколько, то тут сразу надо резко резать общее кол-во выделяемых ячеек до 255 максимум (если мы хотим избежать этого и в случае выделения столбца и в случае выделения строки).

Автор - Roman777
Дата добавления - 22.01.2017 в 13:42
bmv98rus Дата: Воскресенье, 22.01.2017, 13:57 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
aghient,
Просто там одна ошибка
[vba]
Код
Target.Interior.ColorIndex = 15
[/vba] нужно T. ну и получается контроль области не помешает.

[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim T As Range
If Intersect(Range("C7:Q24"), Target) Is Nothing Then
  Range("C6:Q6").Interior.Pattern = xlNone
  Range("B7:Q24").Interior.Pattern = xlNone
  Exit Sub
End If
Range("B5:Q24").Interior.ColorIndex = xlNone
For Each T In Target
    If Not Intersect(Range("C7:Q24"), T) Is Nothing Then
  T.Interior.ColorIndex = 15
  Cells(T.Row, 2).Interior.ColorIndex = 37
  Cells(6, T.Column).Interior.ColorIndex = 37
  End If
Next
End Sub
[/vba]

Ну и еще лучше способ ниже указан.
К сообщению приложен файл: Copy_of-1-.xls (48.5 Kb)


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Воскресенье, 22.01.2017, 14:05
 
Ответить
Сообщениеaghient,
Просто там одна ошибка
[vba]
Код
Target.Interior.ColorIndex = 15
[/vba] нужно T. ну и получается контроль области не помешает.

[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim T As Range
If Intersect(Range("C7:Q24"), Target) Is Nothing Then
  Range("C6:Q6").Interior.Pattern = xlNone
  Range("B7:Q24").Interior.Pattern = xlNone
  Exit Sub
End If
Range("B5:Q24").Interior.ColorIndex = xlNone
For Each T In Target
    If Not Intersect(Range("C7:Q24"), T) Is Nothing Then
  T.Interior.ColorIndex = 15
  Cells(T.Row, 2).Interior.ColorIndex = 37
  Cells(6, T.Column).Interior.ColorIndex = 37
  End If
Next
End Sub
[/vba]

Ну и еще лучше способ ниже указан.

Автор - bmv98rus
Дата добавления - 22.01.2017 в 13:57
aghient Дата: Воскресенье, 22.01.2017, 13:57 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Roman777, честно сказать, не помогло. Все равно ячейки за пределами таблицы закрашиваются.
К сообщению приложен файл: 5189062.jpg (55.0 Kb)
 
Ответить
СообщениеRoman777, честно сказать, не помогло. Все равно ячейки за пределами таблицы закрашиваются.

Автор - aghient
Дата добавления - 22.01.2017 в 13:57
Michael_S Дата: Воскресенье, 22.01.2017, 14:00 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim T As Range, RN As Range
    Application.ScreenUpdating = False
    Range("B5:Q24").Interior.ColorIndex = xlNone
    Set RN = Intersect(Range("C7:Q24"), Target)
    If RN Is Nothing Then Exit Sub
    For Each T In RN
      T.Interior.ColorIndex = 15
      Cells(T.Row, 2).Interior.ColorIndex = 37
      Cells(6, T.Column).Interior.ColorIndex = 37
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: -1-2-.xls (49.0 Kb)


Сообщение отредактировал Michael_S - Воскресенье, 22.01.2017, 14:01
 
Ответить
Сообщение[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim T As Range, RN As Range
    Application.ScreenUpdating = False
    Range("B5:Q24").Interior.ColorIndex = xlNone
    Set RN = Intersect(Range("C7:Q24"), Target)
    If RN Is Nothing Then Exit Sub
    For Each T In RN
      T.Interior.ColorIndex = 15
      Cells(T.Row, 2).Interior.ColorIndex = 37
      Cells(6, T.Column).Interior.ColorIndex = 37
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Michael_S
Дата добавления - 22.01.2017 в 14:00
aghient Дата: Воскресенье, 22.01.2017, 14:16 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Благодарствую, все работает.
 
Ответить
СообщениеБлагодарствую, все работает.

Автор - aghient
Дата добавления - 22.01.2017 в 14:16
Roman777 Дата: Воскресенье, 22.01.2017, 14:28 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
aghient, действительно, надурил намудрил))). У Michael_S интересный и более правильный, наверное, вариант, поскольку проходимся только по ячейкам пересечения, а не по всей области выделения...


Много чего не знаю!!!!
 
Ответить
Сообщениеaghient, действительно, надурил намудрил))). У Michael_S интересный и более правильный, наверное, вариант, поскольку проходимся только по ячейкам пересечения, а не по всей области выделения...

Автор - Roman777
Дата добавления - 22.01.2017 в 14:28
Michael_S Дата: Воскресенье, 22.01.2017, 14:36 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
или так:
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim  RN As Range
    Application.ScreenUpdating = False
    Range("B5:Q24").Interior.ColorIndex = xlNone
    Set RN = Intersect(Range("C7:Q24"), Target)
    If RN Is Nothing Then Exit Sub
    RN.Interior.ColorIndex = 15
    Range(Cells(RN.Row, 2), Cells(RN.Row + RN.Rows.Count - 1, 2)).Interior.ColorIndex = 37
    Range(Cells(6, RN.Column), Cells(6, RN.Column + RN.Columns.Count - 1)).Interior.ColorIndex = 37
    Application.ScreenUpdating = True
End Sub
[/vba][vba][code][/code][/vba]


Сообщение отредактировал Michael_S - Воскресенье, 22.01.2017, 14:44
 
Ответить
Сообщениеили так:
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim  RN As Range
    Application.ScreenUpdating = False
    Range("B5:Q24").Interior.ColorIndex = xlNone
    Set RN = Intersect(Range("C7:Q24"), Target)
    If RN Is Nothing Then Exit Sub
    RN.Interior.ColorIndex = 15
    Range(Cells(RN.Row, 2), Cells(RN.Row + RN.Rows.Count - 1, 2)).Interior.ColorIndex = 37
    Range(Cells(6, RN.Column), Cells(6, RN.Column + RN.Columns.Count - 1)).Interior.ColorIndex = 37
    Application.ScreenUpdating = True
End Sub
[/vba][vba][code][/code][/vba]

Автор - Michael_S
Дата добавления - 22.01.2017 в 14:36
bmv98rus Дата: Воскресенье, 22.01.2017, 14:56 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация: 768 ±
Замечаний: 0% ±

Excel 2013/2016
Michael_S,

А вот последнее излишне, пропал мультивыбор. Одна облать - да, а вот несколько - нет. Так что в пятом посте более корректно.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеMichael_S,

А вот последнее излишне, пропал мультивыбор. Одна облать - да, а вот несколько - нет. Так что в пятом посте более корректно.

Автор - bmv98rus
Дата добавления - 22.01.2017 в 14:56
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выделение заголовков в таблице (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!