Pull to refresh
14
0
Send message
Возможно, стоит еще раз сходить к руководству с предложением «а давайте мы все-таки настроим автоматические загрузки-выгрузки и не будем тут огород городить».

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

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

Как результат либо так, либо сидеть до ночи. Даже учитывая возможные ошибки, мне кажется, что выбор из этих двух альтернатив очевиден.
Это хорошая идея. Но есть 2 минуса:
  • Необходимо объяснять как искать и указывать элементы
  • Не подходит для решений не связанных с вебом (например, работа с десктопными приложениями)
Я правильно понимаю, что ваш скрипт привязан к пользовательской функции, т.е. пользователь пишет в ячейку что-нибудь типа =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.
Значение не поменялось не из-за пересчета, а из-за того, что функция не имеет права в ходе своего выполнения менять состояние книги (не скажу вам сейчас по памяти, относится ли это только к ячейкам или ко всем объектам книги). Отсюда и ошибка.

Спасибо, что подсказали! Буду знать.
Excel в принципе не предназначен для таких выкрутасов. Именно по этому хаб «Ненормальное программирование». По поводу использование UDF, на данный момент, это выглядит вполне органично. Я не вижу какие проблемы могут возникнут в будущем. Если возникнут, обязательно отпишусь.
Правильно я понимаю, что пользователь вводит в ячейку UDF функцию, которая и запускает код? Других способов запуска (нажатие на кнопку, обработка событий листа/книги) не предусмотрено?

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

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

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

Information

Rating
Does not participate
Registered
Activity