Как стать автором
Обновить

Комментарии 90

А еще можно на одном месте вертеть неоплачиваемые преработки и выходы в субботу.
А, стоп, девушка же.
На одной работе как-то коллега из IT-отдела на замечание, что пользователи из-за крайне неудобного интерфейса не будут вводить данные, а если и будут, то всякую чушь, ответил «тогда они будут получать только зарплату»
В таком случае я могу дат только один совет — набраться опыта и валить. Пока у тебя нет опыта (ценности для фирмы) условия ставят тебе, когда у тебя есть опыт (ценность для фирмы) — условия ставишь ты.
У женщин бывают проблемы с «валить». Сужу по жене: страшно же! А вдруг никуда не возьмут? А вдруг работу не найду? Кому я нужна — ааааа!!!
И терпячки у женщин как-то побольше, мне кажется. Могут работать там, где мужик бы уже спился или с ума сошел.
Корелляции проблем с «валить» от пола не видел, «Да кому я нужен(нужна)» не зависит от пола.
Правда в посленднее время я потерял связь с этой частью людей — просто перестал общаться.
У женщин бывают проблемы с «валить». Сужу по жене: страшно же! А вдруг никуда не возьмут? А вдруг работу не найду? Кому я нужна — ааааа!!!
Для этого, вообще-то, и придумали мужей и психологическую привязанность (эволюция придумала давным-давно, и да, практически именно для этого — поддержка на период нетрудоспособности). А парень, вместо помощи с выбиванием оплаты за переработки, поиском нормальной работы и помощи с повышением квалификации занялся тем, что тоже решил бесплатно поработать на этого работодателя.
Для того, что бы помочь с повышением квалификации нужно время, которого без реализации этой автоматизации просто не было.
Сейчас время есть, что позволяет тратить его на обучение.
НЛО прилетело и опубликовало эту надпись здесь
Если речь идет о крупном городе или Москве — то скорее всего и найдет, если же речь о провинции — то может быть или отсутствие альтернативы или альтернатива в виде кучки контор, стоящих друг друга.
В серьезной фирме условия не поставить. Там есть система бонусов, грейдов, и прочей HR-фигни, которую не перебить никому. А в случае, если условия будут ставиться слишком яро — компания тут же вспомнит «незаменимых людей не бывает». Тогда уж лучше уходить.
Серьезная фирма не хочет иметь проблем в случае обращения по неоплачиваемым переработкам.
А ведь где то там есть БД — в которой можно настроить импорт/экспорт в .csv и это элементарная задача…
Благодаря такой автоматизации получилось сократить время с трех часов до 30 минут.
Что в свою очередь позволит сократить еще треть сотрудников
Если нагрузка на оставшиеся 2/3 не вырастет то почему бы и нет? Автоматизация же.
Хотя судя по вводной «прошли сокращения и теперь надо работать до восхода луны» это не тот случай.
Если нагрузка на оставшиеся 2/3 не вырастет то почему бы и нет?

Есть риск, что девушка ТС может оказаться не в той трети.

По сравнению с ситуацией "до автоматизации" — не вырастет.

это не автоматизация, это Эксель — враг тру-автоматизации и сущность, порождающая корпоративных незаменимых дебилов во плоти.
Подписываюсь. Был опыт, когда из не-IT отдела ушел человек, в числе прочего клепавший некоторые срочные отчеты, на основании которых происходили денежные расчеты с контрагентами. И оказалось, что его руководство не озаботилось вопросом передачи его знаний преемникам. Оказалось, что там был лютый треш в виде бесчисленных экселей с локальной базой Access (о существовании которой никто кроме него не знал, какие говорите бэкапы?). Тогда это первым делом попытались спихнуть на IT, но, к счастью, скинуть свое user-developer добро у них не прокатило.
И оказалось, что его руководство не озаботилось вопросом передачи его знаний преемникам


и виноват в этом, Билл Гейтс, лично.

но, к счастью, скинуть свое user-developer добро у них не прокатило

а если б он это все наклепал не в екселе, а на джаве\питоне\пхп\голанге\баш скриптах на винде через cygwin + нечто типа FireBird\mongoDB? Это б радикально повысило желание айти отдела рабираться с неизвестно чем написанным неизвестно кем?
Это б радикально повысило желание айти отдела рабираться с неизвестно чем написанным неизвестно кем?

