Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Своя формула в MS Excel


Автор: valex13 28.12.2004, 06:47
Мне неободимо сделать формулу, которая бы в зависимолти от значения закрашивала бы ячейку в которой находиться формула определенным цветом. Вот код:
Код

Dim xlMyColor As Long

Public Function ИЗМЕНИТЬЦВЕТ(Значение As Double, Порог As Double, Цвет As Long) As Double
If Значение >= Порог Then
  xlMyColor = Цвет
  Call ChangeColor
End If
  ИЗМЕНИТЬЦВЕТ = Значение
End Function


Private Sub ChangeColor()
 With Cells(ActiveCell.Row, ActiveCell.Column).Interior
       .ColorIndex = xlMyColor
       .Pattern = xlSolid
   End With
End Sub


Цвет не меняется. Я смотрел в дебуге. Значения .ColorIndex не изменяются. Если отдельно запустить процедуру ChangeColor все работает. В чем может быть причина???
Не пойму. Может быть во время "расчета" формулы некоторые атрибуты ячейки Readonly??

Автор: Staruha 28.12.2004, 22:10
Я так делаю в VBA
Private Sub CommandButton1_Click()

Код

Dim d As Integer
Dim v As Integer

d = UsedRange.Rows.Count

  For rwIndex = 2 To d

         v = UsedRange.Columns.Count
            For r = 2 To v

      If Cells(rwIndex, r).Value > 0 Then
                 Cells(rwIndex, r).Interior.ColorIndex = 39
     Else
              Cells(rwIndex, r).Interior.ColorIndex = 0

   End If

Next r

Next rwIndex

End Sub

Можно ,конечно и в разные цвета выкрасить

Автор: cardinal 28.12.2004, 22:30
Старуха, что же у тебя с кодом не лады такие? smile По всему экрану расбросан smile

Автор: Staruha 28.12.2004, 22:59
Копировала из проги. Помнишь мы Табель - календарь делали. Ну вот я там выходные крашу и значения. Удалила что не в тему .Вот так получилось. smile

Автор: valex13 29.12.2004, 13:36
Проблема не втом, что не расскрашивает, или я не знаю как делать, а в том ,что из формулы не раскрашивает.
Если процедуру ChangeColor() навешать на кнопку, то работает, а если при выполнении формулы, то нет.
В чем проблема!!

Старуха ты скопируй код в макрос к Екселю и попробуй. Будет у тебя работать или нет?

Автор: Akina 29.12.2004, 13:46
valex13
F А почему просто не задействовать условное форматирование?

Автор: Гость_Старуха 29.12.2004, 15:23
С твоим кодом я смогу разобраться не сейчас.Мой код работает.
Вечером посмотрю

Автор: Staruha 29.12.2004, 22:10
Так . Пользовательская функция есть. А три параметра где брать?
И потом

Цитата
Код

Private Sub ChangeColor()
With Cells(ActiveCell.Row, ActiveCell.Column).Interior
      .ColorIndex = xlMyColor
      .Pattern = xlSolid
  End With

ты реагируешь изменением цвета на изменение цвета.

Автор: valex13 30.12.2004, 06:17
Первый это любое число, которое ты хочешь показать в ячейки. Второй - порог. Если число, которое ты передаешь в функцию больше порога, то окрашивать текущую ячейку цветом. Цвет - это третьий параметр.

Вот пример использования:
В ячейке B1 напиши =ИЗМЕНИТЬЦВЕТ(A1,2,5)
А в ячйку A1 помести число 5.
Добавлено @ 06:19
Старуха
xlMyColor - изменяется в функции и вызывается процедура изменения цвета ячейки. Отдельно я ее написал, чтобы можно было ее протестировать отдельно от функции - и она работает, а вот совместно не хотят.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)