Дня доброго дамы и господа.
У меня возник еще один вопрос по автомотизации экселя…
Задача не сложная наверно для гуру но для рядового пользователя эксель иногда тупиковая.
Пример следующий
Нужно написать функцию при нажатии на которую клетка окрашивалась в определенный цвет.
Далее по нажатию кнопки определялось чило окрашенных клавишь и выводилось в ячейку
Я пытался сделать по двум примерам:
Пример первый:
Код |
---|
'CODE 1 Ставим флажок, если был одиночный щелчок по ячейке Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A6:A1000" ;) ) Is Nothing Then 'Если ячейка пересекается с указанным диапазоном, то Target.Font.Name = "Marlett" 'Назначаем ячейке шрифт If Target = vbNullString Then 'Если ячейка пуста, то Target = "a" 'заполняем её символом "а" (латиница) Else 'Иначе Target = vbNullString 'в ячейке пусто End If Target.Offset(0, 1).Activate '"отскакиваем" вправо на один столбец End If End Sub |
как переработать функцию чтобы при нажатии ячейка просто закрашивалась?
Вторая функция с вашего сайта:
Код |
---|
Public Function SumByColor(DataRange As Range, ColorSample As Range) As Double Dim Sum As Double Application.Volatile True For Each cell In DataRange If cell.Interior.Color = ColorSample.Interior.Color Then Sum = Sum + 1 End If Next cell SumByColor = Sum End Function |
Но проблема в том что она не обновляется автоматом надо чтоб или автоматом или по жмаконью кнопки.
она обновлялась.
P/s если не сложно посоветуйте книгу по программированию на VBA
начальство поставило задачу скрестить эксель и корел под VBA для расчетов и отрисовки деталей.
В этой статье будут показаны некоторые методы изменения цвета ячейки при нажатии на ячейку и изменение выделенного цвета при выборе диапазона ячеек в Excel.
Изменить цвет ячейки при нажатии на ячейку с кодом VBA
Измените выделенный цвет, когда ячейки выбраны с помощью кода VBA
Выделите всю строку и столбец активной ячейки с помощью Kutools for Excel
Изменить цвет ячейки при нажатии на ячейку с кодом VBA
Здесь вы можете изменить цвет фона ячейки, дважды щелкнув по ней или щелкнув правой кнопкой мыши с помощью следующего кода VBA.
1. На рабочем листе вы измените цвет ячейки при нажатии на нее, щелкните правой кнопкой мыши вкладку листа и нажмите Просмотреть код из контекстного меню.
2. в Microsoft Visual Basic для приложений окна, скопируйте и вставьте приведенный ниже код VBA в Code окно.
VBA: изменить цвет ячейки при нажатии на нее
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Target.Interior.Color = vbRed
End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Target.Interior.Color = vbGreen
End Sub
3. Нажмите другой + Q клавиши одновременно, чтобы закрыть Microsoft Visual Basic для приложений окно.
Затем, когда вы дважды щелкните ячейку, она будет окрашена в красный цвет. И когда вы щелкаете правой кнопкой мыши по ячейке, она будет окрашена в зеленый цвет. Смотрите скриншот:
Измените выделенный цвет, когда ячейки выбраны с помощью кода VBA
По умолчанию при выборе диапазона ячеек выделяется серый цвет. Если вы хотите сделать выбранный диапазон более заметным, вы можете изменить его цвет выделения на тот, который вам нужен. Пожалуйста, сделайте следующее.
1. Щелкните правой кнопкой мыши вкладку листа, для которой нужно изменить цвет выделения выбранного диапазона, и щелкните Просмотреть код из контекстного меню.
2. в Microsoft Visual Basic для приложений окна, скопируйте и вставьте приведенный ниже код VBA в Code окно.
Код VBA: изменить выделенный цвет выбранного диапазона
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target
.Worksheet.Cells.FormatConditions.Delete
.FormatConditions.Add xlExpression, , "TRUE"
.FormatConditions(1).Interior.Color = vbYellow
End With
End Sub
3. Нажмите другой + Q ключи одновременно, чтобы закрыть Microsoft Visual Basic для приложений окно.
С этого момента цвет выделенного диапазона или ячейки изменится на желтый. Когда вы щелкаете другую ячейку или диапазон ячеек, ячейки будут раскрашены автоматически.
Выделите всю строку и столбец активной ячейки с помощью Kutools for Excel
Если вы имеете дело с большим листом, необходимо выделить всю строку и столбец активной ячейки, чтобы облегчить чтение. Здесь Макет для чтения полезности Kutools for Excel могу помочь тебе.
1. Нажмите Кутулс > Макет для чтения. Смотрите скриншот:
Когда макет чтения включен, вы можете видеть, что строка и столбец активной ячейки сразу выделяются.
Внимание: Вы можете изменить настройки макета чтения в зависимости от ваших потребностей, как показано на скриншоте ниже.
Если вы хотите получить бесплатную пробную версию (30-день) этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.
Выделите всю строку и столбец активной ячейки с помощью Kutools for Excel
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Выбор цвета ячейки по нажатию на нее. |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Lendor 0 / 0 / 0 Регистрация: 13.02.2013 Сообщений: 34 |
||||
1 |
||||
13.02.2013, 17:16. Показов 11576. Ответов 7 Метки нет (Все метки)
добрый день. Имеется следующий код:
Данный код прикручен к заблокированному листу, причем на листе есть несколько ячеек без блокировки. Проблема данного кода в том что, при кликании в любом заблокированной миесте листа код срабатывает на ячейке,которая является активной. Как нужно изменить код, чтобы при кликании по определенной ячейке заливалась только она, ну или запретить срабатывание кода на заблокированной части листа. Спасибо
0 |
IvanOK 693 / 99 / 10 Регистрация: 25.06.2011 Сообщений: 718 |
||||
13.02.2013, 18:54 |
2 |
|||
Lendor,
1 |
toiai 3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
||||
13.02.2013, 19:51 |
3 |
|||
Можно и так:
2 |
Lendor 0 / 0 / 0 Регистрация: 13.02.2013 Сообщений: 34 |
||||
14.02.2013, 10:35 [ТС] |
4 |
|||
Можно и так:
к сожалению, данное условие не избавляет от проблемы. но все-равно спасибо
0 |
693 / 99 / 10 Регистрация: 25.06.2011 Сообщений: 718 |
|
14.02.2013, 10:50 |
5 |
Lendor, все еще зависит от того куда ты условие прописал
0 |
Lendor 0 / 0 / 0 Регистрация: 13.02.2013 Сообщений: 34 |
||||
14.02.2013, 12:25 [ТС] |
6 |
|||
вот таким образом, код прикреплен непосредственно к заблокированному листу
0 |
3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
|
14.02.2013, 17:36 |
7 |
Все работает, просто у Вас неправильно настроена защита листа, вот пример без проблем:
0 |
0 / 0 / 0 Регистрация: 13.02.2013 Сообщений: 34 |
|
14.02.2013, 21:55 [ТС] |
8 |
судя по файлу, который у меня не пашет, действительно проблемы с настройками защиты. буду ковырять настройки. всем спасибо еще раз Добавлено через 2 часа 31 минуту
0 |
Вы можете сделать это только через VBA. Вот некоторый код, который вы можете поместить в объект Sheet.
Private lastRange As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Range("A1").Address Then
If Not lastRange Is Nothing Then
lastRange.Interior.Color = Range("A1").Interior.Color
End If
Else
Set lastRange = Target
End If
End Sub
Объект lastRange
сохраняется от выбора к выделению. Это единственный способ запомнить VBA, какой диапазон мы хотим выделить. Всякий раз, когда вы изменяете выделение, оно устанавливает это выделение на lastRange
если только это не A1
в этом случае оно не окрашивает предыдущее выделение в любой цвет A1
.
Однако, основываясь на ваших комментариях, ваша потребность немного шире, чем эта. Поскольку вам нужен диапазон ячеек разных цветов, возможно, вам нужен следующий код:
Private lastRange As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count = 1 Then
If Not Intersect(Target, Range("A1:A5")) Is Nothing Then
If Not lastRange Is Nothing Then
lastRange.Interior.Color = Target.Interior.Color
Exit Sub
End If
End If
End If
Set lastRange = Target
End Sub
Теперь есть целый ряд ячеек A1:A5
которые могут быть разных цветов. Если вы выберете одну ячейку в этом диапазоне, ваш предыдущий выбор будет иметь тот же цвет, что и текущая ячейка. Вы можете настроить диапазон A1:A5
, как вам нужно.
У меня есть одна странность, о которой я знаю: если вы выбираете диапазон, то фигура, а затем A1
, диапазон, который вы выбрали ранее, все еще сохраняется как lastRange
. Это, наверное, нормально, но я не знаю, как вы используете.