Нет, конечно. Хотя парировать отсутствием людей с нужной компетенцией было бы еще проще.
Но не везде в целом к IT-отделу относятся как к палочке-выручалочке, которой можно поручить любую задачу (хотя некоторые пытаются скинуть ответственность, куда же без этого).
Есть область ответственности. Конкретно данная задача была полностью на их отделе. А какими средствами и на каком стеке она выполняется — не имеет значения. Вас же не заставят зарплату считать, если вдруг в бухгалтерии сработал bus factor?
Зарплату не заставят, а вот вбивать какие-нибудь табели-накладные запросто могут в отдельных фирмах.
Виноват в этом не эксель, а менеджер, который вообще не интересуется как работают его люди.
Вдобавок человек уже ушел, а только потом руководство спохватилось о передаче знаний.
Здесь согласен. Кроме того, нередко человек берется за VBA не от хорошей жизни, а после того, как его пару раз пошлют айтишники со словами «это не наше дело, у нас куча работы, вертись как хочешь».
Это ненормальная ситуация у вас описана. Похоже, появление Эксель-автоматизации есть косвенный признак неправильно работающей системы управления предприятием.
Не появление, а чрезмерное разрастание. Эту ситуацию не так сложно мониторить, на самом деле. По крайней мере, на самом поверхностном уровне. Можно написать скрипт, который будет собирать количество строк кода в экселевских файлах и размеры файлов Access.

Понятно, что код коду рознь — может быть простыня на тысячи строк, которая не делает ничего криминального, а может быть пара функций, представляющая собой нацеленный в ногу реактивный гранотомёт. У автора оригинального поста, например, второй вариант. Но у меня почему-то не получается донести до него эту мысль.
Можно написать скрипт, который будет собирать количество строк кода в экселевских файлах и размеры файлов Access.

У меня ажно кремастерный мускул сократился. Понятно, что на дебилов нормальные средства могут не подействовать, но это перебор. Лучше нафиг Акцесс из пакета (-30% от стоимости про офиса), макросы VBA объявит вне закона, обосновать вирусной угрозой. Я не для того проводил себе Интернет, чтобы отвлекаться на такого рода автоматизацию.
Плюс еще постоянный риск, что самописные эксель-скрипты начнут глючить из-а одной неверной ссылки, и разбираться заставят именно администратора, как вам такое?
Понятно, что на дебилов нормальные средства могут не подействовать, но это перебор.

А что такого? Найти каждый файл *.xlsm и посмотреть какого в нем размера файл VBProject (если не ошибаюсь, так называется файл, в котором эксель хранит макросы). Это позволит примерно оценить масштаб трагедии.

Запретить — конечно проще. С точки зрения IT департамента наверняка так и надо поступить. Но на мой взгляд это не продуктивный подход.
Я понимаю, что применение этого инструмента может стать причиной многих проблем, но я не вижу альтернативы. Вы правильно говорите, что это решение не от хорошей жизни.
Кроме того, нередко человек берется за VBA не от хорошей жизни, а после того, как его пару раз пошлют айтишники со словами «это не наше дело, у нас куча работы, вертись как хочешь».

Как я упоминал в статье:
Самое разумное, что можно было бы сделать в этой ситуации, – это написать ТЗ на разработку необходимого функционала и через начальство передать разработчикам. Однако сокращение коснулась всех, в том числе и разработчиков. В результате, у них не было достаточно ресурсов на реализацию этой автоматизации

Как результат либо так, либо сидеть до ночи. Даже учитывая возможные ошибки, мне кажется, что выбор из этих двух альтернатив очевиден.
В результате, у них не было достаточно ресурсов на реализацию этой автоматизации


Это не очень понятно. Для квалифицированного разработчика настроить автоматический импорт/экспорт CSV файлов — это не задача, требующая невероятных ресурсов и усилий. Возможно, стоит еще раз сходить к руководству с предложением «а давайте мы все-таки настроим автоматические загрузки-выгрузки и не будем тут огород городить».
Возможно, стоит еще раз сходить к руководству с предложением «а давайте мы все-таки настроим автоматические загрузки-выгрузки и не будем тут огород городить».

Ключевое тут это еще раз. По словам девушки это бесполезно. Может и есть какие-то варианты, но ни она, ни её начальница похоже продавить выделение ресурсов не могут.
Потому что нужно ходить не к рядовым исполнителям, у которых есть определенный круг задач (и которые могут справедливо послать), а к своему начальнику. Чтобы тот вынес вопрос на обсуждение. Есть ли свободные ресурсы, есть ли люди со знанием нужного стека и компетенцией. Если нет, но функционал нужен — выделить бюджет.
Как раз от того, что вопросы решаются на уровне «Вась, а не поможешь мне тут табличку в экселе заполнить данными из 10000 отдельных документов?» и наступает управленческий хаос.
Потому что нужно ходить не к рядовым исполнителям, у которых есть определенный круг задач (и которые могут справедливо послать), а к своему начальнику. Чтобы тот вынес вопрос на обсуждение.

