Vba excel макрос: что это такое, как применяется в Excel и как создать макрос

Содержание

Автоматизация задач с помощью средства записи макросов — Excel

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

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

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

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

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


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

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

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

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

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

  1. На вкладке Разработчик в группе Код нажмите кнопку Запись макроса.

    -ИЛИ-

    Нажмите ALT+T+M+R.

  2. В поле Имя макроса введите название макроса. Сделайте имя понятным, чтобы можно было быстро найти нужный макрос.

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

  3. Чтобы назначить сочетание клавиш для запуска макроса, в поле Сочетание клавиш введите любую строчную или прописную букву. Рекомендуется использовать сочетания клавиш с CTRL+SHIFT, так как они будут заменять собой совпадающие с ними стандартные сочетания клавиш в Excel, пока открыта книга, содержащая макрос. Например, если назначить сочетание клавиш CTRL+Z (Отменить), вы не сможете использовать его для функции «Отменить» в данном экземпляре Excel.

  4. В списке Сохранить в выберите книгу, в которой вы хотите сохранить макрос.

    Как правило, макрос сохраняется в расположении Эта книга, но если вы хотите, чтобы макрос был доступен при использовании Excel, выберите Личная книга макроса . При выборе личнойкниги макроса Excel создает скрытую личную книгу макроса (Personal.xlsб), если она еще не существует, и сохраняет макрос в этой книге.

  5. В поле Описание при необходимости введите краткое описание действий макроса.

    Хотя поле «Описание» является необязательным, рекомендуется его заполнить. Кроме того, желательно ввести понятное описание, которое будет полезно вам и всем, кто запускает макрос. Если у вас много макросов, описания помогут быстро определить, для чего они нужны.

  6. org/ListItem»>

    Чтобы начать запись макроса, нажмите кнопку ОК.

  7. Выполните действия, которые нужно записать.

  8. На вкладке Разработчик в группе Код нажмите кнопку Остановить запись .

    -ИЛИ-

    Нажмите ALT+T+M+R.

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


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

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

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












Задача

Описание


Изменение параметров безопасности макросов в Excel

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


Запуск макроса

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


Изменение макроса

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


Копирование модуля макроса в другую книгу

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

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

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

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


Назначение макроса кнопке

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


Назначение макроса для элемента управления на листе

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


Включение и отключение макросов в файлах Office

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

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

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


Поиск справки по использованию редактора Visual Basic

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

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


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

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


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


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

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

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

  • org/ListItem»>

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

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

  1. Перейдите в Excel > параметры…> ленты & панель инструментов.

  2. org/ListItem»>

    В категории Настроить ленту в списке Основные вкладки установите флажок Разработчик, а затем нажмите кнопку Сохранить.

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

  1. На вкладке Разработчик нажмите кнопку Запись макроса.

  2. В поле Имя макроса введите название макроса. Сделайте имя понятным, чтобы можно было быстро найти нужный макрос.

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

  3. В списке Сохранить в выберите книгу, в которой вы хотите сохранить макрос.

    Как правило, макрос сохраняется в расположении Эта книга, но если вы хотите, чтобы макрос был доступен при использовании Excel, выберите Личная книга макроса. При выборе личнойкниги макроса Excel создает скрытую личную книгу макроса (PERSONAL.XLSB), если она еще не существует, и сохраняет макрос в этой книге. Книги в этой папке открываются автоматически при Excel, и любой код, сохраненный в личной книге макроса, будет указан в диалоговом окну Макрос, которое объясняется в следующем разделе.

  4. Чтобы назначить сочетание клавиш для запуска макроса, в поле Сочетание клавиш введите любую строчную или прописную букву. Рекомендуется использовать сочетания клавиш, которые еще не назначены другим командам, так как они будут переопределять совпадающие с ними стандартные сочетания клавиш в Excel, пока открыта книга, содержащая макрос.

  5. В поле Описание при необходимости введите краткое описание действий макроса.

    Хотя поле «Описание» является необязательным, рекомендуется его заполнить. Полезно ввести содержательное описание со всеми сведениями, которые могут быть полезны вам или другим пользователям, которые будут запускать макрос. Если у вас много макросов, описания помогут быстро определить, для чего они нужны.

  6. Чтобы начать запись макроса, нажмите кнопку ОК.

  7. Выполните действия, которые нужно записать.

  8. На вкладке Разработчик щелкните Остановить запись.

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


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

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

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









