Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail


           Интенсив по Python 3-5 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
           Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 26.09.2007, 12:10   #1
А. Долматов
Форумчанин
 
Аватар для А. Долматов
 
Регистрация: 15.02.2007
Сообщений: 183
По умолчанию Изменить цвет при помощи макроса

Здравствуйте, я VB не писал ни разу, но потребовалось. Никакого материала у меня по нему нет. Скажите плиз где можно найти почитать и что лучше.
Мне надо цвета в ячейках изменить по условию, оператор нашел, но что-то никак не пойму как он работает. В excel'е после того как значение в ячейки расчиталось проверить больше оно или меньше значения содержащегося в другой ячейке, и исходя из этого поменять цвет в ячейках, т.е. заливку. И еще как события создавать? Например в делфях на кнопку кликать и действие
Знать все невозможно, в силу того, что жить бы стало неинтересно.
А. Долматов вне форума
Старый 26.09.2007, 12:37   #2
madmot
Форумчанин
 
Регистрация: 04.09.2007
Сообщений: 155
По умолчанию

Посоветую файлы к книге, а саму книгу обязательно надо иметь (тьфу читать)
http://www.piter.com/books/download/978546901223

Поиск с выделением найденных данных
Листинг 2.32. Выделение найденных данных
Sub FindAndSelect()
Dim strStartAddr As String ' Хранит координаты первого найденного _
значения
Dim rgResult As Range

' Поиск первого входжения искомого слова
Set rgResult = Range("B1:B10").Find("Прибыль", , xlValues)
If Not rgResult Is Nothing Then
' Сохраним адрес найденной ячейки (чтобы контролировать _
зацикливание поиска)
strStartAddr = rgResult.Address
End If
Do While Not rgResult Is Nothing
' Обработка результата поиска
rgResult.Interior.Color = RGB(255, 255, 0)

' Новый поиск
Set rgResult = Range("B1:B10").FindNext(rgResult)
If rgResult.Address = strStartAddr Then
' Поиск завершен
Exit Do
End If
Loop
End Sub
madmot вне форума
Старый 26.09.2007, 15:43   #3
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

А.Долматов, А зачем Вы, для решения поставленной задачи, собираетесь использовать макросы ... ведь существует условное форматирование, которое прекрасно справляется с поставленной задачей.

Причём,
во-первых, условное форматирование имеет приоритет над другими параметрами форматирования, т.е. если цвет ячейки был изменён с помощью у.ф., то установка другого цвета, например с помощью инструкции [A1].Interior.Color = RGB(255, 255, 0) не даст нужного эффекта.
во-вторых, условное форматирование меняет цвет заливки вне зависимости от того защищена ли ячейка+лист или нет (впрочем, здесь многое зависит от версии, поэтому более осветить этот нюанс нужно отталкиваясь именно от версии)
и в-третьих, при использовании у.ф., Вам не нужно задумываться о том, как отловить изменение в исходной ячейки, т.е. это будет сделано автоматически. А в случае использования событий учитывать характер изменений, видимо, придётся т.е. если данные например, вводятся вручную, то имеет смысл использовать событие Worksheet_Change(), если ячейка содержит формулу, то событие Worksheet_Calculate() Если же данные изменяются программно, то многие люди, на время выполнения макроса, просто блокируют выполнение событий, в этом случае изменения цвета заливки также не произойдёт, однако если применить условное форматирование, то такая проблема просто не возникнет.

А что касается поиска, то в поставленной задачи не видно его необходимости, впрочем, те кому он может понадобиться - могут найти пример в справке, а этой книге место в печке, а её "авторам" в тюрьме, ибо как говорил Жиглов "Вор должен сидеть в тюрьме" © х/ф Место встречи изменить нельзя

Последний раз редактировалось pashulka; 26.09.2007 в 17:23.
pashulka вне форума
Старый 26.09.2007, 15:50   #4
А. Долматов
Форумчанин
 
Аватар для А. Долматов
 
Регистрация: 15.02.2007
Сообщений: 183
По умолчанию