Не затрагивая обращения к рядовым сотрудникам других отделов. А только решение своими силами используя Эксель и VBA.
Вот исполнителю в начале статьи поставил задачу именно тот начальник к которому вы посылаете чтобы он вынес вопрос на обсуждение. Как думает как быстро он увидит исполнение своего желания или чужого желания которое он ставит исполнителю?

Как думает как быстро он увидит исполнение своего желания или чужого желания которое он ставит исполнителю?

В случае с героиней статьи, пока двигается процесс по «белой» автоматизации, работа не встает. Сотрудники продолжают сидеть и заполнять таблички вручную. В моем же случае (деталей не знаю, я был сторонним наблюдателем) имела место ситуация, когда сотруднику была поставлена задача, но способ ее решения был неведом никому, кроме него самого, в результате получился незаменимый сотрудник, как оказалось.
Со сказанным выше целиком согласен, это косяк управления. А эксель тут выступил в виде инструмента, который есть из коробки и не требует админских привилегий для установки (чего потребовала бы большая часть «серьезных» инструментов, и что не прошло бы бесследно).
и не требует админских привилегий для установки

vs code тоже
это косяк управления. А эксель тут выступил в виде инструмента

Это реальная жизнь.


Я работал по ИТ и мне мое руководство в каждой организации очень часто ставило задачи которые решались только Excell файлами, разными костылями и прочими — в тоже время часто само сидело как в приведенном примере — тупо ручками затрачивало много часов на решение задач которые тупо автоматизировались с сокращением времени во много раз, были задачи повторяющиеся от ежедневно до ежемесячно.


И говорить руководителю когда он скидывает с себя задачу — это нужно автоматизировать, и пока не будет автоматизировано делать не буду — не прокатит.


Руководство ставит задачи и ему по барабану как она будет решена, ему нужно выполнение задачи здесь и лучше вчера, и ему не хочется затрачивать кучу своего времени на постановку задач автоматизации, обсуждения и прочего.


имела место ситуация, когда сотруднику была поставлена задача, но способ ее решения был неведом никому, кроме него самого

А это всегда. Никогда ни сталкивались что обычно способы известны только тому кому была поставлена задача? Когда в ИТ не пишутся инструкции, базы знаний, журналы изменений и т.д. и т.п...


Притом моя реализация была как в примере — шаг влево, вправо и у стороннего человека затык где надо разбираться в коде. А если расписывать и обрабатывать все возможные случаи — то будет затрачено очень много времени и у другого человека так же будет затык.


Ну и просто к выше


Для квалифицированного разработчика настроить автоматический импорт/экспорт CSV файлов — это не задача, требующая невероятных ресурсов и усилий. Возможно, стоит еще раз сходить к руководству с предложением «а давайте мы все-таки настроим автоматические загрузки-выгрузки и не будем тут огород городить».

Видел кучи программ которые внедрялись руководством ИТ, но где отсутствовал импорт/экспорт. Вот к кому идти, если сам руководитель ИТ внедряет… А программы разные справочники с большим количеством записей.

В 90% случаев ИТ не выбирает программу для внедрения, а если и выбирает, то все равно их никто не слушает. Или программа, которая умеет экспорт/импорт не имеет сертификата фстэк/фсб/роскомнадзора/тысячиих. Собственно другая программа потому и имеет сертификат, потому что через неё нельзя сделать «автоматизированный массовый экспорт данных»
Проблема экселя в низком пороге вхождения и растягивание пользователя области использования инструмента далеко за границы его применимости. Но это не проблема инструмента. То, что люди используют скотч там, где нужна сварка — это не проблема скотча.

Любая ли автоматизация требует инструментов промышленного качества? На мой взгляд — нет. Позиция «либо мы делаем автоматизацию на С#+MSSQL с 300 страничной документацией решения и 100% покрытием тестами, либо делаем руками» по мне так контпродуктивна.
Проблема экселя в низком пороге вхождения


Это его преимущество.
Проблемы и преимущества часто неразрывно связаны. Низкий порог вхождения нередко означает низкую квалификацию пользователя в вопросах автоматизации, а значит, низкое качество кода и сомнительные архитектурные решения.
Низкое качество кода и сомнительные архитектурные решения далеко не всегда влияет на бизнес.

Качество кода это к скорости и дешевизне разработки. Если же разработчик сам пользователь, то какие вообще претензии к качеству кода могут быть? Зачем оно там? Что качество кода там решает? Ничего.

Именно поэтому и взлетел MS офис, потому что в тот момент он решал не проблема качества кода, а проблему разного бизнеса, которым нужен был удобный продукт с низким порогом входа, который бы решал бизнес-задачи.

