Страницы: 1
RSS
Цикл не проходит весь диапазон
 
Всем, добрый день.
Решил сотворить макрос для заполнения таблицы. Но так как только начал познавать тайны VBA, сразу же произошел затык.
При проходе вложенного цикла, он просматривает 135 ячеек и возвращается в начало. Т.е. до конца (до 5000 ячеки не доходит).
Файл прилагаю. Помогите, подскажите, что не так я делаю.
Заранее благодарен за помощь.
Исходный файл по ссылке https://www.dropbox.com/s/3tsph2kc6p4oilb/1%D0%91_%D0%9D%D0%B0%D0%BA%D0%BE%D0%BF­%D0%B8%D1%82%D0%B5%D...
Код
Создал тестовый файл. Прикрепил.
Изменено: konstruktornii - 13.02.2019 21:59:24
 
Пройдите макрос по-шагово, смотрите значения переменных и выполнение/не выполнение условий. Без файла больше сказать нечего.
Согласие есть продукт при полном непротивлении сторон
 
Цитата
konstruktornii написал:
Но так как только начал познавать тайны VBA
Походу не с того начали познавать. Переменные не объявлены, поэтому в вашем сумбурном коде тяжко разбираться.
Да и код не оформлен как требуется. Огромное количество переменных. Предположу, что результата можно добиться более простым способом. Файл бы пример. как есть и как надо.
"Все гениальное просто, а все простое гениально!!!"
 
На мой формульный взгляд сперва проверьте значения после присвоения
Код
PosStrKS = Worksheets("КС2").UsedRange.Rows.Count
PosStrLS = Worksheets("Лист45").UsedRange.Rows.Count


ну и хотя б код тегом в сообщении отформатируйте кнопочка такая  -  <…> на панельке
По вопросам из тем форума, личку не читаю.
 
konstruktornii, Ссылка не вариант, у меня на работе политика безопасности не позволяет открыть сайт по ссылке.
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim написал:
Ссылка не вариант, у меня на работе политика безопасности не позволяет открыть сайт по ссылке.
по тому что работать надо :-)

konstruktornii,  У меня отработало все по полной. Медленно, скрипя, но отработало.
не знаю как у вас дальше будет с объемами, но помните столбцов всего 16к в примере последний уже 6678 использован.
Скорость будет сильно больше если перебором заниматься не ячеек а загрузив все в массив крутить циклы по нему и только результат выводить в ячейки при этом отключив всякие калькуляции и события, но это другая тема.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:по тому что работать надо :-)
Я в перекур, на сайт заглядываю, вместо вредных пагубных привычек. :D
"Все гениальное просто, а все простое гениально!!!"
 
OFF
Цитата
Nordheim написал:
вместо вредных пагубных привычек
это вызов!!! :-)
По вопросам из тем форума, личку не читаю.
 
БМВ, Да, макрос отрабатывает, но он почему-то видит только три КС с одним номером ЛС. И во все столбцы забивает только эти три.
Я проверял по шагам. Доходит до 135 строки в КС2 и опять начинает  с 8 строки.
 
Цитата
БМВ написал:
это вызов!!! :-)
Нет, констатация факта  ;)
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
konstruktornii написал:
Я проверял по шагам. Доходит до 135 строки в КС2 и опять начинает  с 8 строки.
Обрубите данные, оставьте 150 строк, уберите УФ и формулы (если имеются) и выложите файл пример. А то гадаем на кофейной гуще.
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
БМВ написал:
У меня отработало все по полной. Медленно, скрипя, но отработало.
Тоже всё отработало. Прошёл все строки, налепил кучу вариантов КС/ЛС
Цитата
konstruktornii написал:
Доходит до 135 строки в КС2 и опять начинает  с 8 строки
Вот этой проблемы не обнаружено
 
Sceptic,Лепит кучу из трех вариантов. Другие пропускает. Вот это не могу побороть.
Видит только один номер ЛС, а остальные пропускает.
 
Тут надо еще понимать одну вещь: лист, с которого запускаем макрос и где расположен макрос тоже имеет значение. Т.к. PosStrKS и PosStrLS определяем для конкретных листов, а значения потом просматриваем просто для Cells...
Поставьте перед каждым обращением типа Cells() его родителя(т.е. лист): Worksheets("Лист45").Cells()  и посмотрите как там чего будет.
Или хоть напишите откуда запускаете и как должно быть.
Изменено: Дмитрий(The_Prist) Щербаков - 13.02.2019 13:39:46
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, Запускаю из Лист45. Изначально так и задумывалось.
 
Привет!
Цитата
Дмитрий(The_Prist) Щербаков написал:
Поставьте перед каждым обращением типа Cells() его родителя(т.е. лист): Worksheets("Лист45").Cells()  и посмотрите как там чего будет.
примерно так:
Скрытый текст
Расставьте как Вам надо.
Изменено: Inexsu - 13.02.2019 16:55:57
Сравнение прайсов, таблиц - без настроек
 
Inexsu, спасибо. Но вопрос остался. Не перебирает все номера ЛС из Лист45.
Не могу понять, почему номер ЛС прописывает для каждой строчки.
И еще, надо что бы номер ЛС повторялся только в случае изменения номера КС.
Дальше надо будет перенести объемы из КС в ЛС в соответствии с шифром.
И вывести в ЛС сумму объемов по строкам.
 
Цитата
konstruktornii написал:
вопрос остался.
не знаю как другие, но я так и не понял, чего Вы хотите ...
Сравнение прайсов, таблиц - без настроек
 
Inexsu,     1. На листе КС2 найти номер КС-2. Записать его на ЛИСТ 45.
                2. Под этим номером найти номер локальной сметы (ЛС). Записать его на Лист45.
                3. В этой КС по очереди перебираем шифры работы (материала, механизма).
                4. По очереди сравниваем шифры КС и ЛС.
                5. При совпадении шифров записать объемы из КС в ЛС в соответствующие ячейки (по КС, по РД, Факт)
                6. После просмотра всего листа КС2 по-строчно сложить объемы и записать в ЛС в соответствующие ячейки.

Исходный файл большой, поэтому можно посмотреть по ссылке (в начале поста)
Изменено: konstruktornii - 13.02.2019 21:57:22
Страницы: 1
Наверх