Задача

Описание


Включение и отключение макросов

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


Копирование модуля макроса в другую книгу

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

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

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

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


Назначение макроса кнопке

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


Назначение макроса для элемента управления на листе

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

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

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


Поиск справки по использованию редактора Visual Basic

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




Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.



VBA макросы в Excel читать все о макросах в Эксель

Содержание

  1. Что такое VBA?
  2. Программирование объектов в VBA — свойства и методы
  3. Объекты, свойства и методы
  4. Что дальше?

Что такое VBA?

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

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

Программирование объектов в VBA — свойства и методы

VBA — это объектно-ориентированный язык программирования. Мы пишем код, который манипулирует объектами в Excel.

Объекты — это практически все, что вы можете себе представить в Excel: таблицы, диапазоны, диаграммы, сводные таблицы и т.д.

При написании кода VBA мы может читать/записывать свойства объектов или выполнять действия (методы) над объектами.

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

i = Worksheets.Count
Range("A1"). Copy Range("D1")
Range("A1").Value = 6000
Workbook("Бюджет.xls").Save
MsgBox(Worksheets(2).Name)
ActiveWorkbook.Close
Worksheets("Лист1").Name="Отчет"
Range("А1").Font.Size = 20
Worksheets.Add
Worksheets("Лист5").Delete

Ещё одно понятие, с которым вы должны познакомиться — это объектная модель Excel. Это библиотека всех объектов в Excel. Как вы можете себе представить, это огромная библиотека!

Каждый объект имеет свои собственные свойства и методы, которые мы можем использовать. Есть три основных вещи, которые мы можем сделать со свойствами и методами.

# 1 — Чтение свойств

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

Вот несколько примеров:

i = Worksheets.Count       '(1) передаём переменной i кол-во листов в файле
MsgBox(Worksheets(2).Name) ' (2) показываем сообщение с именем 2-го листа
  1. Worksheets.Count — возвращает количество листов в активной книге.
  2. Worksheets(2).Name — возвращает имя второго по счёту листа в активном Excel-файле

# 2 — Написать свойства

Мы также можем установить или изменить свойства объектов в Excel. Обычно это делается с помощью знака равенства «=» в VBA.

Вот несколько примеров:

Range("A1").Value = 6000
Worksheets("Лист1").Name="Отчет"
Range("А1").Font.Size = 20
  1. Range(«A1»).Value = 6000 — изменяет значение в ячейке А1 на 6000.
  2. Worksheets(«Лист1″).Name=»Отчет» — изменяет имя Лист1 в активном Excel-файле на «Отчет»
  3. Range(«А1»).Font.Size = 20 — изменяет размер шрифта в ячейке А1 на 20.

# 3 — Выполнять действия с методами

Методы — это действия, которые можно выполнить с объектом.
Обычно это действия, которые вы выполняете в Excel, нажимая кнопку меню или
сочетание клавиш. Вот несколько примеров.

Range("A1"). Copy Range("D1")
Workbook("Бюджет.xls").Save
ActiveWorkbook.Close
Worksheets.Add
Worksheets("Лист5").Delete
  1. Range («A1»). Copy Range («D1») — копирует ячейку A1 и вставляет ее в ячейку D1
  2. Workbook(«Бюджет.xls»).Save — сохраняет файл Бюджет.
  3. ActiveWorkbook.Close — закрывает активную книгу.
  4. Worksheets.Add — добавляет рабочий лист перед активным листом (аналогично сочетанию клавиш Shift + F11)
  5. Worksheets(«Лист5»). Delete — удаляет Лист5 из активного Excel файла

Большинство свойств и методов содержат дополнительные параметры, которые вы можете указать для настройки вашего запроса. Оглядываясь назад на пример резки картофеля, моя жена хотела кубики 1/2 дюйма, поэтому я указал это при использовании метода вырезания.