Очень многие ИТшники технические решения для бизнеса и сам бизнес.
почему треть?
три четверти на воздух смело можно отправить.
При работе с внешними источниками данных можно попробовать использовать VBS. Можно переключаться между приложениями, например копировать данные с сайта и вставлять их в Excel. Нормально работают нажатия спец клавиш (Enter, Tab, Alt, Ctrl, стрелки на клавиатуре и т.д.). Рутину автоматизировать самое то. Альтернативным вариантом может быть AutoIT — позволяет создавать скрипты автоматизации, способные имитировать действия пользователя, такие как текстовый ввод и воздействия на элементы управления системы и программ, а также реагировать на события (например, выполнять определённые действия при открытии окна с определённым заголовком). Там куча всего.

А еще есть PengueeBot, для решения автора подошел бы на ура

Недавно в компании прошло большое сокращение, поэтому количество работы на одного сотрудника резко выросло. Поэтому ей пришлось регулярно задерживаться на работе, иногда даже выходить по субботам. Такая же проблема возникла и у её коллег.

Вспомнилась история про мужика, который завел себе вторую семью в соседнем городе. И длилось это несколько лет, пока жена случайно не узнала, что никаких командировок и переработок у ее благоверного не бывает…

Благодаря решениям руководства у автора могла появиться куча вакантного времени для еще одной девушки, но он предпочел купаться с экселем.

Если честно, то я не очень понял трудностей с пересчетом листа.
Почему бы просто не отключить пересчет на время выполнения:
OldApplicationCalculation = Application.Calculation
Application.Calculation = xlCalculationManual
'что-то делаем
Application.Calculation = OldApplicationCalculation

И раз уж Вы используете MSForms.DataObject, то почему Control + C, а не .PutInClipboard? Это же сначала надо что-то выделить, чтобы скопировать.
В случае отмены пересчета листа перестает работать протягивание финальной формулы для автоматизации одинаковых действий с разными данными.
Я наверное так и не понял, что и как у Вас работает.
Потому что, когда код VBA работает, пользователь не может ничего протягивать. И наоборот, когда пользователь что-то делает, то код запускается после его действия, а не во время.
Пользователь что-то сделал, запустился код (как кстати он запускается?), остановил пересчет, код что-то выполнил, восстановил пересчет, закончил выполнение, отдал управление юзеру.
И вообще столько мест где можно хранить позицию курсора, кроме самих ячеек. Например, почему бы не оставить просто в переменных vba? Есть еще имена, примечания к ячейке, реестр, да хоть в текстовый файл пиши.
Подумал, что Ваш комментарий про пересчет относится к составлению формул.
Процесс написание скрипта последовательности действий состоит из отработки небольших групп действий и объединение их в одну. Но при переключении на свободную ячейку вся последовательность тут же отрабатывалась

Трудности с пересчетом листа связанны с тем, что по какой-то причине, как я предположил, автоматическим пересчетом листа, формулы, записывающие значения в ячейки запускали бесконечный цикл и выпадали с ошибкой.
Я попробовал Ваш вариант с отключением автоматического пересчета, но к сожалению проблему это не решило.
Касательно записи координат в ячейки. Это сделано для того, чтобы пользователь видел, что-то, что он делает находит отражение в системе. Кроме того, формулы, управляющие движение мышки опираются именно на ячейки.
Говоря в общем, финальный инструмент должен быть наглядным, чтобы человек мог быстро в нем освоится. Исходя из этого скрывать координаты в переменных, которые пользователь никогда не увидит не практично.
Правильно я понимаю, что пользователь вводит в ячейку UDF функцию, которая и запускает код? Других способов запуска (нажатие на кнопку, обработка событий листа/книги) не предусмотрено?
формулы, записывающие значения в ячейки запускали бесконечный цикл и выпадали с ошибкой
Здесь можно попробовать использовать итеративные вычисления.
Это сделано для того, чтобы пользователь видел, что-то, что он делает находит отражение в системе.
То есть на выполнение скрипта требуется время, пользователю надо показать, что система работает, а не зависла? Я использую для этого прогресс бар для эксель, честно стыренный с planetaexcel.ru. Кастомизируется полностью и может дать пользователю понимание, сколько времени осталось до завершения.
Правильно я понимаю, что пользователь вводит в ячейку UDF функцию, которая и запускает код? Других способов запуска (нажатие на кнопку, обработка событий листа/книги) не предусмотрено?

Да, Вы правильно поняли. И нет других способов не предусмотрено по причине того, что пользователь из описанных функций мог составить последовательность действий, которую он сейчас выполняет в ручную. Это не готовый макрос под одну конкретную задачу, а группа функций используя которые можно симулировать то, что пользователь делает в ручную.
То есть на выполнение скрипта требуется время, пользователю надо показать, что система работает, а не зависла?

