Форматирование ячейки после вызова пользовательской функции

Программирование на Visual Basic for Applications
B
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 27.09.2005 (Вт) 15:09

Форматирование ячейки после вызова пользовательской функции

Сообщение B » 27.09.2005 (Вт) 15:15

Подскажите
Написана функция на VBA в Excel XP. Надо, чтобы она не только возвращала число, но и форматировала диапазон (при пересчете). Возможно ли это?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.09.2005 (Вт) 15:36

Нет, функции листа не могут изменять форматирование ячеек. Используй условное форматирование.
Lasciate ogni speranza, voi ch'entrate.

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 27.09.2005 (Вт) 15:37

Функции могут возвращать только значения и не могут изменять форматированя. Только недавно обсуждалось минимум в 2х темах. Используй поиск по форуму.
Life is what happens to us when we are planning to do something else...

B
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 27.09.2005 (Вт) 15:09

Сообщение B » 27.09.2005 (Вт) 16:18

Может можно как-то извратиться?

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 27.09.2005 (Вт) 16:53

B писал(а):Может можно как-то извратиться?

Подумав, решил обмануть эксель и вынести применение форматирования в отдельную процедуру и вызывать ее из функции. Т.е. вот так:
Код: Выделить всё
Function xxx(rr)
Call changefont(Application.Caller)
xxx = rr
End Function

Sub changefont(MyRange As Range)
MyRange.Font.Bold = True
End Sub

И нифига! Ошибки не выдает, но и форматирование не применяет.
Но ведь если нельзя, но очень хочется, то можно!
Идея изврата состоит в следующем:
Объявить Public Массив. Функция, когда надо, вместо того, чтобы применять форматирование, будет заносить в этот массив Range, к которому нужно его применить.
С помощью OnTime, либо с помощью таймера и невидимой формы, мы просматриваем этот массив, и если в нем есть элементы, то применяем к ним форматирование и удаляем (из массива).

Но это полное извращение. Впрочем, как заказывали...
Life is what happens to us when we are planning to do something else...

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 27.09.2005 (Вт) 17:04

Условное форматирование тебе не подошло, или ты не пытался?

Можешь поточнее, в чем состоит задача? Какие условия для форматирования?
Быть... или не быть. Вот. В чём вопрос?

B
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 27.09.2005 (Вт) 15:09

Сообщение B » 27.09.2005 (Вт) 17:14

невидимая форма - это круто, конечно,
а таймер есть в контролах excel?

B
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 27.09.2005 (Вт) 15:09

Сообщение B » 27.09.2005 (Вт) 17:19

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

ф - формат
о - нет формата

о | о | Ф
о | о | Ф
о | Ф | о
о | Ф | о
о | Ф | о
Ф | о | о
ф | о | о
ф | о | о

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 27.09.2005 (Вт) 17:27

B писал(а):невидимая форма - это круто, конечно,
а таймер есть в контролах excel?

Нет конечно! :D Но он свободно в инете гуляет. В частности на сайте MSDN можно найти по запросу IETimer.
Life is what happens to us when we are planning to do something else...

B
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 27.09.2005 (Вт) 15:09

Сообщение B » 27.09.2005 (Вт) 17:32

круто, посмотрю
а можно процедуру на пересчет зацепить?

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 27.09.2005 (Вт) 17:40

B писал(а):а можно процедуру на пересчет зацепить?

Можно. В модуле WorkBook:
Код: Выделить всё
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

End Sub
Life is what happens to us when we are planning to do something else...


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30

    TopList  
cron