Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/35: Рейтинг темы: голосов - 35, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 17.05.2012
Сообщений: 6

Закрашивание активной ячейки

18.05.2012, 10:16. Показов 6943. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, где может быть ошибка, в этом деле уж совсем новичок:
Visual Basic
1
2
3
4
5
6
7
8
Private Sub Worksheet_SelectionChange _
                  (ByVal Target As Range)
   If ActiveCell.Row > 3 _
   And ActiveCell.Row < 2491 And ActiveCell.Cells > 3 Then _
   ActiveSheet.Calculate
ActiveSheet.UsedRange.Interior.ColorIndex = xlNone
Target.Interior.ColorIndex =4
End Sub

Надо чтоб закрашивалась активная ячейка и работало F9, так все работает, но оооочень медленно.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.05.2012, 10:16
Ответы с готовыми решениями:

Изменение значения фиксированной ячейки в зависимости от активной ячейки
Добрый день. Помогите пожалуйста написать макрос так, чтобы при изменении активной ячейки, фиксированная ячейка изменяла свое значение в...

Определение координат активной ячейки
Люди, подскажите, как достать rowindex и columnindex у активной ячейки?

Установить диапазон активной ячейки
Здравствуйте, подскажите, пожалуйста как сделать так, чтобы активная ячейка работала только в столбце А? Например, у меня есть код...

7
 Аватар для Watcher_1
357 / 163 / 27
Регистрация: 21.06.2011
Сообщений: 350
18.05.2012, 10:28
Попробуйте так
Visual Basic
1
2
3
4
5
6
7
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Target.Row > 3 And Target.Row < 2491 Then
        ActiveSheet.Calculate
        ActiveSheet.UsedRange.Interior.ColorIndex = xlNone
        Target.Interior.ColorIndex = 4
   End If
End Sub
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
18.05.2012, 10:37
если макрос работает намного медленнее, чем запуск пересчета листа через интерфейс Excel, то, возможно, проблема в UsedRange на данном листе - он иногда становится нереально большим, особенно если форматировались столбцы целиком.

а для нереально большого UsedRange
Visual Basic
1
ActiveSheet.UsedRange.Interior.ColorIndex = xlNone
будет работать долго.
причем снятие закраски в Вашем коде происходит при выделении любого диапазона, а не только для случая, когда активная ячейка попадает в заданный диапазон строк.
это правильно?
Вы так и задумывали?

проверьте - в режиме отладки или через msgbox посмотрите адрес UsedRange.

Добавлено через 7 минут
кстати...
если не секрет - зачем Вам запускать пересчет при каждом выделении (а не изменении значений) ячеек?
у Вас на листе используются специфические функции?
возможно, имеет смысл оптимизировать эти функции, а не пересчитывать большой лист при каждом чихе.
0
0 / 0 / 0
Регистрация: 17.05.2012
Сообщений: 6
18.05.2012, 10:52  [ТС]
вот так вот работает достатоно быстро
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Worksheet_SelectionChange _
                  (ByVal Target As Range)
   If ActiveCell.Row > 3 _
   And ActiveCell.Row < 2491 And ActiveCell.Cells > 3 Then _
   ActiveSheet.Calculate
If Target.Interior.ColorIndex = xlNone Then
Target.Interior.ColorIndex = 5
Else
Target.Interior.ColorIndex = xlNone
End If
 
End Sub
НО, ячейка то закрашивается, но после того как перемещаешься, она остается закрашенной:-((, только при возврате на нее убирается закрашивание.

В действительности, хотелось бы еще ограничить закрашивание только 4 столбцом, начиная с 4-ой строки. Такое возможно?

Формул для пересчета немного.
Попробую щас сделать шаблон отчета
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
18.05.2012, 11:04
к сожалению, в обработке события SelectionChange невозможно простым способом получить ячейку, которая была активной до возникновения события
но есть чуть более сложный способ:
1) в стандартном модуле объявить публичную переменную строкового типа - для хранения адреса активной ячейки;
2) в начале процедуры Worksheet_SelectionChange в модуле листа снимать закрашивание для ячейки с адресом, хранимым в этой переменной, а уж затем закрашивать активную и выполнять все остальные действия.
итого - не будет лишних действий, скорость работы увеличится, возможно - существенно.

Добавлено через 3 минуты
Цитата Сообщение от HODIC Посмотреть сообщение
хотелось бы еще ограничить закрашивание только 4 столбцом, начиная с 4-ой строки. Такое возможно?
да.
варианты:
Visual Basic
1
If Target.Row > 3 And Target.Row < 2491 And Target.Column=4 Then
Visual Basic
1
If Not Intersect(Target, [d4:d2491]) Is Nothing Then
0
0 / 0 / 0
Регистрация: 17.05.2012
Сообщений: 6
18.05.2012, 11:58  [ТС]
Всем спасибо! С 4-м стобцом все работает, а закрашиванием еще покапаюсь
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
18.05.2012, 12:04
в модуль листа:
Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Len(rAddress) Then Range(rAddress).Interior.ColorIndex = xlNone
  If Not Intersect(Target, [a1:a10]) Is Nothing Then
    Target.Interior.ColorIndex = 5
    rAddress = Target.Address
  Else
    rAddress = ""
  End If
End Sub
в стандартный модуль:
Visual Basic
1
Public rAddress$
1
0 / 0 / 0
Регистрация: 17.05.2012
Сообщений: 6
18.05.2012, 12:20  [ТС]
Получилось! Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.05.2012, 12:20
Помогаю со студенческими работами здесь

Открыть путь из активной ячейки
Пользуюсь таким макросом: Sub ОткрытьПуть() Dim sFolder As String sFolder = ActiveCell Shell &quot;explorer &quot; &amp; sFolder,...

Выделение столбца от активной ячейки
Как выделить весь столбец до низа от активной ячейки.

Выведение активной ячейки на экран
На листе 30 000 строк. Путем Cells(i,3).Select нужная ячейка выделяется, но не факт,что она появится на видимом экране. То есть, выделенная...

Закрасить диапазон от активной ячейки
Здравствуйте есть макрос который выделяет диапазон от активной ячейки до последней заполненной. Sub CtrlShiftRight() Range(ActiveCell,...

Запись в TextBox значение активной ячейки
Здравствуйте, подскажите, пожалуйста, как записать в TextBox значение активной ячейки, а то только получилось это сделать при условии, что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru