Полноценная программа автоматизации в эксель. Автоматизация задач с помощью средства записи макросов — Excel. Сохранение, печать и закрытие документов Microsoft Word

Если вы частый пользователь MS Excel, Вам наверняка приходится ежедневно выполнять однотипные операции. В этом случае макросы Excel помогут записать последовательность действий в виде набора VBA команд. Такой способ отлично подойдет для автоматизации простых задач. Если речь идёт о более сложных задачах, пользователи c навыками программирования могут автоматизировать операции с помощью VBA проектов.

Надстройка «Автоматизация» предлагает принципиально новый подход к автоматизации рутинных задач в Excel:

  • Создание команд в простой таблице Excel вместо объёмных VBA проектов
  • Автоматизация даже сложных и многоэтапных операций
  • Автоматизация возможностей XLTools: SQL запросы, Экспорт в CSV, Редизайн таблицы, т.д.
  • Создание пользовательских кнопок на панели инструментов
  • Для продвинутых пользователей и разработчиков

Не обязательно быть знатоком VBA. Если какие-то ваши бизнес-процессы в Excel отнимают слишком много времени, наша команда XLTools поможет их автоматизировать.

Добавить «Автоматизацию» в Excel 2019, 2016, 2013, 2010, 2007

Подходит для: Microsoft Excel 2019 - 2007, desktop Office 365 (32-бит и 64-бит).

Как работать с надстройкой:

Как автоматизировать операции в Excel без VBA [Скачать пособие]

Зачастую VBA макросы Excel разрастаются до сотен строк кода, очень неудобных в работе. Надстройка XLTools «Автоматизация» позволяет писать команды в простых и компактных таблицах Excel. Табличное представление более информативно, наглядно и его легче редактировать. Вы также можете добавить собственные кнопки на панель инструментов Excel для выполнения собственных команд автоматизации.

Надстройка «Автоматизация» — это универсальный инструмент для автоматизации практически любых команд и их последовательностей:

  • Автоматизация SQL запросов к таблицам Excel: SELECT, GROUP BY, JOIN ON, т.д.
  • Автоматическое преобразование сводных таблиц в плоский список
  • автоматический экспорт таблиц Excel в файл CSV
  • Автоматическое извлечение данных из других книг Excel или CSV файлов
  • Автоматическая фильтрация таблиц, т.д.

Просто напишите команду, используя пособие > Нажмите «Выполнить команды» > Готово! Генерация результата займёт всего пару секунд.

СКАЧАТЬ ПОСОБИЕ : примеры, шаблоны, синтаксис и построчные комментарии (zip/xlsx, 260 КБ).

Пример: как автоматизировать SQL запрос к таблицам Excel

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

1. Подготовьте исходные данные к SQL запросу. Примените к ним формат таблицы, иначе SQL не сможет обработать данные:

  • Выберете диапазон «Журнал данных прайс-листа и продаж».
  • На вкладке «Главная» нажмите «Форматировать как таблицу» > Примените стиль таблицы.
  • На вкладке «Конструктор» присвойте таблице имя «Продажи2014».

2. Добавьте новый лист, напр., «АвтоКоманды», и создайте таблицу команды автоматизации SQL:

  • XLTools.SQLSelect - введите название команды в точности так. Название должно находиться в двух объединённых ячейках.
  • SQLQuery - наберите команду запроса привычном образом. Обратите внимание: надстройка использует синтаксис SQLite .
    Совет: вместо печати текста запроса вручную, используйте интуитивный редактор SQL Запросов и скопируйте скрипт в таблицу автоматизации.
  • ApplyTableName - введите название таблицы результата.
    Результат запроса автоматически генерируется в формате таблицы. При необходимости к ней можно создавать последующие запросы.
  • OutputTo - укажите, куда следует поместить результат запроса.

Внимание: чтобы SQL распознавал все ссылки, не используйте пробелы в названиях рабочих листов, книг и таблиц.