Проблема не в том, что пользователь не видит работы во время выполнения макроса. Проблема скорее в наглядности работы. Пользователи в Excel привыкли к работе с ячейками и, грубо говоря, того, что нет в ячейке для них не существует. По этому координаты записываются в ячейки, на которые могут ссылаться другие функции. Кроме того, пользователь с самых первых моментов знакомства с программой должен видеть результаты, пусть и такие не значительные как 2 числа в ячейках. Это формирует ощущение у пользователя, что программа работает, что сказывается на доверии и желании продолжать разбираться.
Если необходимо дать пользователю возможность самостоятельно указать последовательность действий, то как вариант, можно отдельно предусмотреть выбор этапов, и запуск всей цепочки действий по кнопке/сочетанию клавиш. На мой взгляд, детерминированный запуск алгоритма более надежен, и не потребует настройки пересчета ячеек в опциях MS Excel.

Сам выбор шагов можно сделать на основе, например, Data Validation — будет доступен удобный дроп-даун для выбора шага из заранее указанных вариантов
Пример выбора шагов
image

Обратная сторона — придётся добавить немного вспомогательного кода, для запуска соответствующей функции исходя из имени шага.

При большом количестве работы копи-пастой с данными очень удобно использовать мышь с дополнительными боковыми кнопками с их настройкой на копировать и вставить. И выработкой привычки для переключений между окнами использовать клавиатуру. Так же помогает перенести панель задач вверх чтобы меньше водить мышкой.


Некоторое время назад для автоматизации работы с данными — из одной программы с обработкой в другую программу которые не поддерживали экспорт-импорт, а только ручной ввод использовался xstarter с созданными задачами (полно других программ, просто в 2013 году она уже была знакома). Сложная обработка данных в эксель файле (многостраничный) в котором идет обработка формулами, или в самих задачах xstartera если без эксель файла. Программа работает с окнами, мышкой, клавиатурой, буфером памяти. В результате было нужно или нажать вставить из памяти или нажать кнопку Записать, сохранить введенное.


И мое ихмо — для пользователей таких поделок проще делать формулами экселя на листах чтобы пользователь мог при желании сам разобраться и изменить работу под новые хотелки когда руководством поставлена задача выполнить большую однотипную работу к вчерашнему дню.

Лучше бы автор посоветовал девушке не задерживаться на работе.

В этой сфере (сетевой ритейл) — Ваше предложение не вариант. Сам до прихода в IT отработал полтора года бизнес-аналитиком РЦ в X5 (с зп слабого мидла). И там варианты не задерживаться появились лишь через 8 месяцев после трудоустройства, когда автоматизировал все, что только можно. Ключевое — там на твое место еще человек 20 желающих. Это Вам не в разработке :-)
Коллеги, вы не поверите… Во время моей работы в одной ну очень известной компании (ее точно знают все хабровчане) мне приходилось заполнять абсолютно (от слова ВАЩЕ) бестолковые отчеты — ну типа маркетинг, информация о заказчиках (полезных данных — менее одного процента, т.к. шаблон отчета был полностью оторван от реального мира). На одного заказчика нужно было ответить на 1000+ (это не шутка — ОДНА ТЫСЯЧА с небольшим) вопросов. Большинство вопросов предполагали выбор варианта ответов — 2-4 радиобаттона, кое-где — несколько чекбоксов (к счастью — независимых друг от друга), ну и совсем мало — заполняемых полей. Заказчиков было несколько десятков. Делать это нужно было ежеквартально. Итого получаем не менее 50 000 щелчков мышью (если по 1 щелчку в секунду — то получаем в квартал 14 часов сверхсоредоточенной точной работы). 2 года это делалось в 1 обычной html-странице — одна длинная страница-опросник на одного заказчика. Программами записи действий клавиатуры и мыши (некоторые описаны вот здесь ichip.ru/avtomatiziruem-rutinnie-deistviya.html, я попробовал несколько разных ) я сделал несколько макросов, предусматривающих разные наборы вариантов ответов — чтобы ответы для разных заказчиков в один и тот же период несколько отличались. После открытия пустой страницы под очередного заказчика, я нажимал одну из нескольких клавишных комбинаций для вызова конкретного макроса. Все макросы начинались с клавишной комбинации Alt+что-то — чтобы в Internet Explorer спозиционироваться в меню, потом Ctrl+F и ввод однозначной строки, чтобы спозиционироваться на 1-ом вопросе, дальше — перемещение сколько нужно раз Tab и нажатия Space на радиобаттонах и чекбоксах. В целом можно было спокойно наблюдать за промоткой страницы, заполняемой примерно за 20 секунд. Очень редко возникали ошибки, но к счастью внизу html-странички устанавливалась отметка — что есть пропущенные вопросы и можно было проскролить и поправить.

Счастье длилось недолго.

На очередной год страничку испортили — разукрасили какими-то вебовскими примочками и позиционирование по Tab стало почти невозможным — перемещение оказалось непредсказуемым (любые другие способы попадать на нужный элемент тоже работали очень нестабильно — я постарался проверить).