спс всем!!!! Буду ковырять у.ф.
Знать все невозможно, в силу того, что жить бы стало неинтересно.
А. Долматов вне форума
Старый 26.09.2007, 18:15   #5
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Спасибо большое... Мне самому надо было
Я использовал: Cells(x,y).Interior.Color = RGB(255, 255, 0)
zetrix вне форума
Старый 26.09.2007, 21:02   #6
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

А теперь несколько слов о грустном :

На самом деле, несмотря на то, что функция RGB() иногда бывает очень полезна, использовать её применительно к ячейкам (заливка, шрифт) рабочего листа не имеет особого смыла и вот почему.

Дело в том, что данную функцию, как правило, применяют для создания собстенного цвета, но ... в MS Excel (вплоть до XP включительно, дальше не помню) есть всего 56 стандартных цветов и при попытке установке цвета заливки, отличного от стандартной палитры, Excel автоматически выберет именно стандартный цвет (наиболее близкий по параметрам)

Поэтому, если нет необходимости в демонстрации работы этой функции, то изменить цвет заливки, предположительно на жёлтый, можно следующим образом (предположим, что в момент выполнения этих инструкций активным является лист имеющий ячейки, и эти ячейки вкупе с листом, не защищены)

Код:
Cells(1).Interior.Color = vbYellow
Cells(257).Interior.ColorIndex = 6
Почему же я сказал предположительно жёлтый цвет. Если говорить о профессиональной работе в среде MS Excel, то именно предположительно, т.к. в этом приложении возможно создание собственного цвета, причём на основании стандартного.
Для этого, достаточно в меню Сервис выбрать команду Параметры, затем в появившемся стандартном окне выделить закладку Цвет, выбрать нужный цвет и используя кнопку Изменить создать нужный цвет. Теперь, если Вы выбрали именно жёлтый цвет, и изменили его, например, на нечто неподдающееся описанию, то все вышеприведённые инструкции приведут, предположительно, к изменению цвета заливки и установке именно этого цвета
(тоже самое относится и к ячейкам с уже установленным жёлтым цветом)

Второй раз предположительно было употреблено потому, что несмотря на изменение цвета заливки, визуально это может никак не проявиться и это может быть связано с наличием условного форматирования (см.выше)

Стало быть, если Вы действительно хотите изменить цвет заливки на нужный и не беспокоиться о том, смогут ли Ваши подопечные или Вы, визуально наблюдать это изменение, то имеет смысл :
- отобразить ячейку (ибо строки и столбцы могут быть и скрыты)
- удалить условное форматирование
- восстановить стандартную палитру (причём, это можно сделать как вручную, так и программно)

Код:
ThisWorkbook.ResetColors
ThisWorkbook.Colors(6) = RGB(255, 255, 0) '65535
'текущая книга используется только в качестве примера
P.S. Если очень хочется использовать функцию RGB() применительно к ячейкам в цикле, то можно сделать так (предварительно разобравшись с аргументами метода Find)

Код:
Private Sub MyFindVariant()
    Dim iAddress$, iColor&, iCell As Range
    With ThisWorkbook.Worksheets(1).UsedRange
         Set iCell = .Find(What:="Искомый_текст", LookIn:=xlValues, LookAt:=xlPart)         
         If Not iCell Is Nothing Then
            iAddress$ = iCell.Address
            iColor& = RGB(255, 255, 0)
            Do
               iCell.Interior.Color = iColor&
               Set iCell = .FindNext(After:=iCell)
            Loop Until iCell.Address = iAddress$
          End If
    End With
End Sub
pashulka вне форума
Закрытая тема

          Оплата за обучение в Kata Academy только после твоего трудоустройства в IT!
          Начни карьеру Middle Java-разработчика, подробнее на сайте академии, ссылка - https://clck.ru/fCqwP

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменить цвет в диалоговом окне MessageDlg Михаил Юрьевич Общие вопросы Delphi 8 27.04.2008 18:20
Изменить цвет неактивного Edit Xardas Общие вопросы Delphi 11 20.01.2008 22:38
Как изменить цвет Михаил Юрьевич Общие вопросы Delphi 5 14.01.2008 17:38
Можно ли как-нить изменить цвет отдельной ячейки в DBGride? 3lander БД в Delphi 2 10.10.2007 21:23
Как изменить цвет шрифта кнопки + объявление OnClick Yury Общие вопросы Delphi 7 04.05.2007 04:55