3. Выполните команду автоматизации SQL:

  • Выделите диапазон команды автоматизации > Нажмите кнопку «Выполнить команды» на вкладке XLTools.
  • Готово, результат сгенерируется в секунды.
    В данном примере SQL запрос извлёк данные за 3 квартал 2014.

4. Создайте собственные кнопки на панели инструментов Excel.

В каждой книге Excel можно создать до 3-x пользовательских кнопок, привязанных к вашим собственным командам автоматизации:

  • Нажмите «Создать кнопки» на вкладке XLTools.
  • Присвойте кнопке имя, напр. «Отчёт по кварталам» > Укажите диапазон таблицы команды.
  • Нажмите «Сохранить» > Ваша кнопка появится на вкладке XLTools.

Теперь вы можете легко создать квартальный отчёт, нажав всего одну кнопку.

Появились вопросы или предложения? Оставьте комментарий ниже.

При работе с Excel иногда приходиться налаживать взаимодействие программного кода с другими приложениями офисного пакета или вне него, например с Internet Explorer. Так сказать связывать. Для примера возьмем Word, хотя и IE вставим немного.

Начнем с понятия о позднем и раннем связывании (привязке).


Управлять Word из других приложений позволяет сервер автоматизации Word. Такой же сервер есть и у других офисных приложений (и не только офисных). В данном случае, сервером будет считаться Word, а клиентом Excel. Из него будут посылаться запросы на выполнение некоторого кода, а сервер автоматизации Word будет обрабатывать эти запросы. Это теоретически означает возможность написания программного кода в Excel, который будет выполняться в Word и использовать встроенные функции Word. Для использования такой возможности необходимо указать ссылку на библиотеку, функционал которой собираемся использовать. В данном случае Word. Это можно сделать двумя путями: указать библиотеку явно, до исполнения программного кода и во время исполнения программного кода.


Первый способ называется раннее связывание . В меню Tools-References редактора vba выберите Microsoft Word 12.0 Object Library . В других версиях офисных пакетов, как вы понимаете, .

При раннем связывании новый экземпляр класса Word будет создаваться так:

Dim WApp As Word.Application Set WApp = New Word.Application

Второй способ называется позднее связывание . При этом нет необходимости указывать ссылку на библиотеку. Создается экземпляр класса (объект) и возвращается ссылка на него используя функцию CreateObject .


Синтаксис CreateObject:
CreateObject(класс,[имясервера])

класс - обязательный параметр. Тип данных Variant(String) . Имя приложения и класс, на основе которого создается объект. Имеет синтаксис имяприложения.названиекласса
имясервера - необязательный параметр. Имя компьютера в сети, где объект будет создан. Если параметр не указан (пустая строка), объект будет создан на локальной машине.

Примеры создания объекта при позднем связывании:

Создает новый объект Word.Application

Dim WApp As Object Set WApp = CreateObject("Word.Application")

Создает новый объект Word.Application и делает его видимым.
Dim WApp As Object Set WApp = CreateObject("Word.Application") WApp.Visible = True

Создает объект на удаленной машине. Для этой операции необходимо иметь соответствующие права доступа.
Dim WApp As Object Set WApp = CreateObject("Word.Application", "192.168.1.4")

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

Dim WApp As Object Set WApp = CreateObject("Word.Application.12")

Замечания: создаваемый объект Word.Application невидимый. Это ускоряет работу с ним, но в случае возникновения ошибки, он остается в памяти. Используйте WApp.Visible = True в обработчике ошибок. Каждый раз при использовании функции CreateObject будет создан новый объект.

Если объект приложения уже создан, то использовать функцию CreateObject не стоит. Вместо нее целесообразно применять функции GetObject, которая просто возвращает ссылку на объект.


Синтаксис GetObject:
GetObject([путь][,класс])

путь - необязательный параметр. Тип данных Variant(String) . Полный путь к файлу, связанному с объектом.
класс - Не обязательный параметр. Тип данных Variant(String) . Строка, указывающая, на какой тип объекта будет сделана ссылка. Если параметр путь не указан, тот параметр обязателен.

Dim WApp As Object Set WApp = GetObject(, "Word.Application") Debug.Print WApp.Documents.Count

