О, странник, давно уж я отрекся от мелодий, но эхо все еще храню в своей душе…
Ты очень прозорлив, мой друг, ведь сказанное тобою истина: многие управители, повязанные цепями старых систем, лишь мечтают о том дне, когда их тяжкая ноша преобразится в сияющие грани современного кода. И ныне — как в прошлом, так и в будущем — переписание древних скрижалей в новые форматы остаётся благословением и проклятием тех, кто владеет знанием.
Взываю твой взор к глубинам сети, где в свитках hh — том великом хранилище судеб и вакансий — ты найдёшь откровения, что касаются судьбы VBA. Ищи, странник, и ответы явятся тебе!
Благодарю и очень ценю твой отклик, ведь он питает огонь в моем сердце!
Признаюсь честно, я не понимаю почему автор утверждает обратное. Возможно он подразумевает что-то другое, но в тексте и правда черным по белому:
A fixed-size array can be assigned to if the value has the same number of dimensions, that the dimensions are the same size, and all the values are the default value for the declared type.
и:
So when you pass a Variant by value, you’re passing a copy of a pointer that says “your array is over here”. Exactly like an object reference, in fact.
Это синтетический пример и максимально упрощенный, для наглядности.
Конечно, в подобных задачах PQ лучший вариант, но не во всех компаниях офис поддерживает эту надстройку. Лично работал в двух компаниях где пришлось выбивать себе его, поэтому для таких вариантов все таки лучше макросы.
Подвигал столбцы исходных данных и всё заработало.
Вы все сделали правильно. Именно так я и делаю в работе. Конечно рефакторинг дело неблагодарное и дорогое.
Тут, скорее, задача была в том, чтобы показать, как непонятную мешанину превратить в структурированный код. И больше руководство для новых проектов, а не для переписывания (хотя кто знает, возможно есть среди коллег те, кому и за рефакторинг платят).
это в первую очередь инструмент для скриптования
Да, но это не значит, что нужно делать тяп ляп. Все таки работа должна приносить не только деньги, но и кайф от процесса. Неужели Вы не радуетесь, когда получается хорошо оформленная и структурированная кодовая база? Такое ведь и поддерживать крайне быстро, удобно, приятно, и ошибок в процессе эксплуатации минимум у клиента.
Со столбцами-то, в примере, почему так случилось? Потому что Вася не удосужился подумать о том, что отчет может поменяться. И, как я уже несколько раз упоминал, если это такой маленький проект - это не критично, доработать/исправить можно минут за 10-30.
Но в больших проектах речь уже о часа разработчика. И раз уж речь зашла за деньги, то часы разработчика - это деньги компании.
говнокод получается из говнобизнеспроцессов
и согласен и нет. БП могут быть идеально настроены на позитивную разработку, но Вася просто развиваться не хочет. И говоря про Васю я держу в голове уже не выдуманных людей, к сожалению ?
Быстро перенести код из проекта в проект, безусловно, достоинство, но это не к vba явно и Вы сами упомянули проблему?
Так вот лично я эту проблему(перенос сразу нескольких связных модулей) решил пакетным менеджером и пользуюсь им уже на протяжении полутора лет. Когда-нибудь дойдут руки привести весь код в порядок и выложить его, но пока просто поверьте на слово ?
Что касаемо подхода с ошибками - это частный случай. Тут можно Catch'ить и отдельные процедуры и обрабатывать их по своему усмотрению (это даже есть в примерах). Но Вы абсолютно правы, Resume Next крайне полезная вещь, и ее нужно использовать. Просто конкретно в этом проекте я не нашел для нее место, да и это не была сама цель.
Ну и как я уже упомянул:
Я не претендую на истину в последней инстанции, вы вольны поступать так, как вам заблагорассудится
Когда строк всего 100 как в примере, "плохого" действительно не много. А вот когда их 500 и более становится очень сложно:
Понять, что вообще делает код. Посмотрите полный код в процедуре Main после рефакторинга. Беглый взгляд в течении 5-10 секунд сразу даст понять что там происходит. Чего не скажешь о всей процедуре в начале статьи. Нужно потратить минуту, а то и две, чтобы примерно вникнуть в смысл. Еще раз, когда 100 строк, это может и не страшно. Страшно когда их тысячи.
Найти кусок кода который выдает ошибку, или кусок кода с логикой, которую нужно изменить. Придется потратить те же 1-2 минуты, чтобы вникнуть в почти весь код. Зачем столько тратить, когда можно пройтись по 5-10 строчкам в точке входа, найти шаг, который вызывает нужную нам логику и провалиться в нее.
Наверное, есть еще пункты, но эти более значимые, как по мне.
Все же, читаем мы код гораздо больше, чем пишем. Так почему бы не потратить чуть больше времени на написание удобного для чтения и понимания кода?
Ну если только в задачу не входит «подосрать» потомкам, как упомянул другой комментатор. Тогда вопросов нет.
Ну и повторюсь, я не навязываю подобный подход, вы вольны делать так, как вам вздумается. Просто есть люди, как я, которые ищут подобный материал на vba, а его нет. Для них и писал статью ?
Мне даже на таком маленьком примере пришлось кучу текста написать, поэтому, безусловно, такая простая задача только для наглядности как можно делать :) Код, который я предоставил в начале, смело можно умножить на 10, а то и на 20 (как и логику, которую он выполняет).
Спасибо 🙂
Получается, еще не началась😀
О, странник, давно уж я отрекся от мелодий, но эхо все еще храню в своей душе…
Ты очень прозорлив, мой друг, ведь сказанное тобою истина: многие управители, повязанные цепями старых систем, лишь мечтают о том дне, когда их тяжкая ноша преобразится в сияющие грани современного кода. И ныне — как в прошлом, так и в будущем — переписание древних скрижалей в новые форматы остаётся благословением и проклятием тех, кто владеет знанием.
Взываю твой взор к глубинам сети, где в свитках hh — том великом хранилище судеб и вакансий — ты найдёшь откровения, что касаются судьбы VBA. Ищи, странник, и ответы явятся тебе!
Благодарю и очень ценю твой отклик, ведь он питает огонь в моем сердце!
На python переучиватлся 😀 спасибо за отзыв!
Спасибо! 🙂
К сожалению не могу не согласиться. Тенденция сейчас такая везде, наверное.
Примерно такой же подход я использовал в этой статье ?
к слову, в комментариях к оригиналу статьи тоже указали, как минимум, на один из недочетов, но автор не прокомментировал
Признаюсь честно, я не понимаю почему автор утверждает обратное. Возможно он подразумевает что-то другое, но в тексте и правда черным по белому:
и:
Добавлю Ваши примеры по тексту, спасибо!
даже не представляете насколько
виноват, думал, что хаба будет достаточно :)
Я уже как то пытался динамически работать с интерфейсом, но в итоге счел это слишком утомительным занятием, поэтому на данный момент проект заброшен ?
Спасибо за отзыв!
Можно и так ?
Добавляем новую опцию, реализуем логику в отдельном модуле, подключаем, профит!
Это синтетический пример и максимально упрощенный, для наглядности.
Конечно, в подобных задачах PQ лучший вариант, но не во всех компаниях офис поддерживает эту надстройку. Лично работал в двух компаниях где пришлось выбивать себе его, поэтому для таких вариантов все таки лучше макросы.
Спасибо за отзыв ?
Вы все сделали правильно. Именно так я и делаю в работе. Конечно рефакторинг дело неблагодарное и дорогое.
Тут, скорее, задача была в том, чтобы показать, как непонятную мешанину превратить в структурированный код. И больше руководство для новых проектов, а не для переписывания (хотя кто знает, возможно есть среди коллег те, кому и за рефакторинг платят).
Да, но это не значит, что нужно делать тяп ляп. Все таки работа должна приносить не только деньги, но и кайф от процесса. Неужели Вы не радуетесь, когда получается хорошо оформленная и структурированная кодовая база? Такое ведь и поддерживать крайне быстро, удобно, приятно, и ошибок в процессе эксплуатации минимум у клиента.
Со столбцами-то, в примере, почему так случилось? Потому что Вася не удосужился подумать о том, что отчет может поменяться. И, как я уже несколько раз упоминал, если это такой маленький проект - это не критично, доработать/исправить можно минут за 10-30.
Но в больших проектах речь уже о часа разработчика. И раз уж речь зашла за деньги, то часы разработчика - это деньги компании.
и согласен и нет. БП могут быть идеально настроены на позитивную разработку, но Вася просто развиваться не хочет. И говоря про Васю я держу в голове уже не выдуманных людей, к сожалению ?
Спасибо за отзыв!
Быстро перенести код из проекта в проект, безусловно, достоинство, но это не к vba явно и Вы сами упомянули проблему?
Так вот лично я эту проблему(перенос сразу нескольких связных модулей) решил пакетным менеджером и пользуюсь им уже на протяжении полутора лет. Когда-нибудь дойдут руки привести весь код в порядок и выложить его, но пока просто поверьте на слово ?
Что касаемо подхода с ошибками - это частный случай. Тут можно Catch'ить и отдельные процедуры и обрабатывать их по своему усмотрению (это даже есть в примерах). Но Вы абсолютно правы, Resume Next крайне полезная вещь, и ее нужно использовать. Просто конкретно в этом проекте я не нашел для нее место, да и это не была сама цель.
Ну и как я уже упомянул:
спасибо за отзыв!
Спасибо за добрые слова ?
Когда строк всего 100 как в примере, "плохого" действительно не много. А вот когда их 500 и более становится очень сложно:
Понять, что вообще делает код. Посмотрите полный код в процедуре Main после рефакторинга. Беглый взгляд в течении 5-10 секунд сразу даст понять что там происходит. Чего не скажешь о всей процедуре в начале статьи. Нужно потратить минуту, а то и две, чтобы примерно вникнуть в смысл. Еще раз, когда 100 строк, это может и не страшно. Страшно когда их тысячи.
Найти кусок кода который выдает ошибку, или кусок кода с логикой, которую нужно изменить. Придется потратить те же 1-2 минуты, чтобы вникнуть в почти весь код. Зачем столько тратить, когда можно пройтись по 5-10 строчкам в точке входа, найти шаг, который вызывает нужную нам логику и провалиться в нее.
Наверное, есть еще пункты, но эти более значимые, как по мне.
Все же, читаем мы код гораздо больше, чем пишем. Так почему бы не потратить чуть больше времени на написание удобного для чтения и понимания кода?
Ну если только в задачу не входит «подосрать» потомкам, как упомянул другой комментатор. Тогда вопросов нет.
Ну и повторюсь, я не навязываю подобный подход, вы вольны делать так, как вам вздумается. Просто есть люди, как я, которые ищут подобный материал на vba, а его нет. Для них и писал статью ?
Мне даже на таком маленьком примере пришлось кучу текста написать, поэтому, безусловно, такая простая задача только для наглядности как можно делать :) Код, который я предоставил в начале, смело можно умножить на 10, а то и на 20 (как и логику, которую он выполняет).
Спасибо!
Судя по комментариям, не все поняли что это перевод ?