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

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

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

verdim

Произведен эксперимент (это, конечно, бред, но, все-таки, результат).
"Target" был помещен в параметр ComЦвет вместо "диапазон" и начались удивительные вещи:
1.при движении кусора по ячейкам, они раскрашивались сообразно с алгоритмом;
2.при действии с комментарием раскрас происходил, но довольно странным образом:
   надо было уйти на любую ячейку, а затем вернуться.
Уточнение: красятся все ячейки; даже те, которые вне диапазона.
Полученное указывает на то, что функция находится (???) и никакого "#ЗНАЧ!" нет. Возникает вопрос: почему с "диапазон" не происходит хотя бы тоже самое и сама функция не находится (+ #ЗНАЧ) ???

verdim

Цитата: Шпец Докапыч от 15.06.2012, 16:17
Тут следует уточнить один момент. Функция СомЦвет в моём примере равноценна процедуре:
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

Честно говоря, я тихо бледнею:
мне никогда не удавалось установить диапазон для SUB-функции, - она была просто не видна ...
Или я опять косил ...

verdim

Честно говоря, я несовсем понимаю, как мы будем ограничивать диапазон в случаи объединения:
боюсь, функция будет метелить все подряд ячейки без разбора ... :-X
Извините: это уже бандитизм. :D
Кстати, объединил и проверил: функция действительно не видна ...  :'(
Поэтому передать ей диапазон у меня не получилось. :'(

Шпец Докапыч

Откуда берётся "#ЗНАЧ!", если на листе нет формул? А если есть и функция возвращает "#ЗНАЧ!", то это означает, что функция определяется, иначе было бы "#ИМЯ?".

Во вложении я поместил в свой пример код из ответа #29. Предлагаю поэкспериментировать с ним. )
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

verdim

Цитата: Шпец Докапыч от 15.06.2012, 17:09
Откуда берётся "#ЗНАЧ!", если на листе нет формул? А если есть и функция возвращает "#ЗНАЧ!", то это означает, что функция определяется, иначе было бы "#ИМЯ?".

Во вложении я поместил в свой пример код из ответа #29. Предлагаю поэкспериментировать с ним. )
Готовлю пистолет: сегодня застрелюсь ... С такой скоростью ... и опять не понятно ... Где мои патроны ???

Шпец Докапыч

А что не так? В модуле листа, вместо [хрю], указываем [F5:G15], например.
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

verdim

Я перед Вами преклоняю колени: :-*
Вы выделили диапазон и дали ему имя "хрю". ::)
Далее, вы с этим именем работаете как с массивом ... ;D
Мать моя женщина: значит мозги у меня не окончательно завяли ... ::)
Единственный остался теперь вопрос:
хотелось бы, чтобы он увеличился после вставки в конец (после последней ячейки) ??? Опять переназначать диапазон ???
Как-то против автоматизации, понимаете ...  :-\ С добавлением и удалением то внутри диапазона все O'key ...  ::)

Шпец Докапыч

Определить последнюю ячейку и сделать "резиновый" диапазон, - это классика жанра, например:
    LR = [A65536].End(xlUp).Row
    For Each i In Range("A2:A" & LR)
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

verdim

Добрый день !!!
Пока вопросов нет, поэтому тему, в принципе, можно закрыть.
Единственно: не подскажете где я могу найти документацию по функциям VBA на русском языке ???
Дело в том, что я в English не Копенгаген, а пользоваться автопереводчиками как-то не тянет:
все время получается "Он шел на Одессу. Он вышел к Херсону."
Спасибо за помощь.

Serge 007

Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390