Dim WDoc As Object Set WDoc = GetObject(ThisWorkbook.Path & "\Pacienti.txt") Debug.Print WDoc.Sentences.Count

Вот пример с перехватом ошибки отсутствия открытого файла:
Dim WDoc As Object On Error GoTo cvv_Error Set WDoc = GetObject(ThisWorkbook.Path & "\Pacienti.txt") Debug.Print WDoc.Sentences.Count On Error GoTo 0 Exit Sub cvv_Error: If Err.Number = 432 Then MsgBox "Файл " & ThisWorkbook.Path & "\Pacienti.txt" & " не открыт..."

Вот пример позднего связывания с Internet Explorer:
Dim IE As Object Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True

Ну а для раннего связывания с этим браузером, необходимо дать ссылку на библиотеку Microsoft Internet Controls . Ну а если планируется работать с интернет страницами (разбор структуры и данных), то и Microsoft HTML Object Library .

У позднего связывания только одно преимущество: ссылка на библиотеку не слетит никогда (если приложение зарегистрировано в системе). Используйте этот способ, если не уверены, что у конечного пользователя версия офисного пакета совпадет с вашей. В любом другом случае лучше использовать раннее связывание, и на это две причины:
1. Объектная модель приложения доступна в браузере объектов Excel.
2. Быстродействие не страдает, и работают все функции.

Вместо послесловия:
В этой маленькой статье я рассказал о способах подключения к объектной модели приложения. Как ее использовать – огромная, требующая отдельных статей тема. Конечно, использовать приложения не зная их объектной модели не получится. Используйте автоматизацию с умом, без лишних выдумок. Видел я как-то приложение в Excel, которое, чтобы вставить данные из таблицы Access на лист, создавало экземпляр Access, открывало файл базы данных, затем из этого экземпляра копировало таблицу на лист, затем закрывало экземпляр. Хотя проще и быстрее было использовать доступ к данным при помощи ADO или даже DAO…

Для автоматизации работы приложений часто используются макросы. Любой макрос — это последовательность действий, записанная под определенным именем. Если при работе с Microsoft Excel возникает необходимость несколько раз выполнить одну и ту же последовательность операций (например, сложное форматирование текущей ячейки или добавление новой строки с заполнением некоторых ее ячеек формулами), то можно записать эти действия, а затем воспроизводить их столько раз, сколько потребуется.

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

Вкладка Разработчик , позволяющая записывать макросы, по умолчанию скрыта. Для того чтобы ее показать, необходимо выбрать Office → Параметры Excel → Основные и использовать опцию Показывать вкладку «Разработчик» на ленте . После установки этого флажка на ленте появится вкладка Разработчик .

Запись макросов

Для того чтобы записать макрос, необходимо:

  1. Детально представить ту последовательность действий, которую нужно выполнять (во избежание возможных ошибок, лишних или неправильных действий).
  2. Выбрать элемент, к которому будут применяться действия, записываемые в макрос (установить курсор в пределах ячейки и пр.).
  3. Вызвать диалоговое окно Запись макроса одним из двух способов:
    • нажать кнопку Запись макроса на панели Код вкладки Разработчик;
    • нажать кнопку Запись макроса в левой части строки состояния Excel.
  4. Ввести в поле Имя макроса название создаваемого макроса. При этом первым символом имени макроса должна быть буква. Остальные символы могут быть как буквами, так и цифрами или знаком подчеркивания. В имени не допускаются пробелы; в качестве разделителей слов рекомендуется использовать знаки подчеркивания.
  5. В выпадающем списке Сохранить в указать, где будет сохранен данный макрос. Возможные варианты:
    • Личная книга макросов — макрос сохраняется в специальный файл, который будет доступен для всех документов сразу после загрузки Excel;
    • Новая книга — будет создана новая книга, и макрос будет сохранен в ней. Этот макрос будет доступен только в том случае, если содержащая его книга будет открыта;
    • Эта книга — макрос будет сохранен в текущей книге. Обычно такие макросы необходимы, когда их использование ограничено мелкой автоматизацией в текущей книге. Тем не менее, макрос будет доступен из других документов, если они будут открыты параллельно.
  6. Если необходимо, чтобы макрос вызывался комбинацией клавиш, ввести букву или цифру в поле Сочетание клавиш .
  7. Если вводится буква, то важен как регистр, так и раскладка. Например, если вводится буква д (малая русская), то комбинация клавиш для этого макроса будет Ctrl+д , но не Ctrl+I (малая английская L, которая находится на той же клавише).

  8. Нажать кнопку OK , затем кнопку Запись макроса на панели Код вкладки Разработчик , которая в строке состояния превратится в кнопку Остановить запись , останавливающую запись макроса.
  9. Выполнить последовательность действий, которые будут записаны в макрос.
  10. Все значимые действия пользователя (щелчки по кнопкам, редактирование данных, перемещение по листу и т.д.) будут записаны. Сделать паузу в записи невозможно.

  11. Завершить запись макроса нажатием кнопки Остановить запись . По окончании записи макроса он появляется в списке макросов иод своим именем.

Выполнение макросов

Для выполнения макроса можно воспользоваться диалоговым окном Макрос . Чтобы отобразить это окно, можно нажать комбинацию клавиш Alt+F8 либо воспользоваться кнопкой Макросы на панели Код . Далее в этом окне необходимо выбрать требуемый макрос и нажать кнопку Выполнить . Второй возможностью выполнить макрос является комбинация клавиш, выбранная на этапе создания макроса. Кроме того, в Excel предусмотрена возможность вызова макроса при помощи кнопки па панели быстрого доступа.

Создание кнопки макроса на панели быстрого доступа

Для создания кнопки на панели быстрого доступа нужно:

  1. Вызвать диалоговое окно Параметры Excel и перейти на вкладку Настройка .
  2. В выпадающем списке Выбрать команды из выбрать пункт Макросы .
  3. Выбрать нужный макрос из списка макросов и нажать кнопку Добавить — он скопируется в правое окно и станет доступен в виде кнопки на панели быстрого доступа.
  4. Чтобы для созданной кнопки изменить рисунок и отображаемое имя, следует воспользоваться командой Изменить .
  5. Нажать кнопку ОК в диалоговом окне Параметры Excel.

В результате кнопка добавится на панель быстрого доступа. Отображаемое имя будет появляться в виде всплывающей подсказки при наведении на кнопку указателя мыши.

Удаление макроса

Для удаления макроса следует нажать кнопку Макросы на панели Код или комбинацию клавиш Alt+F8 — появится диалоговое окно Макрос , содержащее список макросов, доступных в открытых книгах. В данном окне необходимо выбрать удаляемый макрос и нажать кнопку Удалить.

При удалении макроса его кнопка в панели быстрого доступа не удаляется автоматически, поэтому ее нужно удалить вручную на вкладке Настройки диалогового окна Параметры Excel .

Редактирование макроса

Созданный макрос на самом деле представляет собой процедуру, записанную на языке программирования VBA. Ее легко можно увидеть в окне редактора Visual Basic Editor. Подробно о VBA и редакторе Visual Basic Editor рассказано в других наших статьях. Сейчас важно отметить то, что макрос записывается в виде обычного текста, а это значит, что при необходимости его легко можно редактировать.

Для входа в режим редактирования макроса нужно:

  1. В диалоговом окне Макрос выбрать подлежащий редактированию макрос.
  2. Нажать кнопку Изменить — откроется окно Microsoft Visual Basic.

Для примера создадим в текущей книге Excel простейший макрос, который должен применяться к выделенной ячейке и изменять ее форматирование (цвет фона - красный, цвет шрифта — светло-коричневый, Фон 2). Чтобы создать этот макрос, необходимо:

  1. Выделить любую ячейку на листе и ввести в нее какой-нибудь текст (чтобы можно было посмотреть на результат работы).
  2. Включить запись макроса с помощью кнопки Запись макроса в строке состояния.
  3. В диалоговом окне Запись макроса все параметры оставить выбранными по умолчанию и нажать кнопку ОК .
  4. На вкладке Главная (панель Шрифт) выбрать нужные параметры цвета.
  5. Остановить запись макроса при помощи кнопки Остановить запись в строке состояния.

