Страницы: 1
RSS
Почему цикл выполняет только одно действие?
 
Помогите пожалуйста разобраться с циклом люди добрые!
Есть необходимость присвоить определенной переменной последовательно 4 значения: 0,1,2,3
Причем после каждого присваивания процедура должна осуществлять переход
к другому блоку операторов и помимо этого еще передавать определенные значения 4-х ячеек
На практике же по понятным причинам выполняется лишь один первый переход с присваиванием значения лишь одной ячейки
Код
For u = 0 To 3
         If u = 1 Then: Swar = Sheets("List").Range("FG22"): GoTo Enter:
         If u = 2 Then: Swar = Sheets("List").Range("FH22"): GoTo Enter:
         If u = 3 Then: Swar = Sheets("List").Range("FI22"): GoTo Enter:
         If u = 0 Then: Swar = Sheets("List").Range("FF22"): GoTo Enter:
    Next u
Enter: 
    Select Case i
    Case Is < 0
       Toggle1 = False
    Case Is = 0
       Cells(3 + u, 2).Value = Swar
    Case Is <= 17 - j
       Cells(3 + u, (1 + i) + (j - 1)).Value = Swar
    Case Is <= 33 - j
       Cells(8 + u, (1 + i) - (17 - j)).Value = Swar
    Case Is <= 49 - j
       Cells(13 + u, (1 + i) - (33 - j)).Value = Swar
    Case Is <= 65 - j
       Cells(18 + u, (1 + i) - (49 - j)).Value = Swar
    Case Is <= 81 - j - (17 - j)
       Cells(23 + u, (1 + i) - (65 - j)).Value = Swar
    Case Is > 81 - j - (17 - j)
       Toggle1 = False
    End Select

это далеко не весь код но идея думаю понятная

никак не могу понять как выполнить тело этого цикла полностью?
а может есть решение попроще...

в итоге в определенном месте по нажатию кнопки и в зависимости от значения счетчика i должен появиться столбик
из значений 4-х ячеек:FG22,FH22,FI22,FF22
Изменено: Vrajadas - 11.10.2013 22:53:50
 
Если правильно понял, то может быть есть смысл перенести Select Case в тело цикла? А проверки в цикле убрать.
 
Если значение совпадает, выходим из цикла на следующую строку... Какой смысл? При несовпадениях после завершения цикла выходим тоже на эту строку...

Условие в цикле одной строкой:
Swar = Sheets("List").Cells(22, u+сами посчитайте)...
 
Заменить
Код
GoTo Enter

на
Код
GoSub Enter

После
Код
End Select

вставить
Код
Return
Изменено: RAN - 11.10.2013 22:55:16
 
хорошо попробуем... но не совсем понятно что поставить после .Cells(22,u+?)
и если с этим более менее ясно то остается вопрос как присвоить значения
перменной u находящейся внутри блока Selecty Case
Изменено: Vrajadas - 11.10.2013 23:02:04
 
Чтобы получился номер нужного столбца. Мне считать лень.

Но цикл зачем? Вы не объяснили. В показанном варианте это лишние строки, не более.
 
да это я понял
но при этом в следующем блоке мне жизненно необходимо чтобы
выполнился ряд операций:
1) при u=o затем вставка Swar(1)
2) при u=1 затем вставка Swar(2)
и т.д.
 
Спасибо RAN!
так просто решили задачу...
а я весь день мучался...
заработало на УРА!  :)  

Решение от RAN:
Код
For u = 0 To 3
         If u = 1 Then: Swar = Sheets("List").Range("FG22"): GoSub Enter:
         If u = 2 Then: Swar = Sheets("List").Range("FH22"): GoSub Enter:
         If u = 3 Then: Swar = Sheets("List").Range("FI22"): GoSub Enter:
         If u = 0 Then: Swar = Sheets("List").Range("FF22"): GoSub Enter:
    Next u
Enter: 
    Select Case i
    Case Is < 0
       Toggle1 = False
    Case Is = 0
       Cells(3 + u, 2).Value = Swar
    Case Is <= 17 - j
       Cells(3 + u, (1 + i) + (j - 1)).Value = Swar
    Case Is <= 33 - j
       Cells(8 + u, (1 + i) - (17 - j)).Value = Swar
    Case Is <= 49 - j
       Cells(13 + u, (1 + i) - (33 - j)).Value = Swar
    Case Is <= 65 - j
       Cells(18 + u, (1 + i) - (49 - j)).Value = Swar
    Case Is <= 81 - j - (17 - j)
       Cells(23 + u, (1 + i) - (65 - j)).Value = Swar
    Case Is > 81 - j - (17 - j)
       Toggle1 = False
    End Select
 Return
Изменено: Vrajadas - 11.10.2013 23:10:21
 
Мне, в отличие от Виктора, лень было разбираться, как нормальный код написать.  :D  

PS А лень, как известно, двигатель прогресса.  :)

PSS Все ударились в "как", но не ответили "почему"

По GoTo вы просто выходите из цикла.
По GoSub - выходите в подпроцедуру, а по Return - возвращаетесь в цикл.
Изменено: RAN - 11.10.2013 23:23:34
 
только теперь почему то когда значение 4-й нижней ячейки столбца <>"" появляется столбец сразу из 5 строчек вместо 4-х  :)  
причем значения 4 и 5 одинаковые...

нет худа без добра...
но прогресс налицо глядишь еще через денек найду в чем тут дело ))))
Изменено: Vrajadas - 11.10.2013 23:24:56
 
Открыть новую книгу Excel, составить по рабочей задаче пример, показать народу.
Часто такое лечение помогает.
 
Разобрался! Всем спасибо! ((( :)  )))

спасибо RAN за Ваши пояснения теперь работает как часы: заменил последнюю GoSub на GoTo
Код
For u = 0 To 3
         If u = 0 Then: Swar = Sheets("List").Range("FF22"): GoTo Enter:
         If u = 1 Then: Swar = Sheets("List").Range("FG22"): GoSub Enter:
         If u = 2 Then: Swar = Sheets("List").Range("FH22"): GoSub Enter:
         If u = 3 Then: Swar = Sheets("List").Range("FI22"): GoSub Enter:
    Next u
Enter: 
    Select Case i
    Case Is < 0
       Toggle1 = False
    Case Is = 0
       Cells(3 + u, 2).Value = Swar
    Case Is <= 17 - j
       Cells(3 + u, (1 + i) + (j - 1)).Value = Swar
    Case Is <= 33 - j
       Cells(8 + u, (1 + i) - (17 - j)).Value = Swar
    Case Is <= 49 - j
       Cells(13 + u, (1 + i) - (33 - j)).Value = Swar
    Case Is <= 65 - j
       Cells(18 + u, (1 + i) - (49 - j)).Value = Swar
    Case Is <= 81 - j - (17 - j)
       Cells(23 + u, (1 + i) - (65 - j)).Value = Swar
    Case Is > 81 - j - (17 - j)
       Toggle1 = False
    End Select
 Return

и лишней строчки как не бывало...
Изменено: Vrajadas - 11.10.2013 23:44:29
 
А вот это для меня новость.  :)
Не пробовал такой компот.
 
Так не вариант?
Код
For u = 0 To 3
        Swar = Sheets("List").Range("FF22").Offset(, u)
        Select Case i
        Case Is < 0
            Toggle1 = False
        Case Is = 0
            Cells(3 + u, 2).Value = Swar
        Case Is <= 17 - j
            Cells(3 + u, (1 + i) + (j - 1)).Value = Swar
        Case Is <= 33 - j
            Cells(8 + u, (1 + i) - (17 - j)).Value = Swar
        Case Is <= 49 - j
            Cells(13 + u, (1 + i) - (33 - j)).Value = Swar
        Case Is <= 65 - j
            Cells(18 + u, (1 + i) - (49 - j)).Value = Swar
        Case Is <= 81 - j - (17 - j)
            Cells(23 + u, (1 + i) - (65 - j)).Value = Swar
        Case Is > 81 - j - (17 - j)
            Toggle1 = False
        End Select
Next u
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
да этот еще более "продвинутый" вариант
я б ни за что не догадался...
простота* (*краткость)- сестра таланта!

PS. Единственный момент вариант от RAN лучше для меня, так как Swar у меня может принимать
множество разных значений в зависимости от разных ситуаций,
а для простоты я скинул лишь часть кода....
спасибо!!!
Изменено: Vrajadas - 11.10.2013 23:51:47
Страницы: 1
Наверх