Страницы: 1
RSS
Изменение цвета ячейки по условию
 
Доброго времени суток, господа.
Задача - красить ячейку в диапазоне G10:G57 в красный цвет, если ее значение больше 11.
Не пойму почему не хочет работать данный макрос:
Код
Sub RedSelection()
Dim i As Long
For i = 57 To 10 Step -1 
   If Cells(i, 7).Value > 11 Then 
      Cells(i, 7).Interior.Color = 255 
   End If
Next i
End Sub
Пишет ошибку "Type missmatch". Но я так и не пойму что не так с типом.
Изменено: Derian Fox - 15.02.2014 23:10:49
 
Скорее всего в ячейке, на которой останавливается выполнение содержится значение ошибки.
сделайте обход:
Код
Sub RedSelection()
    Dim i As Long
    For i = 57 To 10 Step -1
        If Not IsError(Cells(i, 7).Value) Then
            If Cells(i, 7).Value > 11 Then
                Cells(i, 7).Interior.Color = 255
            End If
        End If
    Next i
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Работает, спасибо :)
 
Если не программно, то используйте Условное форматирование
 
Программно надо ибо там условий будет много.
Теперь не могу сделать выполнение данного макроса для всех страниц книги. Вот код:
Код
Sub RedSelection()
Dim i As Long
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets 'For Each ws In ActiveWorkbook.Sheets - тоже не работает   
   For i = 57 To 10 Step -1      
      If Not IsError(Cells(i, 7).Value) Then         
         If Cells(i, 7).Value > 11 Then            
            Cells(i, 7).Interior.Color = 255         
         End If      
      End If   
   Next i
On Error Resume Next
Next ws
End Sub
Почему-то работает только на одной странице, а у меня их штук 50 в одной книге.
Изменено: Derian Fox - 15.02.2014 23:11:07
 
Ну надо же как-то логически думать...Зачем Вам переменная ws, если Вы её не используете?

ws.Cells(i, 7).Value

P.S. Поясните, пожалуйста - зачем у Вас в коде On Error Resume Next? Какую функцию выполняет?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Попробуйте так:
Код
Sub RedSelection()
Dim i As Long
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets 'For Each ws In ActiveWorkbook.Sheets - тоже не работает
   With ws
    For i = 57 To 10 Step -1
      If Not IsError(.Cells(i, 7).Value) Then
         If .Cells(i, 7).Value > 11 Then
            .Cells(i, 7).Interior.Color = 255
         End If
      End If
    Next i
   End With
On Error Resume Next
Next ws
End Sub
 
С with - end with работает. Спасибо :)
 
Добрый день!
В продолжении темы...
Нужен макрос который проверяет в выделеном диапозоне длину ячейки (кол-во знаков) и красит в цвет если > 60 знаков...
В идеале еще нужно сжимать пробелы и запятую (,) изменять на точку (.) ....
Что то мой чудо код не работает...
Код
Sub RedSelection()

    For Each cc In Selection.Cells
         If Len(cc) > 60 Then
            Range(cc).Interior.Color = 255
         End If
    Next

End Sub
 
Когда я ем,я глух и нем, хитер и быстр, и дьявольски умен.
 
cc ведь это ячейка - значит
Range(cc)
нужно заменить на
cc
А
Len(cc)
лучше писать
Len(cc.value)
или может быть нужно
Len(cc.text)
 
Я проверил так:

Код
cc.Interior.Color = 255
 
работает
Если автоматизировать бардак, то получится автоматизированный бардак.
Страницы: 1
Наверх