Теперь для того чтобы просмотреть код созданного макроса, необходимо вызвать редактор Visual Basic способом, описанным выше, — откроется окно кода для созданного макроса, в котором будет записан следующий код:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // Макрос форматирования ячейки Макрос1 Sub Макрос1() "Макрос! Макрос With Selection.Interior .Pattern = xlSolid .PatternColorlndex = xlAutomatic .Color = 255 .TintAndShade = 0 .PatternTintAndShade = 0 End With With Selection.Font .ThemeColor = xlThemeColorDark2 .TintAndShade = 0 End With End Sub

// Макрос форматирования ячейки Макрос1 Sub Макрос1() "Макрос! Макрос With Selection.Interior .Pattern = xlSolid .PatternColorlndex = xlAutomatic .Color = 255 .TintAndShade = 0 .PatternTintAndShade = 0 End With With Selection.Font .ThemeColor = xlThemeColorDark2 .TintAndShade = 0 End With End Sub

Чтобы при последовательном обращении к нескольким свойствам одного объекта каждый раз не указывать длинную цепочку типа Selection.Interior.Pattern = xlSolid , используется специальная конструкция языка VBA: With…End With — внутри нес имя объекта можно опустить, указывая лишь точку перед именем свойства.

Для тех, кто знает английский язык, назначение и принцип работы команд в данном коде достаточно очевидны: для объекта Selection.Interior (т.е. для внутренней области выделенной ячейки) выполняется задание значений различным параметрам фона. Основные параметры — Pattern (способ заливки, в данном случае задан xlSolid , т.е. сплошным) и Color (Цвет). Аналогичным образом происходит изменение цвета шрифта (начиная со строки With Selection.Font ).

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

Цели полностью удалить код макроса в редакторе Visual Basic, то макрос также будет полностью удален (это аналогично действию кнопки Удалить диалогового окна Макрос ).

Для переименования макроса достаточно войти в режим его редактирования и в тексте программы исправить заголовок в строке Sub Макрос1() — новое имя автоматически заменит старое в списках макросов. Заметим, что не все замены происходят автоматически. Если с макросом были связаны графические объекты или кнопки, то необходимо сделать для них переназначения.

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

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

При записи макроса записываются все действия, описанные в Visual Basic для приложений (VBA) коде. Эти действия могут включать ввод текста или чисел, нажатие ячеек или команд на ленте или в меню, форматирование ячеек, строк или столбцов, а также импорт данных из внешнего источника, например Microsoft Access. Приложение Visual Basic (VBA) - это подмножество мощного языка программирования Visual Basic, которое входит в большинство приложений Office. Несмотря на то, что VBA обеспечивает возможность автоматизации процессов между приложениями Office, вам не нужно знать код VBA или программное программирование, если это нужно.

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

Разработчик , которая по умолчанию скрыта, поэтому сначала нужно включить ее. Дополнительные сведения см. в статье Отображение вкладки "Разработчик" .

Запись макроса

На вкладке Разработчик щелкните Макросы , чтобы просмотреть макросы, связанные с книгой. Кроме того, можно нажать клавиши ALT+F8 . При этом откроется диалоговое окно Макрос .


Внимание:

Сведения о параметрах безопасности макросов и их значении.

Макросы можно запускать различными способами, например с помощью сочетания клавиш, графического объекта, панели быстрого доступа, кнопки или даже при открытии книги.

С помощью редактора Visual Basic можно изменять макросы, присоединенные к книге.

    назначить макрос .

    В поле Назначить макроса

Узнайте, как включать и отключать макросы в файлах Office.

Нажмите клавиши ALT+F11 .

Работа с записанным кодом в редакторе Visual Basic (VBE)

С помощью редактора Visual Basic (VBE) вы можете добавлять в записанный код собственные переменные, управляющие структуры и другие элементы, которые не поддерживает средство записи макросов. Так как средство записи макросов фиксирует почти каждый шаг, выполняемый во время записи, может также потребоваться удалить ненужный код. Просмотр записанного кода - отличный способ научиться программировать на VBA или отточить свои навыки.

Пример изменения записанного кода можно найти в статье Начало работы с VBA в Excel .

Запись макроса

Перед записью макросов полезно знать следующее:

    Макрос, записанный для работы с диапазоном Excel, будет выполняться только для ячеек этого диапазона. Поэтому если вы добавите в диапазон новую строку, макрос не будет применяться к ней.

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

    В макросе могут содержаться и задачи, не относящиеся к Excel. Процесс макроса может охватывать прочие приложения Office и другие программы, которые поддерживают Visual Basic для приложений (VBA). Например, вы можете записать макрос, который сначала обновляет таблицу в Excel, а затем открывает Outlook для ее отправки по электронной почте.

Макросы и средства VBA находятся на вкладке Разработчик , которая по умолчанию скрыта, поэтому сначала нужно включить ее.

    Перейдите в раздел настройки _гт_ Excel ... панель инструментов _Гт_ ленты _амп_ .

Чтобы записать макрос, следуйте инструкциям ниже.

Работа с макросами, записанными в Excel

На вкладке Разработчик щелкните Макросы , чтобы просмотреть макросы, связанные с книгой. При этом откроется диалоговое окно Макрос .

Примечание: Макросы нельзя отменить. Прежде чем впервые запускать записанный макрос, сохраните книгу или создайте ее копию, чтобы предотвратить внесение нежелательных изменений. Если вас не устраивают результаты выполнения макроса, вы можете закрыть книгу, не сохраняя ее.

Ниже приведены дополнительные сведения о работе с макросами в Excel.

Узнайте, как включать и отключать макросы в Excel для Mac.

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

Если книга содержит макрос VBA, который нужно использовать где-либо еще, этот модуль можно скопировать в другую книгу с помощью редактора Microsoft Visual Basic.

Назначение макроса объекту, фигуре или графическому элементу

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

    В поле Назначить макроса выберите макрос, который вы хотите назначить.

Вы можете назначить макрос значку и добавить его на панель быстрого доступа или ленту.

Вы можете назначать макросы формам и элементам ActiveX на листе.

Открытие редактора Visual Basic

На вкладке Разработчик щелкните Visual Basic или выберите Сервис > Макрос > Редактор Visual Basic .

Узнайте, как найти справку по элементам Visual Basic.

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community , попросить помощи в сообществе Answers community , а также предложить новую функцию или улучшение на веб-сайте

Подробности Категория: Excel Опубликовано: 28 декабря 2017

Автоматизация составления исполнительной документации по строительству в Excel

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

Введение.

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

Итак, поговорим про строительство, конкретно про составление Исполнительной документации (далее ИД).

об Исполнительной документации

Точнее про ее текстовую составляющую. Если вкратце, то ИД есть набор актов, журналов и иных документов, чертежей, схем которые составляются на каждый этап и даже операцию (группы операций) в строительстве, для подтверждения/отклонения выполняемых работ проекту. Такие документы сплошь шаблонные, их перечень, в зависимости от вида работ, регламентирован, и они ведутся согласно фактического графика выполняемых работ, формализуя утвержденной комиссией правильность/отступление работ проекту.

Большая часть работ закрывается по форме Акта освидетельствования скрытых работ (утвержденным приказом Федеральной службы по экологическому, технологическому и атомному надзору от 26 декабря 2006 года N 1128 (В редакции, введенной в действие с 6 марта 2016 года приказом Ростехнадзора от 26 октября 2015 года №42. Далее АОСР).

Исходные данные для автоматизации.

По-этому возьмем форму АОСР за основу. Итак, у нас есть шаблон документа, в который заносится следующая информация:

Постфикс номера акта;
- наименование объекта капитального строительства;
- юридические данные об участниках строительства (Застройщик или Заказчик; Лицо, осуществляющее строительство; Лицо, осуществляющее подготовку проектной документации;
Лицо, осуществляющее строительство, выполнившее работы, подлежащие освидетельствованию; иные лица.)
- перечень лиц с наименованием организаций, должностей и приказов подтверждающих их полномочия;
- наименование выполненных работ;
- сроки выполнения работ;
- перечень работ, входящих в выполненные работы;
- ссылки на НТД и разделы проекта/тех.документации;
- ссылки на исполнительные схемы, акты испытаний (если таковые требуются);
- перечень используемых материалов с сылками на документы подтверждающими их соответствие (паспорта, сертификаты и т.п.)

Мысли о принципиальных методах решения задачи

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

1. Слияние с файлом Word
2. Заполнение при помощи макросов шаблона на базе Excel.

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

Итак, теперь мы упираемся в 2 задачи:

1. Заполнение шаблона на основе табличных данных
2. Какие поля достаточно ввести один раз, какие будет меняться время от времени и какие поля будут отличаться в каждом акте.

Решая задачу №2 мы вынесем на отдельный лист те данные, которые будут едины в рамках объекта/раздела проекта строительства - это:

Спойлер

На текущем листе заполним лишь один раз, а для остальных актов просто проставим ссылки на эти значения:

Спойлер

И поля, которые будут меняться в каждом акте:

Спойлер

Теперь об удобствах, если записать ФИО ответственных лиц, их организацию, приказ о назначении с датой, то при помощи инструмента «проверка данных» можно занести их фамилии в спойлер , а формулой подтягивать их регалии.

ЕСЛИОШИБКА(ДВССЫЛ(СЦЕПИТЬ(""Данные для проекта"!" ;АДРЕС((ПОИСКПОЗ(E30 ;"Данные для проекта" !$G$15:$G$34;0 ))+14 ;6 )));"-" )

Т.е. на листе "Данные для проекта" в диапазоне $G$15:$G$34, в 6м столбце ищем значение в ячейке Е30, и как только находим нехитрым методом преобразуем в адрес, который будет преобразован в ссылку формулами.

Новая проблема уже упирается в длину строки, если использовать шрифт Times New Roman №10, то длина текста, которая будет выводится на печать, не превышает 105 символов. Т.е. мы упираемся в необходимость создавать костыль для переносов. Итак код функции на VBA:

Function PatrOfString(StringOfTable As String , Nnumber As Byte) As String Dim МассивБлоков(1 To 10 ) As String Dim i As Integer " Dim j As Integer " Dim k As Integer " Dim p As Integer " For i = 1 To 10 Let МассивБлоков(i) = " " Next i Let k = 1 Let p = Len (StringOfTable) Let p1 = Len (StringOfTable) For i = 1 To Round (Len (StringOfTable) / 105 ) + 1 Step 1 If p > 0 And p < 105 Then If k <= p1 Then Let МассивБлоков(i) = Mid $(StringOfTable, k, p) Else If Mid (StringOfTable, k, 1 ) = " " Then If k <= p1 Then Let МассивБлоков(i) = Mid $(StringOfTable, k, 105 ) Let p = p - 105 k = k + 105 Else j = 105 * i If j - k >= 105 Then j = k + 105 End If Do j = j - 1 Loop While Mid $(StringOfTable, j, 1 ) <> " " Let МассивБлоков(i) = Mid $(StringOfTable, k, j - k + 1 ) Let p = p - (j - k + 1 ) Let k = j + 1 End If End If Next i If Nnumber - 1 > 0 Then If МассивБлоков(Nnumber) = МассивБлоков(Nnumber - 1 ) Then МассивБлоков(Nnumber) = " " End If PatrOfString = МассивБлоков(Nnumber)

Т.е. мы сперва забираем текст, потом вырезаем 105 символов, ищем с конца первый символ пробел, как его находим, то закидываем в первую строку массива текст длиной с первого символа, по номер найденного пробела. Затем продолжаем операцию до тех пор пока текст не закончится или не забьется выводной массив. На данном этапе он ограничен памятью в 10 строк. Затем мы выводим по ссылке содержание нужной строки из 1-10. Из минусов решения - забивается память, и для каждого нового запроса осуществляется пересчет заново. Но костыль работает.

Теперь вывод в типовой шаблон АОСР. Есть опять 2 варианта, либо вручную прописывать сопоставлению столбцу(/строки в случае горизонтально расположенных данных под каждый акт), то это будет долго и ресурсоемко подгонять каждый новый шаблон или изменения под таблицы данных. Потому делаем оптимизацию. Данные на каждый один акт будут располагаться вертикально, а сопоставление управляющей комбинации символов (на латинице, т.к. сами акты сплошь на кириллице) будут строки с информацией в этих актах, таким образом в двойном вложенном цикле поиском в тексте управляющих символов мы сопоставим нужное значение из колонки.

Do wb.Worksheets("Пример акта входного контроля" ).Copy after:=Worksheets(Worksheets.Count) Set новыйЛист = wb.Worksheets(Worksheets.Count) For x = 1 To 15 Step 1 " Перебираем столбцы в листе "Пример акта входного контроля" For y = 1 To 71 Step 1 " Перебираем строки в листе "Пример акта входного контроля" If Sheets(новыйЛист.Name).Cells(y, 20 ) = 1 Then Let k = CStr (Sheets(новыйЛист.Name).Cells(y, x)) " Ищем только если в ячейке что-то есть If k <> "" Then For i = 1 To Кол_воЭл_овМассиваДанных Step 1 Let k = Replace (k, arrСсылкиДанных(i), Worksheets().Cells(i, НомерСтолбца)) Next i новыйЛист.Cells(y, x) = k End If End If Next y Next x " Если Вы захотите добавить новые данные для автозаполнения, продолжайте этот список. " Ячейки имеют координаты формата Cells(3, 2), где 3 - пример номера строки, 2 - пример номера столбца " Чтобы легко узнавать номер столбца, можно включить стиль ссылок R1C1 " (Файл -> Параметры -> Формулы -> галочка на поле "Стиль ссылок R1C1") " либо задавать координаты в формате Cells(1, "A"), где 1 - пример номера строки, "А" - пример буквенного обозначения столбца Rem -= Уточняем имя файла и текущий путь к папке откуда запущен макрос =- Let ИмяФайла = ИмяФайла + CStr (Worksheets("БД для входного контроля (2)" ).Cells("1" , НомерСтолбца)) + "-" Let ИмяФайла = ИмяФайла + CStr (Worksheets("БД для входного контроля (2)" ).Cells("2" , НомерСтолбца)) + ".xlsx" НовыйПуть = Replace (ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайла) Application.DisplayAlerts = False " выключаем вывод предупреждений Sheets(новыйЛист.Name).Copy " Копируем текущий лист в новую книгу ActiveWorkbook.SaveAs Filename:=НовыйПуть, _ FileFormat:=51 ActiveWindow.Close Sheets(новыйЛист.Name).Delete " Удаляем созданный лист Application.DisplayAlerts = True " Включаем вывод предупреждений обратно Let НомерСтолбца = НомерСтолбца + 1 Loop While НомерСтолбца <= КонечныйНомерСтолбца End Sub

Ну и последний момент на данном этапе - мы упираемся в производительность системы и при большом кол-ве актов их вывод будет занимать часы. Дабы ускорить процесс я использую следующий вариант: Копирую содержимое листа с данными в новый лист макросом, он получает в своем имени циферку (2), затем запускается еще один макрос, ускоряющий Excel, но отключающий ряд функционала:

"Ускоряем Excel путём отключения всего "тормозящего" Public Sub AccelerateExcel() "Больше не обновляем страницы после каждого действия Application.ScreenUpdating = False "Расчёты переводим в ручной режим Application.Calculation = xlCalculationManual "Отключаем события Application.EnableEvents = False "Не отображаем границы ячеек If Workbooks.Count Then ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False End If "Отключаем статусную строку Application.DisplayStatusBar = False "Отключаем сообщения Excel Application.DisplayAlerts = False End Sub

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

(по материалам https://habrahabr.ru/post/344956/)