Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Проблема написания функции задания цвета ячейки в VBA, которая бы работала в качестве формулы
 
Пробовал менять цвет ячейки по алгоритму предложенному в ссылке, которую указал Максим, но цвет не меняется и не копируется из другой ячейки. Возможно потому, что у меня Excel 2013 года.
Изменено: maxkrav - 03.03.2015 17:55:32
Проблема написания функции задания цвета ячейки в VBA, которая бы работала в качестве формулы
 
Действительно, многие пишут, что изменять свойства ячейки через функцию невозможно.
Например, в книге Джона Уокенбаха "Excel 2010: профессиональное программирование на VBA" на стр. 290 написано: "При разработке пользовательских функций важно понимать различия между функциями, которые вызываются из других процедур VBA, и функциями, используемыми в формулах рабочего листа. Функции, используемые в формулах рабочего листа,— “пассивные”. Например, такая функция не может обрабатывать диапазоны либо изменять содержимое рабочего листа. Соответствующий практический пример приведен ниже. Можете попробовать написать функцию рабочего листа, которая изменяет содержимое ячейки. Например, рекомендуется всегда иметь под рукой формулу, которая изменяет цвет текста в ячейке в зависимости от значения этой ячейки. Однако несмотря ни на что, такую функцию написать невозможно. Что бы вы ни делали, функция всегда будет возвращать ошибку. Помните: функция возвращает значение, но не может выполнять операции над объектами.
Следует отметить, что из этого правила имеется одно исключение. Вы можете изменить текст комментария ячейки с помощью пользовательской функции VBA, код которой приведен ниже.
Function ModifyComment (Cell As Range, Cmt As String)
Cell.Comment.Text = Cmt
End Function"

Но встречаются сообщения, что можно как-то обойти эти ограничения. Например, здесь http://www.cyberforum.ru/ms-excel/thread1339420.html участник форума сказал, что "Где то в разделе по vba местные гуру советовали как обойти это ограничение". Правда, не нашел как они обошли ограничение.

Попробовал сам обойти это ограничение путем вызова процедуры в функции, но не получилось:
Код
Public Function AskColor(Cell As Range, Color As Integer)    
    SetColor(Cell, Color)
    AskColor = Cell.Interior.ColorIndex
End Function

Sub SetColor(Cell As Range, Color As Integer)   
    Cell.Interior.ColorIndex = Color
End Sub
Возможно, я где-то ошибся. Либо существует другая возможность обойти ограничение невозможности изменения свойства ячейки через функцию.

Если кто-то знает как обойти ограничение прошу написать.
Проблема написания функции задания цвета ячейки в VBA, которая бы работала в качестве формулы
 
Вы уверены, что невозможно создать функцию, меняющую свойства ячейки?
По коду согласен, но это не меняет сути вопроса.

Код можно записать более корректно, чтобы функция, что-то возвращала (неважно что):
Код
Public Function AskColor(Cell As Range, Color As Integer) 
    Cell.Interior.ColorIndex = Color
    AskColor = Cell.Interior.ColorIndex
End Function 
Ведь процедуры могут менять свойства ячейки.
Например:
Код
Sub AskColor () 
    Cells(5, 5).Interior.ColorIndex = 6
End Sub
Но процедуры не подходят, поскольку они не отображаются на рабочем листе в качестве формулы.
Поэтому задав точно такую же процедуру установки цвета ячейки как и для функции выше
Код
Sub AskColor(Cell As Range, Color As Integer)     
    Cell.Interior.ColorIndex = Color
End Sub
ей невозможно будет воспользоваться на рабочем листе.

Почему тогда функция не может менять свойства ячейки?
Может можно как-то обойти это ограничение, если оно существует?
Например, в функции вызвать процедуру, в которую в качестве аргумента передать переменные из функции?
Изменено: maxkrav - 02.03.2015 01:43:22
Проблема написания функции задания цвета ячейки в VBA, которая бы работала в качестве формулы
 
Здравствуйте!

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

Я написал такой вариант:
Код
Public Function AskColor(Cell As Range, Color As Integer)
Cell.Interior.ColorIndex = Color
End Function
Но она не работает на рабочем листе в качестве формулы.
Хотя похожая функция определения цвета ячейки, где аргументом выступает адрес ячейки, работает:
Код
Public Function ColorNomInterior(Cell As Range)
ColorNomInterior = Cell.Interior.ColorIndex
End Function

Спасибо!
Заполнение ячеек формулой без учета условного форматирования
 
Спасибо большое. Все оказывается просто. В инете час искал не нашел. А вы за 5 минут ответили )
Заполнение ячеек формулой без учета условного форматирования
 
Здравствуйте!

Прошу помочь со следующей проблемой.

Нужно протянуть различные формулы в строках, но проблема в том, что каждый столбец имеет свое условное форматирование.

Как протянуть формулу в строке, чтобы при этом вставлялась только формула с изменением относительных ссылок, а остальные данные не менялись вроде условного форматирования?

Спасибо.
Страницы: 1
Наверх