Когда мы используем метод Worksheets.Add в Excel для добавления листа, метод Add имеет необязательные аргументы или параметры, которые можно указать, чтобы сообщить VBA: где разместить новый лист, сколько листов для вставки и какой тип листа.

Вы также
можете нажать Ctrl + I, чтобы вызвать это информационное окно с параметрами.

Объекты, свойства и методы

Объектная модель Excel — это огромная библиотека. Я кодирую VBA 10 лет и до сих пор не знаю всего. Я, вероятно, никогда не буду. Но легко получить помощь и узнать об объектах, которые вы хотите использовать.

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

Вот ссылка на страницу справки для Sheets.Add Method

Кстати, сочетание клавиш для открытия редактора VB — Alt +
F11. Нажмите Alt + F11 (Function + Option + F11 на Mac 2011) в любом месте
Excel, чтобы открыть редактор VB и просмотреть модули кода.

Что дальше?

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

Читайте следующую статью:
Введение в VBA: Объектная модель VBA (Часть 2 из 3)

Новые возможности VBA в Office 2019

Редактировать

Твиттер

LinkedIn

Фейсбук

Электронная почта

  • Статья
  • 3 минуты на чтение

В следующих таблицах представлены новые языковые обновления Visual Basic для приложений (VBA) для Office 2019.

Office

Теперь включены значения

Имя Описание
Перечисление MsoGraphicStyleIndex (Office) Представляет предустановленные графические стили.
Перечисление MsoShapeType (Офис) mso3DModel , msoGraphic , msoLinked3DModel и msoLinkedGraphic .

Доступ

Имя Описание
Объект диаграммы (Доступ) Настраиваемая визуализация данных, которую можно включить в отчет или форму.
Объект ChartAxis (Доступ) Представляет поле, значения которого будут включены в ось категорий диаграммы.
Объект ChartSeries (доступ) Представляет ряд значений в указанной диаграмме.
Объект ChartValues ​​(доступ) Представляет поле, значения которого будут отображаться на оси значений (Y) диаграммы.
перечисление acCommand (доступ) acCmdImportAttachdBase и acCmdExportdBase теперь включены.

Excel

Имя Описание
Объект Model3DFormat (Excel) Представляет свойства формы 3D-модели.
Свойство Series.GeoMappingLevel (Excel) Задает уровень отображения географии для указанной серии в группе диаграмм. Чтение/запись XlGeoMappingLevel .
Свойство Series.GeoProjectionType (Excel) Задает тип географической проекции для указанного ряда в группе диаграмм. Чтение/запись XlGeoProjectionType .
Свойство Series.RegionLabelOptions (Excel) Задает поведение маркировки областей для указанной серии в группе диаграммы. Чтение/запись XlRegionLabelOptions .
Свойство Shape.GraphicStyle (Excel) Возвращает или задает MsoGraphicStyleIndex , представляющий стиль графики SVG. Читай пиши.
Свойство Shape.Model3D (Excel) Возвращает объект Model3DFormat , представляющий 3D-свойства объекта 3D-модели. Только для чтения.
Свойство ShapeRange.GraphicStyle (Excel) Возвращает или задает MsoGraphicStyleIndex , представляющий стиль диапазона фигур, содержащего одну или несколько графических объектов SVG. Читай пиши.
Свойство ShapeRange. Model3D (Excel) Возвращает объект Model3DFormat , представляющий 3D-свойства объекта 3D-модели. Только для чтения.
Метод Shapes.Add3DModel (Excel) Создает 3D-модель из существующего файла. Возвращает объект Shape , представляющий новую 3D-модель.
Перечисление Excel.XlGeoMappingLevel (Excel) Константы, передаваемые и возвращаемые свойством Series.GeoMappingLevel .
Перечисление Excel.XlGeoProjectionType (Excel) Константы переданы и возвращены Свойство Series.GeoProjectionType .
Перечисление Excel.XlRegionLabelOptions (Excel) Константы, передаваемые и возвращаемые свойством Series.RegionLabelOptions .

PowerPoint

Имя Описание
Объект Model3DFormat (PowerPoint) Представляет свойства формы 3D-модели.
Свойство Presentation.AutoSaveOn (PowerPoint) True , если изменения в презентации сохраняются автоматически. Чтение/запись Логическое значение .
Shape.Decorative Property (PowerPoint) Устанавливает или возвращает декоративный флаг для указанного объекта. Читай пиши.
Свойство Shape.GraphicStyle (PowerPoint) Возвращает или задает MsoGraphicStyleIndex , представляющий стиль графики SVG. Читай пиши.
Свойство Shape.Model3D (PowerPoint) Возвращает объект Model3DFormat , представляющий 3D-свойства объекта 3D-модели. Только для чтения.
ShapeRange.Decorative property (PowerPoint) Устанавливает или возвращает декоративный флаг для указанного объекта. Читай пиши.
Свойство ShapeRange.GraphicStyle (PowerPoint) Возвращает или задает MsoGraphicStyleIndex , представляющий стиль диапазона фигур, содержащего одну или несколько графических объектов SVG. Читай пиши.
Свойство ShapeRange.Model3D (PowerPoint) Возвращает объект Model3DFormat , представляющий 3D-свойства объекта 3D-модели. Только для чтения.
Метод Shapes.Add3DModel (PowerPoint) Создает Model3DFormat объект из существующего файла. Возвращает объект Shape , представляющий новую 3D-модель.

Visio

Имя Описание
Свойство Shape.AlternativeText (Visio) Возвращает или задает альтернативное текстовое описание, связанное с объектом. Читай пиши.
Свойство Shape.Title (Visio) Возвращает или задает альтернативный текст, связанный с объектом. Читай пиши.

Слово

Имя Описание
Объект Model3DFormat (Word) Представляет свойства формы 3D-модели.
Свойство Shape.GraphicStyle (Word) Возвращает или задает MsoGraphicStyleIndex , представляющий стиль графики SVG. Читай пиши.
Свойство Shape.Model3D (Word) Возвращает объект Model3DFormat , представляющий 3D-свойства объекта 3D-модели. Только для чтения.
Свойство ShapeRange.GraphicStyle (Word) Возвращает или задает MsoGraphicStyleIndex , представляющий стиль диапазона фигур, содержащего одну или несколько графических объектов SVG. Читай пиши.
Свойство ShapeRange.Model3D (Word) Возвращает объект Model3DFormat , представляющий 3D-свойства объекта 3D-модели. Только для чтения.
Метод Shapes.Add3DModel (Word) Добавляет 3D-модель на холст для рисования. Возвращает объект Shape , представляющий трехмерную модель, и добавляет его в коллекцию CanvasShapes .
Перечисление WdInlineShapeType (Word) wdInlineShape3DModel и значения wdInlineShapeLinked3DModel теперь включены.

См. также

  • Ссылка на библиотеку VBA

Поддержка и отзывы

У вас есть вопросы или отзывы об Office VBA или этой документации? См. раздел Поддержка и отзывы Office VBA, чтобы узнать, как вы можете получить поддержку и оставить отзыв.

Влияние автосохранения на надстройки и макросы

  • Статья
  • 7 минут на чтение

Узнайте, как работает автосохранение в Excel, PowerPoint и Word и как оно может повлиять на надстройки или макросы.

Обзор автосохранения

Когда файл размещается в облаке (т. е. OneDrive, OneDrive для бизнеса или SharePoint Online), автосохранение позволяет автоматически и непрерывно сохранять изменения, внесенные пользователем. Когда файл предоставляется другим пользователям, их изменения объединяются с версией файла этого пользователя. Если автосохранение отключено, сохранение должно быть запущено вручную, чтобы изменения пользователя сохранялись в облаке и чтобы этот пользователь мог получать изменения других пользователей.

В настоящее время Excel, Word и PowerPoint предоставляют событие BeforeSave , которое позволяет разработчику выполнять код после того, как пользователь запускает сохранение, но до того, как оно произойдет. Excel также предоставляет событие AfterSave , которое может выполнять код макроса или надстройки после завершения сохранения.

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

Как правило, этих проблем можно избежать, если пользователь отключит автосохранение. Вы можете сделать это от имени пользователя, используя свойство AutoSaveOn в Word, Excel и PowerPoint, если оно доступно (см. следующий пример). Вы также можете предпринять шаги в качестве разработчика, чтобы смягчить эти проблемы, чтобы ваши надстройки и макросы работали бесперебойно, даже если включено автосохранение.

Пример

Этот пример отключает автосохранение и уведомляет пользователя о том, что книга не сохраняется автоматически.

 Sub UseAutoSaveOn()
    ActiveWorkbook.AutoSaveOn = Ложь
    MsgBox "Эта книга сохраняется автоматически: " & ActiveWorkbook.AutoSaveOn
Конец сабвуфера
 

Возможные проблемы с событиями сохранения и автосохранением

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

  1. Код в Перед сохранением или После сохранения события выполняются слишком долго
  2. Код в событиях сохранения вызывает модальное диалоговое окно
  3. Код в событиях сохранения очищает стек отмены (только Excel)
  4. Код в AfterSave загрязняет книгу (только Excel)
  5. Код в BeforeSave отменяет сохранение файла (устанавливая для аргумента Cancel значение True)

Проблема 1: Код в событиях BeforeSave или AfterSave выполняется слишком долго

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

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

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

Пример сценария

Представьте себе надстройку, которая позволяет пользователю создавать пользовательские карты на основе данных в книге Excel. Такая надстройка может иметь код BeforeSave , который сериализует любые карты, созданные пользователем, и сохраняет их в рабочей книге в части CustomXML. Этот процесс может занять секунду, и Excel может не отвечать, пока это происходит.

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

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

Обходной путь

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

Проблема 2: Код в событиях сохранения вызывает модальное диалоговое окно

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

Пример сценария

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

Обходные пути

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

Если вы хотите, чтобы код проверки запускался только при первом сохранении из нового документа, но не при последующих автосохранениях, рассмотрите возможность проверки свойства, такого как Excel Workbook.Path перед отображением любого пользовательского интерфейса во время BeforeSave или AfterSave . В Excel свойство Workbook.Path должно быть пустым, если в книге еще нет места для сохранения.

Проблема 3: Код в событиях сохранения очищает стек отмены (только для Excel)

В общем случае при выполнении определенных операторов VBA в Excel стек отмены будет очищен. Например, если вы измените значение ячейки, запустив ActiveCell.Value = "myValue" , стек отмены очищается. Если такой код присутствует в событии BeforeSave или AfterSave для макроса или надстройки, а автосохранение включено, пользователь этого макроса или надстройки часто не сможет отменить обычные действия пользователя, как ожидалось.

Пример сценария

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

Обходной путь

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

Выпуск 4: код в

AfterSave загрязняет книгу (только Excel)

Когда функция автосохранения включена, события BeforeSave и AfterSave срабатывают только в том случае, если в книге произошли изменения с момента последнего их изменения. были запущены. Если код в Событие AfterSave загрязняет книгу (т. е. вносит дополнительные изменения), что потенциально может привести к повторному запуску событий для того же изменения, а затем поставить события в очередь для повторного запуска на неопределенный срок. Это может привести к пустой трате системных ресурсов и повлиять на срок службы батареи.

Обходной путь

Код, который загрязняет книгу в AfterSave , следует переместить в BeforeSave или вообще в другое место (см. проблему 3). Сегодня это не очень хорошая практика, даже без автосохранения, потому что она оставляет книгу в постоянном «грязном» состоянии, из-за чего при закрытии появляется подсказка, предлагающая пользователю сохранить свои изменения, даже если они не внесли никаких дополнительных изменений.

Проблема 5: Код в

BeforeSave отменяет сохранение файла (путем установки для аргумента Cancel значения True)

Сегодня можно отменить сохранение в событии BeforeSave , установив для Cancel значение True:

 Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Отмена = Истина
Конец сабвуфера
 

Когда автосохранение включено, приложение (т. е. Excel, Word или PowerPoint) запускает непрерывное автоматическое сохранение до тех пор, пока в файле не останется несохраненных изменений. После того как пользователь внесет одно изменение в файл, приложение попытается сохранить его.

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

Пример сценария

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

Обходной путь

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