Взгрустнулось.

К счастью, не испортили одну полезную особенность этой страницы — все радиобаттоны и чекбоксы — сами кликабельные элементы располагались строго друг под другом (насчет кликабельности оказалось важным, т.к. в ряде случаев щелчок в текст элемента не работал).

Пришлось выкручиваться вручную следующим образом:
— подключил две мыши;
— правая мышь с с левой кнопкой под правую руку — с «тяжелым», очень точным, колесом — для того, чтобы получить «длинный» и слегка случайный скролл;
— левая мышь — правая кнопка настроена под левую руку — под одиночный щелчок;
— увеличиваем в браузере масштаб страницы — 140%; с одной стороны это увеличивает длину скролла, с другой стороны — увеличивает «полезную» площадь, в которую нужно попасть, чтобы включить радиобаттон или чекбокс;
— колесом правой мыши подматываю страницу;
— левую мышь стараюсь ни в коем случае не двигать, только щелкаю — и в 90% случаев уверенно попадаю — включаю какой-нибудь радиобаттон или чек-бокс ответа в очередном подкрученном вопросе.
Смысл в том, чтобы не переносить палец с кнопки на колесо и вообще не тратить время на перемещения мыши.
Проверка пропущенных вопросов внизу страницы была.
Управлялся меньше чем за 6 часов.
А еще через год, как это бывает со многими случайно-надуманными отчетами, этот отчет отменили и забыли.
Цифровизация…
Программами записи действий клавиатуры и мыши (… ) я сделал несколько макросов,

Первое, что пришло в голову — автозаполнение форм. Правильные автозаполнялки умеют и чекбоксы с радиобаттонами выставлять.
Второе, что пришло в голову — скрипт на чем-нибудь типа greasemonkey, чтобы прямо через DOM документа выставлял нужные значения.
И то, и другое работает практически мгновенно — не надо ждать, пока что-то там проскроллится. А после заполнения можно и вручную пару галок поменять, чтобы не у всех все было одинаково. :)

Без опыта написания скриптов времени уйдет больше, чем на ручное заполнение.

Зато появится и опыт, и скрипт :)
у вас же несколько лет было, если я правильно понимаю?..
Следующая стадия силениум или другой браузер без интерфейса, чтобы вообще всё в фоне делалось, а ты в это время героев играешь.
Все искал в статье где же спойлеры с примерами кода…
Подобные скрипты должны иметь парольную защиту и быть в скомпиллированном виде.
Иначе работодатель захочет или перенести скрипты на все машины сотрудников или уволить, чтоб не выделилась среди других.
Лучше не быть говнистым и продать скрипт работодателю, чтобы всем было выгодно.
Зачем работодателю платить деньги, если он может за просто так забрать скрипты, установленные на машине и установить копию другому сотруднику?
Подойти к начальству и сказать «Смотрите, я тут сделал пару скриптов, благодаря которым могу половину времени плевать в потолок, и которыми охотно поделюсь за прибавку к зарплате»? Это имеет далеко не иллюзорные шансы плохо закончиться.
Подойти сказать мой парень может написать скрипт за 1 зп, позволит вам сократить 2х сотрудников срок окупаемости 15 дней.
50к рублей за скрипт который писал 2-3 дня это норм цена.
Защита в эксель? Не смешите мои подковы ©Конь Юлий
А скомпилированный вид не проходит по условиям задачи.
Хорошо, в контексте Excel нужен obfuscator.
Работодатель всегда захочет улучшений, но с таким кодом так быстро не получится.
В контексте сабжа, полагаю, никакая обфускация не понадобится, там и так черт ногу сломит.
*оценочное суждение, код не видел, ТС прошу не принимать близко к сердцу* :D
НЛО прилетело и опубликовало эту надпись здесь
Я все такие так и не понял, все скрипты были написаны и запускались из под exel'овского VBA или какие либо другие программы? Я не программист, но работаю с экселем достаточно много, в том числе и с VBA, но не приходилось интегрировать подобные аутсайдерские приложения.

По теме автоматизации, пару раз решил автоматизировать процессы для своих коллег. Один раз написал VBA скрипту которая структурировала большие данные в пару секунд, процесс который до этого занимал 5-6 часов. Тетеньки занимавшиеся этим процессом меня поблагодарили и раздражительно отмахнулись. Мол не нужна им такая автоматизация, иначе из двух у только одной останется работа.
В другом случае, успешно автоматизировав процесс и потратив около недели экспериментирований с VBS, сэкономил коллеге 1 день работы ежемесячно. Через пол года процесс сменился на другой и мой макрос уже не был востребован. В обоих случаях не жалею потраченного времени так как занимался этими проектами в большей мере для собственного развития. С тех пор правда перестал скриптить что-либо для кого-либо кроме себя.
Надо было не тетенькам работу презентовать, а руководству. Чтобы тетенек в расход, а вам премию :)

