powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Помогите найти ошибку в цикле
25 сообщений из 52, страница 2 из 3
Помогите найти ошибку в цикле
    #36312382
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну так если wbKontrol1.Worksheets("Total").UsedRange.Rows.Count = 25 , иначе и не будет.
Я подозреваю, что вы путаете UsedRange.Rows.Count иномер последней заполненной строки, это в общем случае разные числа.
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36312417
Oksana Slonevskaya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121Ну так если wbKontrol1.Worksheets("Total").UsedRange.Rows.Count = 25 , иначе и не будет.
Я подозреваю, что вы путаете UsedRange.Rows.Count иномер последней заполненной строки, это в общем случае разные числа.


ничего не пойму уже. ведь UsedRange.Rows.Count - это количество заполненных строк. а их у меня как минимум 4, в остальных разделах с другими файлами это работает, почему тут не хочет не понимаю.
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36312430
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это количество заполненных строк - да, но если наверху есть незаполненная область, то это количество будет меньше, чем номер последней строки.
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36312431
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, возможно Вы хотели цикл на убывание? Тогда For 25 to 10 Step -1
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36312461
Oksana Slonevskaya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет, никаких циклов на убывание. цикл начинается с 25 строки и идет вниз по заполненным строкам....
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36312692
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
цикл начинается с 25 строки и идет вниз по заполненным строкам
Ну тогда может быть
Код: plaintext
1.
For i =  25  To  25  + wbKontrol1.Worksheets("Total").UsedRange.Rows.Count
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36312704
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или я бы сделал
Код: plaintext
1.
For i =  0  To wbKontrol1.Worksheets("Total").UsedRange.Rows.Count
а ниже
Код: plaintext
1.
SumPer1 = SumPer1 + wbKontrol1.Worksheets.Item("Total").Cells(i+ 25 ,  6 ).Value
или вообще в начале кода задал переменную sdvig = 25, далее i+sdvig - если сдвиг всюду одинаковый, легче поменять позже, если шаблон изменится.
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314168
Oksana Slonevskaya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем c UsedRange.Rows.Count был глюк. теперь количество заполненных строк правильно определяется, но цикл все равно не проходит
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314200
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
2 Oksana Slonevskaya ,
Мне кажется Вы уже создавали топики на этом форуме, и Вам также как и сейчас пытались помочь. Но у меня впечатление, что Вы не хотите помочь самой себе. У Вас проблема не типа "напишите формулу", а не работает цикл (не факт, конечно). Топик становится утомителен, по одной фразе переписыватся можно годами. Я предложил сбросить пример, Вы проигнорировали (если есть секретные данные, замените их)... Ну что ж, может у Hugo121 хватит терпение разобратся с Вашей проблемой...
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314218
Oksana Slonevskaya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m 2 Oksana Slonevskaya ,
Мне кажется Вы уже создавали топики на этом форуме, и Вам также как и сейчас пытались помочь. Но у меня впечатление, что Вы не хотите помочь самой себе. У Вас проблема не типа "напишите формулу", а не работает цикл (не факт, конечно). Топик становится утомителен, по одной фразе переписыватся можно годами. Я предложил сбросить пример, Вы проигнорировали (если есть секретные данные, замените их)... Ну что ж, может у Hugo121 хватит терпение разобратся с Вашей проблемой...

мне код выслать или файл? что? размер файла 1,5 метра, при всем желании он сюда не влезет и даже если влезет, работать он не будет, данные берутся из сети. на почту могу выслать сам файл и пару еще, по которым не работает как раз цикл
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314309
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
ТСи даже если влезет, работать он не будет, данные берутся из сети
Ну так придумайте что нибудь :), кому надо, мне или Вам?
ТСпочту могу выслать сам файл и пару еще, по которым не работает как раз цикл
Выложите на какой-нибудь бесплатный файлообменник, и дайте на него ссылку на форуме.
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314316
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oksana Slonevskayaв общем c UsedRange.Rows.Count был глюк. теперь количество заполненных строк правильно определяется, но цикл все равно не проходит
Как конструкция
Код: plaintext
1.
2.
3.
4.
For i =  25  To wbKontrol1.Worksheets("Total").UsedRange.Rows.Count
SumPer1 = SumPer1 + wbKontrol1.Worksheets.Item("Total").Cells(i,  6 ).Value
SumNed1 = SumNed1 + wbKontrol1.Worksheets.Item("Total").Cells(i,  5 ).Value
Next i
где wbKontrol1.Worksheets("Total").UsedRange.Rows.Count > 25 (надеюсь, выяснили)
может не работать?
Понимаю, может выкинуть ошибку, если не найдены wbKontrol1 и "Total" в цикле, но сам цикл должен проходить.
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314504
Oksana Slonevskaya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://slil.ru/28214916
надо в коде файла цикл.xls поправить пути в файлам wbKontrol1 и wbKontrol2,смотря где лежать будет. цикл не работает по файлам контроль налива 1, 2 на листе 4
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314644
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Первое, что я проверил:
запустил в
Контроль налива масла №1 October 25.xls
и
Контроль налива масла №2 October 25.xls

Код: plaintext
1.
2.
Sub tt()
Debug.Print Worksheets("Total").UsedRange.Rows.Count
End Sub
результат = 7 в обоих файлах.
Т.е. цикл
Код: plaintext
For i =  25  To wbKontrol1.Worksheets("Total").UsedRange.Rows.Count
работать не будет точно.
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314692
Oksana Slonevskaya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну как сделать так, чтобы работало? ведь ниже используются такие же циклы в файле цикл.xls и все работает. почему этот не определяет количество заполненных строк? то есть получается, что строка с usedrange.rows.count не работает
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314701
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В итоге, такой код помог разобраться:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub tt()
Set wbKontrol1 = ThisWorkbook
Debug.Print wbKontrol1.Worksheets("Total").UsedRange.Rows.Count
wbKontrol1.Worksheets("Total").UsedRange.Select

                 For i =  26  To  25  -  2  + wbKontrol1.Worksheets("Total").UsedRange.Rows.Count
                     SumPer1 = SumPer1 + wbKontrol1.Worksheets.Item("Total").Cells(i,  6 ).Value
                     SumNed1 = SumNed1 + wbKontrol1.Worksheets.Item("Total").Cells(i,  5 ).Value
                 Next i

End Sub
У вас там ещё и поймать начало значений надо (-2)...
Т.е. вероятно правильная строка:
Код: plaintext
 For i =  26  To  25  -  2  + wbKontrol1.Worksheets("Total").UsedRange.Rows.Count
Некрасиво, понимаю, сокращать Вам...
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314709
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oksana Slonevskayaну как сделать так, чтобы работало? ведь ниже используются такие же циклы в файле цикл.xls и все работает. почему этот не определяет количество заполненных строк? то есть получается, что строка с usedrange.rows.count не работает
Наверное в Electrical Energy.xls UsedRange начинается с первой строки.
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314720
Oksana Slonevskaya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ошибка только в строке For i = 25 To wbKontrol1.Worksheets("Total").UsedRange.Rows.Count? а остальной цикл верный? значения из файлов контроль налива 1 и 2 по переливу и недоливу соответственно должны суммироваться между собой и заноситься в файл цикл....
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314726
Oksana Slonevskaya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121Oksana Slonevskayaну как сделать так, чтобы работало? ведь ниже используются такие же циклы в файле цикл.xls и все работает. почему этот не определяет количество заполненных строк? то есть получается, что строка с usedrange.rows.count не работает
Наверное в Electrical Energy.xls UsedRange начинается с первой строки.

да. но я думала это не имеет значения, в нашем случае ведь расчет идут от 25 строки по конец.... видимо нет
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314735
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, ну 100% гарантии не дам (не вникал до конца кода), но цикл с этими цифрами
For i = 26 To 23 +
работает.
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314746
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121Точно в Cells(n, 6/5).Value числа?
Ну и ещё UsedRange с первой ячейки начинается?

