Цитата |
---|
RAN написал: переменные лучше объявлять cразу после Sub |
спорное утверждение. Когда-то да, когда-то нет. Зависит от величины кода. Иногда удобнее для определенных блоков переменные объявлять непосредственно перед блоком, в котором они используются. Хотя сам так делаю в основном на стадии тестирования и разработки кода - потом все равно переношу все в начало и разбиваю по типам. Но это исключительно для своего удобства, чтобы видеть какие переменные уже использовались.
nicex, Вам бы хоть основы основ почитать. Переменная во вложенном цикле это как спичка: если достали одну, то зажечь её два раза не получится, надо вторую доставать
Код |
---|
Dim arr, i As Long,i2 as Long
'используем переменную i - это внешний цикл
For i = 1 To Cells(Rows.Count, "B").End(xlUp).Row
If Cells(i, 9) < 300 Then Cells(i, 10) = 0
Columns("R:R").Select
arr = Array("темно-синий", "синий", _
"ярко-синий", "синий", _
"темно-синий", "синий")
'переменную i здесь нельзя уже использовать, т.к. она применяется в родительском цикле: For i = 1 To Cells(Rows.Count, "B").End(xlUp).Row
For i2 = 0 To UBound(arr) Step 2
Selection.Replace What:=arr(i2), Replacement:=arr(i2 + 1), LookAt:= _
xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next |
К слову, чтобы не поняли неверно: одну и ту же переменную можно использовать сколько угодно раз, но нельзя использовать одну и ту же для всех циклов, вложенных друг в друга. Вот простой пример. По сути это то, что написано у Вас сейчас:
Код |
---|
For i = 1 to 10
for i = 12 to 18
msgbox i 'какое же значение выводить VBA здесь, если i у нас при первом же проходе по такой логике может быть и 1 и 12?
next
next |
Вы могли бы подумать, что при таком подходе VBA должен использовать только переменную из последнего цикла. Но...Ситуация 2:
Код |
---|
For i = 1 to 10 'цикл по строкам листа
for i = 12 to 18 'цикл по столбцам листа
msgbox Cells(i,i).Value 'какое же значение выводить VBA здесь, если мы не даем однозначно понять какая из i куда должна попасть?
next
next |
Вот и весь сказ.