Название: VBA. ошибка в коде при написании макроса для генератора путевых листов. Отправлено: axlnik от 10.03.2023, 17:53:01 Добрый день, я в VBA ноль, подсмотрел в разных источниках и написал макрос, но написал с ошибками, а так как не понимаю в VBA то и ошибку найти не могу. Помогите пожалуйста.
Что хотел сделать: генератор маршрутных листов на входе в макрос километраж, количество дней, список адресов с приоритетами и расстоянием до них. На выходе список адресов по дням с километражом. Как пытался вычислить: взять километраж "killometrag" и разделить его на количество дней "day", чтобы цифры были не одинаковыми рандомно прибавить или отнять рандомное число, которое будет прописано в ячейке "разброс". Затем проверить, что сумма километров за эти дне не превысит общий километраж из ячейки "killometrag". Так я получу сколько километров в день проехали. Затем я беру из массива "rastoyniy" рандомные числа и проверяю, чтобы сумма этих чисел была равна километражу за день. Числа берутся не совсем рандомно, у каждого числа есть вес, который указан в третьем столбце массива, чем выше число тем выше приоритет этой ячейки попасть в выборку, чем у других. Если сумма больше километражу за день, цикл начинается по новой. Получив нужную сумму я извлекаю адреса строк, вписываю в ячейку с именем "spisok". Так я повторяю до тех пор пока не заполню строки по количеству дней. Код: (vb) Sub RandomCells() Название: Re:VBA. ошибка в коде при написании макроса для генератора путевых листов. Отправлено: Дмитрий Щербаков(The_Prist) от 10.03.2023, 18:37:03 Если честно - здесь не ошибки искать надо, а по ходу переписывать код...Но если уж по ошибкам пройтись:
1. Exit While - что это и откуда взялось? Нет такого в VBA. Для выхода используется Exit Do. 2. Есть строка Do While rast_summa + rastoyniy(current_row, 2) <= kalendar(1, 1) - mini_rashojdenie. Но вот где к ней закрывающий Loop? Нигде. И где должен быть непонятно. 3. В самом конце кода есть строка Next intI. Но к чему она? К ней просто нет никакого For. И где он должен быть - тоже непонятно. Даже сама переменная intI нигде не объявлена и не имеет начального значения перед применением. Можно было бы подумать, что начальное значение должно быть 0, но она впервые используется в массиве kalendar, который объявлен с нижней границей 1, а значит попытка использовать переменную со значением 0 выдаст ошибку. Видимо, For для неё должен быть где-то в начале кода. 4. Переменная kalendar объявлен изначально как массив, но далее используется и как массив и как объект ArrayList. Тоже будет ошибка сразу на строке Set kalendar = Nothing. Может есть и еще ошибки - не стал анализировать этот код дальше, т.к. смысла нет. Именно из-за всего этого я и написал, что здесь надо все писать с нуля, т.к. исправление ошибок вряд ли что-то даст. Название: Re:VBA. ошибка в коде при написании макроса для генератора путевых листов. Отправлено: axlnik от 13.03.2023, 12:51:39 Дмитрий спасибо большое, извините, что Вам пришлось ковыряться в недокоде, искренне верил, что у меня что то получается, отдельно пару фрагментов работало, а когда попытался соединить в конечный код, вышла такая лажа.
|