А потом поискать другие компании с такой же проблемой, чтобы предложить макрос еще и им =)

Я правильно понимаю, что ваш скрипт привязан к пользовательской функции, т.е. пользователь пишет в ячейку что-нибудь типа =import_from_website(A1, B2, C3), а в теле этой import_from_website запускается вся ваша чехарда с движением курсора и нажиманием кнопок? Если да, то позвольте поинтересоваться — зачем? Я не очень понимаю юзкейс для такой функции. Почему нельзя сделать процедуру, которая пробегает по таблице и повесить ее на кнопочку?

Кроме того, вы не пробовали решить свою задачу через InternetExplorer.Application?
Сначала сделать процедуру, которая создаст новый объект IE, присвоит его глобальной переменной и покажет пользователю открытым на странице авторизации.
Пользователь в открытом окне введет свой логин-пароль для входа на сайт.
Теперь у вас есть веб-браузер с открытой сессией, с которым вы можете делать из VBA все, что захотите.
Без всяких манипуляций с курсором.

Однако, ActiveCell.Offset(0, 1).Value = x не сработало. Значение не поменялось. А в результате выполнения ошибка. После проверки различных предположений выяснилось, что изменение значение на листе приводит к пересчету всего листа, а значит и той формулы, которая вызывает этот пересчет.

Значение не поменялось не из-за пересчета, а из-за того, что функция не имеет права в ходе своего выполнения менять состояние книги (не скажу вам сейчас по памяти, относится ли это только к ячейкам или ко всем объектам книги). Отсюда и ошибка.
Я правильно понимаю, что ваш скрипт привязан к пользовательской функции, т.е. пользователь пишет в ячейку что-нибудь типа =import_from_website(A1, B2, C3), а в теле этой import_from_website запускается вся ваша чехарда с движением курсора и нажиманием кнопок?

Нет. В ячейку пользователь записывает примерно следующее "=SetCursorPosition(x1, y1)+LeftClick()+SendKeybordKeys(c1)+
PressEnter()+WaitSeconds(3)+SetCursorPosition(x2, y2)+DoubleClick()+CopyToCell(c2)", где x1, y1, x2, y2 — это ячейки с координатами запомненными ранее, а c1 — ячейка с текстом который необходимо ввести, c2 это ячейка куда должен быть вставлен текст.
В результате Excel выполняет следующие действия: Перенос курсора по координатам x1, y1 -> нажатие левой кнопки мыши-> печать текста из ячейки c1 -> нажатие Enter -> подождать 3 секунды (пока загружается информация) -> переместить курсор в x2, y2 -> дважды кликнуть -> скопировать текст в ячейку c2.
Суть в том, что написать эту строчку может человек не знакомый с VBA или любым языком программирования. Проблема не в том, что нужно симулировать определенные действия, для этого полно инструментов и решений куда лучших чем мое, а в том, чтобы дать человеку который не может и не хочет строить свою карьеру в области IT инструмент, который позволит ему больше тратить времени на свою непосредственную работу (в данном случае общение с поставщиками, разработка рекламных материалов и т. д.), а не на тупое перетаскивание из одной среды в другую. В идеальном мире эти проблемы должны решатся на уровне IT с правильным подходом, описанием кейсов, тестированием и т. д., но если Вы поговорите с людьми не из IT подразделений Вы увидите, что большая часть работы выполняемая специалистами с высшим образованием может быть выполнена людьми без образования.
В этом и проблема с решением на базе InternetExplorer.Application или любым другим включающим в себя разработку. Для этого нужно лезть в код, а это не профиль моей девушки и других специалистов не из IT.
Значение не поменялось не из-за пересчета, а из-за того, что функция не имеет права в ходе своего выполнения менять состояние книги (не скажу вам сейчас по памяти, относится ли это только к ячейкам или ко всем объектам книги). Отсюда и ошибка.

Спасибо, что подсказали! Буду знать.
В этом и проблема с решением на базе InternetExplorer.Application или любым другим включающим в себя разработку.

Не вижу проблемы. У вас будут вместо манипуляций с курсором другие функции (для примера):
— get_from_web(url, element_id) -> string
— set_to_web(url, element_id, value) -> boolean
— push_web_button(url, button_id, ...) -> boolean

и т.д. на каждое действие с веб-страницей, которое может делать пользователь. Это будет понятнее выглядеть, быстрее работать, а главное — будет надежнее. set_to_web будет возвращать FALSE если он вдруг не смог найти на странице нужного элемента; push_web_button будет возвращать FALSE если вдруг в результате нажатия произошло не то, что ожидалось. И так далее.

