Возможно, стоит еще раз сходить к руководству с предложением «а давайте мы все-таки настроим автоматические загрузки-выгрузки и не будем тут огород городить».
Ключевое тут это еще раз. По словам девушки это бесполезно. Может и есть какие-то варианты, но ни она, ни её начальница похоже продавить выделение ресурсов не могут.
Я понимаю, что применение этого инструмента может стать причиной многих проблем, но я не вижу альтернативы. Вы правильно говорите, что это решение не от хорошей жизни.
Кроме того, нередко человек берется за VBA не от хорошей жизни, а после того, как его пару раз пошлют айтишники со словами «это не наше дело, у нас куча работы, вертись как хочешь».
Как я упоминал в статье:
Самое разумное, что можно было бы сделать в этой ситуации, – это написать ТЗ на разработку необходимого функционала и через начальство передать разработчикам. Однако сокращение коснулась всех, в том числе и разработчиков. В результате, у них не было достаточно ресурсов на реализацию этой автоматизации
Как результат либо так, либо сидеть до ночи. Даже учитывая возможные ошибки, мне кажется, что выбор из этих двух альтернатив очевиден.
Я правильно понимаю, что ваш скрипт привязан к пользовательской функции, т.е. пользователь пишет в ячейку что-нибудь типа =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 числа в ячейках. Это формирует ощущение у пользователя, что программа работает, что сказывается на доверии и желании продолжать разбираться.
Для того, что бы помочь с повышением квалификации нужно время, которого без реализации этой автоматизации просто не было.
Сейчас время есть, что позволяет тратить его на обучение.
Подумал, что Ваш комментарий про пересчет относится к составлению формул.
Процесс написание скрипта последовательности действий состоит из отработки небольших групп действий и объединение их в одну. Но при переключении на свободную ячейку вся последовательность тут же отрабатывалась
Трудности с пересчетом листа связанны с тем, что по какой-то причине, как я предположил, автоматическим пересчетом листа, формулы, записывающие значения в ячейки запускали бесконечный цикл и выпадали с ошибкой.
Я попробовал Ваш вариант с отключением автоматического пересчета, но к сожалению проблему это не решило.
Касательно записи координат в ячейки. Это сделано для того, чтобы пользователь видел, что-то, что он делает находит отражение в системе. Кроме того, формулы, управляющие движение мышки опираются именно на ячейки.
Говоря в общем, финальный инструмент должен быть наглядным, чтобы человек мог быстро в нем освоится. Исходя из этого скрывать координаты в переменных, которые пользователь никогда не увидит не практично.
Ключевое тут это еще раз. По словам девушки это бесполезно. Может и есть какие-то варианты, но ни она, ни её начальница похоже продавить выделение ресурсов не могут.
Как я упоминал в статье:
Как результат либо так, либо сидеть до ночи. Даже учитывая возможные ошибки, мне кажется, что выбор из этих двух альтернатив очевиден.
Нет. В ячейку пользователь записывает примерно следующее "=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 привыкли к работе с ячейками и, грубо говоря, того, что нет в ячейке для них не существует. По этому координаты записываются в ячейки, на которые могут ссылаться другие функции. Кроме того, пользователь с самых первых моментов знакомства с программой должен видеть результаты, пусть и такие не значительные как 2 числа в ячейках. Это формирует ощущение у пользователя, что программа работает, что сказывается на доверии и желании продолжать разбираться.
Сейчас время есть, что позволяет тратить его на обучение.
Трудности с пересчетом листа связанны с тем, что по какой-то причине, как я предположил, автоматическим пересчетом листа, формулы, записывающие значения в ячейки запускали бесконечный цикл и выпадали с ошибкой.
Я попробовал Ваш вариант с отключением автоматического пересчета, но к сожалению проблему это не решило.
Касательно записи координат в ячейки. Это сделано для того, чтобы пользователь видел, что-то, что он делает находит отражение в системе. Кроме того, формулы, управляющие движение мышки опираются именно на ячейки.
Говоря в общем, финальный инструмент должен быть наглядным, чтобы человек мог быстро в нем освоится. Исходя из этого скрывать координаты в переменных, которые пользователь никогда не увидит не практично.