Автоматическое изменение заливки ячеек в зависимости от наличия комментария

Автор verdim, 13.06.2012, 15:49

« назад - далее »

verdim

Цитата: NooBasTiK от 13.06.2012, 17:33
Вот как пример, заливает синим если нет примечания, заливает зеленым если есть примечание
Уважаемый !!! Руками все умеют ...

verdim

Цитата: Serge 007 от 13.06.2012, 17:51
Цитата: NooBasTiK от 13.06.2012, 17:40
В моем варианте надо примечание вставлять в столбец H
Пробовал - толку ноль.

Цитата: NooBasTiK от 13.06.2012, 17:39
Я сделал, у меня работает :) Офис 2010 могу скрин выложить :)
Я видео могу выложить

ЗЫ Уверен - Вы просто неправильно что-то поняли. Без VBA это реализовать скорее всего нельзя
Я просто не представляю себе: как тут обойтись без VBA.
Насколько я знаю, выражения в командной строке Excel типа "=СУММ(A1:C10)" это тоже VBA. Или я не прав ???

verdim

Цитата: NooBasTiK от 13.06.2012, 17:39
Я сделал, у меня работает :) Офис 2010 могу скрин выложить :)
У Вас работает, но только это не примечение. Примечание и комментарий (полумесяц такой красненький в правом верхнем углу ячейки) это одно и тоже. А у Вас просто определяется: есть текст в ячейке или нет. Такой вывод я сделал по внешнему виду и по способу ввода. Если ввести просто текст (например, "муму"), то строка действительно заливается. Если же использовать пункт меню "Вставить примечание", то Ваш пример показывает довольно внушительную фигу.

Serge 007

Цитата: NooBasTiK от 13.06.2012, 17:52
...я видео то же могу записать!
Выкладывайте

Цитата: NooBasTiK от 13.06.2012, 17:54
В моем файле, который вы скачали, есть условия УФ?
Есть. Но они касаются только значений ячеек, но никак не примечаний

Цитата: verdim от 13.06.2012, 19:32
У Вас работает, но только это не примечание.
Вот теперь я разобрался :)
NooBasTiK, учите основные термины Excel и не вводите людей в заблуждение!
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Шпец Докапыч

Цитата: verdim от 13.06.2012, 18:56
меня интересует автоматическое обновление цвета заливки при установке\удалении примечания
Поскольку стандартно Excel не располагает таким событием, то предлагаю воспользоваться событием "выделение ячейки", расположив в модуле листа:
Private Sub Worksheet_Change(ByVal Target As Range)
  If [A1] <> ActiveSheet.Comments.Count Then
    СомЦвет4 [диапазон]
    [A1] = ActiveSheet.Comments.Count
  End If
End Sub

Здесь ячейка "A1" выполняет роль хранилища числа комментариев на листе. Вместо неё можно использовать имя (Names).
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

verdim

Цитата: Шпец Докапыч от 13.06.2012, 22:39
Цитата: verdim от 13.06.2012, 18:56
меня интересует автоматическое обновление цвета заливки при установке\удалении примечания
Поскольку стандартно Excel не располагает таким событием, то предлагаю воспользоваться событием "выделение ячейки", расположив в модуле листа:
Private Sub Worksheet_Change(ByVal Target As Range)
  If [A1] <> ActiveSheet.Comments.Count Then
    СомЦвет4 [диапазон]
    [A1] = ActiveSheet.Comments.Count
  End If
End Sub

Здесь ячейка "A1" выполняет роль хранилища числа комментариев на листе. Вместо неё можно использовать имя (Names).
Опечалили ...
В свое время, среди студентов стройотрядов ходила песенка с таким припевом:
"... Про такие места мне хотелось бы сказать: Аппатит твою Хибины, богу в душу Нифелины, в рот тебе Байкал отдать, Аппатит - Хибины мать ...".
Извините за терминологию, но ассоциации возникают примерно такие.
Спасибо, что наставили на путь истинный: пошел творить ...

Шпец Докапыч

Цитата: verdim от 14.06.2012, 11:15
Спасибо, что наставили на путь истинный: пошел творить ...
Всегда пожалуйста.
Небольшая неточность: "выделение ячейки" - Worksheet_SelectionChange, а "изменение" (Worksheet_Change) случайно прицепилось от предыдущего эксперимента.
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

verdim

