Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция считает раскрашенные ячейки... 
V
    Опции темы
VovaPHP
Дата 3.5.2007, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 13.9.2006

Репутация: нет
Всего: нет



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

Код

Function Colors(adr)

Colors = 0

Dim p
For p = 1 To adr.Count
If adr(p).Interior.ColorIndex = 43 Then
Colors = Colors + 1
End If
Next p

End Function

PM MAIL   Вверх
bilya
Дата 4.5.2007, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 3.1.2007

Репутация: 1
Всего: 1



Может быть так:
Код

If adr(p).Interior.ColorIndex <> xlNone Then
?
PM MAIL   Вверх
VovaPHP
Дата 4.5.2007, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 13.9.2006

Репутация: нет
Всего: нет



А что это меняет? На всяк случай уточню - это VBA - функция для екселя. Дело в том что функция не срабатывает при изменении цвета. Срабатывает она только если зайти в ячейку.
PM MAIL   Вверх
pavel55
Дата 5.5.2007, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.5.2007

Репутация: нет
Всего: нет



В Excel нельзя отловить изменение цвета ячейки.
PM MAIL   Вверх
bilya
Дата 5.5.2007, 06:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 3.1.2007

Репутация: 1
Всего: 1



Ошибочка вышла - недопонял задачу  smile 
Если на этот раз правильно понимаю, вам нужно поймать событие изменения цвета ячейки? Если так, то посмотрите это - скидал на событии листа
Код

Dim cVet As Long
Dim adrY

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If cVet <> 0 Then
    If cVet <> ActiveSheet.Range(adrY).Interior.Color Then
        MsgBox "Цвет был изменен"
    End If
End If

cVet = ActiveCell.Interior.Color
adrY = Target.Address

End Sub

Сигнализирует при смене ячейки, если был изменен цвет

Это сообщение отредактировал(а) bilya - 5.5.2007, 06:45
PM MAIL   Вверх
mihanik
Дата 15.5.2007, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



Помечу решённым...


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
VovaPHP
Дата 15.5.2007, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 13.9.2006

Репутация: нет
Всего: нет



спасибо была bylia. А как теперь правильно запустить перерасчет?
PM MAIL   Вверх
mihanik
Дата 15.5.2007, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 9
Всего: 109



Модератор: Пожалуйста, один топик - один вопрос.


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
bilya
Дата 15.5.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 3.1.2007

Репутация: 1
Всего: 1



Наверное, убираем
Код

MsgBox "Цвет был изменен"
, а в этом месте вызываем функцию или процедуру делающую перерасчет
 smile 
PM MAIL   Вверх
VovaPHP
  Дата 22.5.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 13.9.2006

Репутация: нет
Всего: нет



Все работает. Спасибо bilya  

Код

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If cVet <> 0 Then
    If cVet <> ActiveSheet.Range(adrY).Interior.Color Then
        'MsgBox "Цвет был изменен"
        Application.CalculateFull
    End If
End If

cVet = ActiveCell.Interior.Color
adrY = Target.Address

End Sub

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0917 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.