Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась / 17 сообщений из 17, страница 1 из 1
25.06.2015, 19:28
    #38993060
Takayavot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
Всем привет!
Нужно написать макрос, который бы обрабатывал строки в Excel, вставляя по определенным критериям новые.
- Вначале определяю lastrow
- Затем пишу цикл For I = 1 to lastrow
- вставляю новые строки согласно условию
- тут же пересчитываю lastrow с учетом вставленных строк (lastrow = lastrow + inserted)

Финальный lastrow определяется верно, с учетом вставленных строк (проверяла)
Но сам цикл заканчивается раньше, чем положено.
У меня такое ощущение, что в самом цикле запоминается изначально определенный lastrow,
и пересчеты внутри цикла никак его не меняют.

Вопрос. Как можно это обойти не прибегая к циклами типа Do while.

Спасибо.
...
Рейтинг: 0 / 0
25.06.2015, 19:33
    #38993066
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
TakayavotУ меня такое ощущение, что в самом цикле запоминается изначально определенный lastrow,
и пересчеты внутри цикла никак его не меняют.именно так
TakayavotВопрос. Как можно это обойти не прибегая к циклами типа Do while.У вас whileфобия?
...
Рейтинг: 0 / 0
25.06.2015, 19:34
    #38993068
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
TakayavotКак можно это обойти не прибегая к циклами типа Do while.Можно через цикл Do Until
...
Рейтинг: 0 / 0
25.06.2015, 19:39
    #38993074
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
Ну ладно, уговорили. Если алгоритм позволяет, можете сделать цикл For от конца к началу.
...
Рейтинг: 0 / 0
25.06.2015, 19:59
    #38993081
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
TakayavotУ меня такое ощущение, что в самом цикле запоминается изначально определенный lastrowПравильное ощущение.
Как уже написал Shocker - делайте цикл обратный:
Код: vbnet
1.
For l = lastrow to 1 step -1
...
Рейтинг: 0 / 0
25.06.2015, 22:23
    #38993125
hclubmk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
Как вариант:
Код: vbnet
1.
2.
3.
For l = 1 To 1 Step 0
    If <условие окончания> Then: Exit For
Next
...
Рейтинг: 0 / 0
25.06.2015, 22:29
    #38993128
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
Shocker.ProTakayavotКак можно это обойти не прибегая к циклами типа Do while.Можно через цикл Do Until а я предпочитаю while wend :)
потому что сначала проверяется условие, а потом уже все остальное.
до тех пор, пока не потребуется exit do, само собой.
...
Рейтинг: 0 / 0
25.06.2015, 22:35
    #38993129
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
Antonariyа я предпочитаю while wend :)
потому что сначала проверяется условие, а потом уже все остальное.а ты знаешь, что можно написать
Код: vbnet
1.
2.
3.
Do Until
 ...
Loop

а можно
Код: vbnet
1.
2.
3.
Do
 ...
Loop Until



ЗЫ: А можно вообще написать
Код: vbnet
1.
2.
3.
4.
5.
Do
  ...
  If... Exit Do
  ...
Loop
...
Рейтинг: 0 / 0
25.06.2015, 22:36
    #38993130
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
Antonariyа я предпочитаю while wend :)мне слово Wend неприятно...
...
Рейтинг: 0 / 0
25.06.2015, 22:38
    #38993132
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
Shocker.ProAntonariyа я предпочитаю while wend :)
потому что сначала проверяется условие, а потом уже все остальное.а ты знаешь, что можно написать
Код: vbnet
1.
2.
3.
Do Until
 ...
Loop

а можно
Код: vbnet
1.
2.
3.
Do
 ...
Loop Until



ЗЫ: А можно вообще написать
Код: vbnet
1.
2.
3.
4.
5.
Do
  ...
  If... Exit Do
  ...
Loop

многабукоф
while wend короче при любых раскладах
...
Рейтинг: 0 / 0
25.06.2015, 22:51
    #38993139
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
Antonariyмногабукофбрейнфак вам в руки!
...
Рейтинг: 0 / 0
26.06.2015, 08:34
    #38993257
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
Цикл - слишком важное дело, чтобы доверять его компилятору! Только If и GoTo , только хардкор!
...
Рейтинг: 0 / 0
26.06.2015, 09:19
    #38993280
Takayavot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
Shocker.ProУ вас whileфобия?


Не фобия. Просто плохо пишу макросы и неохота менять его сильно.
Думала, может какую козявку можно поставить рядом с циклом и чудо случится..
но ладно. Попробую с дувайлами.
Спасибо всем.
...
Рейтинг: 0 / 0
26.06.2015, 11:55
    #38993469
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
TakayavotПопробую с дувайламиВы прикалываетесь? Вам надо одну строку поменять и все. И убрать свое изменений lastrow. Я даже строку кода привел.
...
Рейтинг: 0 / 0
26.06.2015, 12:25
    #38993522
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
The_Prist,

ты забыл про l=l+1, в твоем варианте оно же не будет щелкать само... )
...
Рейтинг: 0 / 0
26.06.2015, 14:44
    #38993742
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
Shocker.Pro,

Так оно и не надо, т.к. цикл идет снизу вверх. Строки кодами добавляются по умолчанию ниже указанной строки. Поэтому если правильно организовать цикл - то нафиг никакие l=l+1 не нужны. Я так раз 500 делал и не было проблем. И код читаемый без путаницы с l , и делается все правильно.
...
Рейтинг: 0 / 0
26.06.2015, 14:48
    #38993749
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась
The_Prist,

Сорри, я твой вариант с hclubmk перепутал (не туда посмотрел) ))
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Цикл For (I = 1 to lastrow). Сделать так, чтобы lastrow менялась / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]