Цитата: Шпец Докапыч от 14.06.2012, 11:33
Цитата: verdim от 14.06.2012, 11:15
Спасибо, что наставили на путь истинный: пошел творить ...
Всегда пожалуйста.
Небольшая неточность: "выделение ячейки" - Worksheet_SelectionChange, а "изменение" (Worksheet_Change) случайно прицепилось от предыдущего эксперимента.
Может быть это связано с Вашим уточнением.
При вводе и запуске макроса он спрашивает: Who is СомЦвет4 ???
Вставил в модуль с макросом этот самый СомЦвет4. Теперь он, сам создав Application.Run..... на него же и ругается.
Опять затык. И опять при ручном запуске все без сучка ...
Протокол допроса прилагается.

Шпец Докапыч

Во вложении собранный вариант, готовый к использованию.
Для понимания его работы следует знать о событиях листа Excel и отличать обычный модуль от модуля листа, модуля книги, модуля формы.
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

verdim

Цитата: Шпец Докапыч от 14.06.2012, 17:25
Во вложении собранный вариант, готовый к использованию.
Для понимания его работы следует знать о событиях листа Excel и отличать обычный модуль от модуля листа, модуля книги, модуля формы.
Огромное спасибо. Век учись, а из первого класса уж очень хочется вылезти ...

verdim

О, как я зол, как я зол (на себя, естественно). >:(
Наверное, это уже диагноз.
Путь поиска решения:
1 отмечаю в проекте "BAZA.xls" пункт "Microsoft Excel Object" и щелкаю кнопку Insert;
2.в открывшемся окне Module1 щелкаю Insert-Procedure и корректирую текст function-процедуры, добавив "диапазон As Range" и "As Single";
3.ввожу текст функции и сохраняю (значек дискеты);
4.щелкаю по "Лист9(mont)";
5.в открывшемся окне в левом меню выбираю "Worksheet", а в правом - "SelectionChange";
6. автоматически формируется sub-функция, в которую заношу ее текст;
7.сохраняю (значек дискеты).
А дальше ... Честно признаюсь, что дальше был тупик.
Оставить все без изменения невозможно: откуда функция знает с чем надо работать.
Завожу все данные для функции "СомЦвет" (так она называется для этого случая), так она портит ячейку с курсором и опять-таки работает только один раз. При попытке изменить (установить\удалить комментарий), выдается ошибка о неопределенности имени "СомЦвет" (???)
Я, честно говоря, хоть это меня не украшает, даже тупо установил управляющие параметра у листа и книги так, как у Вас, - не помогает.
Чего-то я недопонимаю ...
Не подскажете в чем моя теперь ошибка ???

Шпец Докапыч

Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

verdim

Цитата: Шпец Докапыч от 15.06.2012, 13:54
Что если указать путь до функции точнее?
Module1.СомЦвет [диапазон]
Щас попробую. Правда смущает то, что Module1 аж Цвай Штукен.

verdim

Увы. Не находит.
Смущает, однако, и то, что мне никак не избавиться от "#ЗНАЧ!" в ячейке с курсором при организации функции "СомЦвет", в то время как у Вас в этом смысле все чисто. Надо же ей как-то передать интервал ... Все тихо до тех пор, пока не "дотронешься" до комментария ... После этого "СомЦвет" и не находится. Т.е., Worksheet, я так понимаю, запускается, но не может по какой-то причине найти "СомЦвет". Я проверил шрифт в вызове и имени функции: то и другое на русском. Может быть Worksheet недолюбливает Россию ???

Шпец Докапыч

Тут следует уточнить один момент. Функция СомЦвет в моём примере равноценна процедуре:
Sub СомЦвет(диапазон As Range)
Т.е. подобная реализация не годится для использования функции в качестве пользовательской (UDF). Соответственно диапазон нужно указывать при вызове процедуры из кода (должен быть прописан в Worksheet_SelectionChange). Если же задача ставится обойти ограничения пользовательской функции и менять заливку формулой, то реализация уже будет другой. Как минимум лучше будет использовать событие Worksheet_Calculate или заливать уже непосредственно формулой (что вряд ли имеет смысл).

Ещё можно объединить код в один (тогда не надо будет искать СомЦвет):
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Range
  If [A1] <> Comments.Count Then
    For Each i In [диапазон]
     If i.Comment Is Nothing Then
       i.Interior.ColorIndex = 6
     Else
       i.Interior.ColorIndex = 4
     End If
    Next
    [A1] = Comments.Count
  End If
End Sub
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли