Цикл "For" - как изменить параметр "To"

Программирование на Visual Basic for Applications
rdva
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 16.01.2007 (Вт) 20:36

Цикл "For" - как изменить параметр "To"

Сообщение rdva » 19.01.2007 (Пт) 14:19

Набросал цикл:

Код: Выделить всё
Sub experiment()
Application.Workbooks.Item("Power_for_notebooks_17.12.06_препарируемый.xls").Worksheets("(1) Каталог НАШИ").Activate

'транспонируем строку в столбец
Dim Count, Konec As Integer
Konec = Worksheets("(1) Каталог НАШИ").Range("B65535").End(xlUp).Row

For rwIndex = 7 To Konec
        Count = WorksheetFunction.CountA(Range(Cells(rwIndex, 3), Cells(rwIndex, 20)))
        Range(Cells(rwIndex + 1, 2), Cells(rwIndex + Count - 1, 2)).Select
            Selection.EntireRow.Insert
        Range(Cells(rwIndex, 4), Cells(rwIndex, 2 + Count)).Select
            Selection.Copy
        Cells(rwIndex + 1, 3).Select
            Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=True
        rwIndex = rwIndex + Count - 1
        Konec = Worksheets("(1) Каталог НАШИ").Range("B65535").End(xlUp).Row
Next rwIndex
       
End Sub


Так как в процессе работы номер конечной строки постоянно увеличивается, нужно чтобы "To" тоже увеличивался. Данный цикл доходит до значения, полученного переменной"Konec " до начала цикла и останавливается.
Как сделать правильно?

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 19.01.2007 (Пт) 14:33

А можно увидеть пример исходных данных и конечного результата в виде приложения? Что-то мне подсказывает, что это делается в одно, макс. в два действия.
Привет,
KL

rdva
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 16.01.2007 (Вт) 20:36

Сообщение rdva » 19.01.2007 (Пт) 14:40

Вот оно, в реальном исходнике примерно 3500 строк:
Вложения
Primer.xls
(23.5 Кб) Скачиваний: 80

Genyaa
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 17.10.2006 (Вт) 13:46

Сообщение Genyaa » 19.01.2007 (Пт) 16:13

Мне кажется достаточно было бы перейти с "For" на "Do While" c добавлением посчета счетчика rwIndex внутри цикла...

Мне кажется, что цикл For не переопределяет заданные начальный и конеченый пределы в течение своей работы, даже если переменным, которыми эти пределы заданы, присваиваются новые значения в цикле.
Всякое решение плодит новые проблемы.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.01.2007 (Пт) 16:19

Genyaa писал(а):Мне кажется, что цикл For не переопределяет заданные начальный и конеченый пределы в течение своей работы, даже если переменным, которыми эти пределы заданы, присваиваются новые значения в цикле.

Это не кажется, это факт.
Изображение

bi-lya
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 07.08.2006 (Пн) 15:36

Сообщение bi-lya » 19.01.2007 (Пт) 16:27

rdva, вам не понравились советы, которые вам дали в вашей предыдущей теме? Там это же, по-моему, обжевали по-всякому и дали минимум два варианта решения того, что вы задаете :)

rdva
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 16.01.2007 (Вт) 20:36

Сообщение rdva » 19.01.2007 (Пт) 17:31

bi-lya писал(а):rdva, вам не понравились советы, которые вам дали в вашей предыдущей теме? Там это же, по-моему, обжевали по-всякому и дали минимум два варианта решения того, что вы задаете :)

bv-lya, мне кажется вы невнимательно прочитали первый пост в этой теме. Проблема, озвученная в предыдущей теме, успешно решена, благодаря вам и остальным участникам дискуссии, большое человеческое всем вам спасибо за это. Ну а если с точки зрения знающего человека вопросы мои кажутся идиотскими - прошу простить великодушно, все наверное с идиотских вопросов начинали.

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 19.01.2007 (Пт) 17:49

попробуй вот это:

Код: Выделить всё
Option Explicit

Sub test()
    Dim lgStep As Long, i As Long
    lgStep = 9
   
    Application.ScreenUpdating = False
    Sheets("Data").Copy , Sheets(Sheets.Count)
   
    With ActiveSheet
        For i = .Cells(.Rows.Count, 1).End(xlUp).Row To 7 Step -1
            .Rows(i + 1).Resize(lgStep - 1).Insert
            .Cells(i, 3).Resize(lgStep) = Application.Transpose(.Cells(i, 3).Resize(, lgStep))
        Next i
        .Range("D:K").ClearContents
    End With
    Application.ScreenUpdating = True
End Sub
Привет,
KL

bi-lya
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 07.08.2006 (Пн) 15:36

Сообщение bi-lya » 20.01.2007 (Сб) 4:21

Да нет, не идиотские, но очень похожи! :D


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 82

    TopList