Почему не читаете ответы? Это было сказано через 15 минут после вопроса...
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314761
Oksana Slonevskaya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121Hugo121Точно в Cells(n, 6/5).Value числа?
Ну и ещё UsedRange с первой ячейки начинается?

Почему не читаете ответы? Это было сказано через 15 минут после вопроса...

не поняла, к чему этот пост.... все работает, толлько так и не поняла, почему именно так надо писать ()
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314776
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Потому что если UsedRange начинается не с первой ячейки, то номер ряда листа не будет совпадать с номером ряда в UsedRange, что и есть причиной, что Cells(i, 6).Value было не то, что надо. То, что начинать i надо с начало листа + 25 Вы уловили, но и предел цикла с UsedRange.Rows.Count надо начинать с +25. Да и к тому же сама область UsedRange включает не только цифры, но и пустую строку и заглавие, что Вам/Нам не нужно.
Похоже, только запутал...
...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36314981
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И вообще (для сторонних наблюдателей ), в данном случае да и вообще, лучше сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub test()

Set wbKontrol1 = ThisWorkbook

xxx = wbKontrol1.Worksheets("Total").UsedRange.Row
yyy = wbKontrol1.Worksheets("Total").UsedRange.Rows.Count

                 For i = xxx +  2  To xxx + yyy -  1   ' 2 строки нам не нужно
                    'wbKontrol1.Worksheets.Item("Total").Cells(i, 5).Select ' для теста раскомментировать
                     SumPer1 = SumPer1 + wbKontrol1.Worksheets.Item("Total").Cells(i,  6 ).Value
                     SumNed1 = SumNed1 + wbKontrol1.Worksheets.Item("Total").Cells(i,  5 ).Value
                 Next i

End Sub
Так мы не будем зависеть от положения блока данных на листе по высоте.
Но зависим от формы этой таблицы, да и мало ли ещё что на листе появится...
Тогда надо искать ячейку "Общий недолив, т" (через find) и брать в цикле ячейки ниже до пока не цифры, и правее соответственно. Как-то так.
Если не искать конец нужных данных (просто -2 ненужных ряда):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub findedoliv()
Set wbKontrol1 = ThisWorkbook

iValue = "Общий недолив, т"
Set iFinds = wbKontrol1.Worksheets("Total").UsedRange.Find(iValue, LookIn:=xlValues)

xxx = iFinds.Row +  1 
yyy = wbKontrol1.Worksheets("Total").UsedRange.Rows.Count

                 For i = xxx To xxx + yyy -  1  -  2   ' 2 строки нам не нужно
                    wbKontrol1.Worksheets.Item("Total").Cells(i,  5 ).Select ' для теста раскомментировать
                     SumPer1 = SumPer1 + wbKontrol1.Worksheets.Item("Total").Cells(i,  6 ).Value
                     SumNed1 = SumNed1 + wbKontrol1.Worksheets.Item("Total").Cells(i,  5 ).Value
                 Next i

End Sub

...
Рейтинг: 0 / 0
Помогите найти ошибку в цикле
    #36315000
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лучше так, столбцы тоже могут не быть 5/6:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub findedoliv()
Set wbKontrol1 = ThisWorkbook

iValue = "Общий недолив, т"
Set iFinds = wbKontrol1.Worksheets("Total").UsedRange.Find(iValue, LookIn:=xlValues)

xxx = iFinds.Row
xxc = iFinds.Column
yyy = wbKontrol1.Worksheets("Total").UsedRange.Rows.Count

    For i = xxx +  1  To xxx + yyy -  2   ' 2 строки нам не нужно
        'wbKontrol1.Worksheets.Item("Total").Cells(i, xxc).Select ' для теста раскомментировать
        SumPer1 = SumPer1 + wbKontrol1.Worksheets.Item("Total").Cells(i, xxc +  1 ).Value
        SumNed1 = SumNed1 + wbKontrol1.Worksheets.Item("Total").Cells(i, xxc).Value
    Next i

End Sub
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 2 из 3
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Помогите найти ошибку в цикле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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