Что, например, вы будете делать, если страница не загрузилась или загрузилась неправильно, или загружалась дольше, чем вы ожидали? Что и куда в таком случае начнут вводить ваши функции?

Это хорошая идея. Но есть 2 минуса:
  • Необходимо объяснять как искать и указывать элементы
  • Не подходит для решений не связанных с вебом (например, работа с десктопными приложениями)
PavelBryz, да Вы рыцарь программного кода. Сколько сейчас девушек вспомнили про свою переработку…
Присоединюсь к вопросу qyix7z
Правильно я понимаю, что пользователь вводит в ячейку UDF функцию, которая и запускает код? Других способов запуска (нажатие на кнопку, обработка событий листа/книги) не предусмотрено?

Такой способ запуска был сознательно выбран?
Раньше доводилось много заниматься «разработкой» на VBA под Excel. Могу предложить автору рассмотреть более привычные для пользователей способы запуска макросов (начиная от назначения сочетания клавиш/кнопки на понели инструментов) до вёрстки кастомной панели (Ribbon) на ленте MS Excel.
Если пользователь выбирает из множества этапов, можно подумать о UserForm с набором чекбоксов, либо служебный лист Excel, в определенных ячейках которого до запуска алгоритма пользователь проставляет, например, знаки "+"
PavelBryz, могу подсказать по реализации в ЛС
Ответил в комментарии выше
Не зная конкретики сложно вам что-то посоветовать, но сейчас у вас это сделано нехорошо. UDF не предназначены к тому, для чего вы их приспособили и рано или поздно это выстрелит вам (точнее, вашей девушке) в ногу.
Excel в принципе не предназначен для таких выкрутасов. Именно по этому хаб «Ненормальное программирование». По поводу использование UDF, на данный момент, это выглядит вполне органично. Я не вижу какие проблемы могут возникнут в будущем. Если возникнут, обязательно отпишусь.
По поводу использование UDF, на данный момент, это выглядит вполне органично.

Все (!) описанные вами проблемы (невозможность менять значения ячеек, асинхронность вычислений, остановка по нажатию кнопки мыши) были связаны именно с использованием UDF.

О возможных проблемах сложно говорить, не видя деталей реализации, но среди них могут быть:
— неправильная последовательность выполнения функций (Эксель в общем-то не обещает, что функция А будет вычислена раньше функции Б, если только результат Б не зависит от результата А)
— остановка вычисления функций в произвольном месте. Это что-то с чем приходилось сталкиваться лично. Большой массив пользовательских функций на листе — и эксель просто отказывается вычислять половину из них по команде пересчёта листа или всей книги. Ничего при этом не пишет, никаких ошибок не выдает. Просто не вычисляет и всё.

Кроме того в голову приходит проблема, связанная с общим дизайном вашего решения: если где-то какой-то объект (на сайте или в книге) куда-то подвинется, то ваша программа станет работать неправильно и, в случае загрузки данных на сайт, вы это никак не сможете проверить. Вам очень повезет, если ошибка проявит себя сразу. Если же ошибка проявится через неделю или через месяц — последствия могут быть самые неприятные.

Читали мое предложение по использованию объекта InternetExplorer.Application для загрузки и скачивания данных? Что думаете на эту тему?
«Благодаря такой автоматизации получилось сократить время с трех часов до 30 минут.»
теперь девушка должна научится Хранить Тайну.
потому что «Сделал дело — берись за следущее».

(я тут как то раз автоматизировал сравнение Excel файла с LDAP… в результате двух человек уволили..)
Можно было еще и руль с педалями пределать к Excelю :)

А вообще грустно. Неоднократно наблюдал за этой горе автоматизацией в Excel (каюсь, иногда и приходилось и самому делать такое).

Являясь ярым противником мнения, что все там можно сделать, и очень удобно, и без привлечения специалистов, призываю всех здравомыслящих людей:
Обработку прайсов таким идиотским способом, приравнять к пыткам. И освободить их от тупого ковыряния в ячейках, даже пр помощи прекрасных помощников, знающих VBA. Руководителей, склоняющих сотрудников к такого рода действиям, заносить в особый публичный список!
Мне показалось:
В качестве точки старта я выбрал задачу, на которую девушка тратила по её ощущениям больше всего времени. В рамках этой задачи девушке было необходимо:

или 18 упоминаний «девушки» сводит статью к простому:
«Ха! Лузеры смотрите у меня есть девушка»…
Даже в цитате выше, во втором предложении лаконичней было бы заменить «девушке» на «ей»…

А так, Хабро сообщество поздравляет Вас с тем, что у Вас есть девушка. Так держать!
Только задроту могло так показаться. Что, впрочем, не противоречит вашему замечанию про количество лишних упоминаний третьего лица.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории