Другие языки программирования и технологии

VBA (Excel)

При создании макроса выдает ошибку 1004. Не могу разобраться, чего ему не хватает
Код:
Sub ДаБудетЦвет ()
Range("A2:C500").Interior.Color = RGB(255, 255, 255)
Min = Cells(2, 3)
Max = Cells(2, 3)
a = 2
While Cells(a, 3) <> 0
a = a + 1
Wend
For i = 2 To a
If (Cells(i, 3) < Min) And (Cells(i, 3) <> 0) Then
Min = Cells(i, 3)
m = i
End If
If Cells(i, 3) > Max Then
Max = Cells(i, 3)
x = i
End If
Next
For j = 1 To 3
Cells(m, j).Interior.Color = RGB(0, 0, 255)
Cells(x, j).Interior.Color = RGB(255, 0, 0)
Next
End Sub
Комментарий к коду для Екатерины.
Цикл
a = 2
While Cells(a, 3) <> 0
a = a + 1
Wend
эти строки можно заменить на а=Cells(2, 3).End(xlDown).Row
Определяет количество заполненных, идущих подряд ячеек.
Поэтому в следующем условии проверка на пустые не нужна
Да и весь код можно сократить и объявить переменные для порядка.

Sub ДаБудетЦвет ()
Dim i As Long, m As Long, x As Long
Dim Min As Double, Max As Double
Range("A2:C500").ClearFormats
Min = Cells(2, 3): Max = Cells(2, 3)
For i = 2 To Cells(2, 3).End(xlDown).Row
If Cells(i, 3) < Min Then Min = Cells(i, 3): m = i
If Cells(i, 3) > Max Then Max = Cells(i, 3): x = i
Next
Range(Cells(m, 1), Cells(m, 3)).Interior.Color = RGB(0, 0, 255)
Range(Cells(x, 1), Cells(x, 3)).Interior.Color = RGB(255, 0, 0)
End Sub
Иван Чирухин
Иван Чирухин
27 337
Лучший ответ
если условие If (Cells(i, 3) < Min) And (Cells(i, 3) <> 0) не выполняется, то m = i тоже не выполнится. нужно пересмотреть условие. ошибка из-за того, чтто m не определена. мин - макс на одной ячейке? и еще используй debug. и найдешь ошибки. Успехов!
Дело в том, что в зависимости от данных могут никогда не выполниться условия в ифах, то есть переменные м и х будут пустые, что вызовет ошибку при их использовании в качестве аргумента для Селлс. Надо присвоить им какие-то значения по умолчанию.

Кстати, область видимости переменной - вся процедура.
Серёга Чибизов
Серёга Чибизов
11 998
в последнем цикле переменные м и икс не определены, т. к. область их видимости - предыдущие циклы, объявлены они там