Как связать макросы в excel

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

Файлы для скачивания:

Файл Описание Размер файла: Скачивания
Скачать этот файл (P_Macros_05.zip)Пример   14 Кб 1846

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

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

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

Сделать это очень просто. Записываем два макроса, как это сделать в статье «Как записать макрос не зная языка VBA?». Суть работы макросов будет заключаться в следующем:

  • Макрос1 — будет копировать данные из диапазона E2:E6 и вставлять их в диапазон G2:G6, как значения с сохранением форматов.
  • Макрос2 — будет выделять данные в диапазоне G2:G6 красным цветом и делать их «жирными».

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

Затем нажимаем сочетание клавиш Alt+F11, откроется окно редактора VBA, и мы увидим код двух наших макросов, записанный друг под другом:

Как соединить несколько макросов в один?

Встаем курсором после слов End Sub (второго макроса), и пишем следующий код:

Sub Макрос3()
    Call Макрос1
    Call Макрос2
End Sub

Должно получиться так:

kak-soedinit-neskolko-makrosov-v-odin_2.png

Если у вас записанные макросы оказались в разных модулях — это никак не влияет на их выполнение. Вставьте код «Макрос3» в любой из этих модулей или создайте 3-й модуль и вставьте код в него.

После чего закрываем редактор VBA, возвращаемся в нашу рабочую книгу, создаем кнопку на листе и назначаем ей «Макрос3″, как  это сделать описано в статье «Как сделать кнопку для запуска своего макроса?»

После чего нажимаем кнопку и видим, что макросы выполняются последовательно:

kak-soedinit-neskolko-makrosov-v-odin_3.png

Добавить комментарий

Макрос — это специальная программа, написанная на встроенном в Excel языке программирования Visual Basic for Application (VBA). Если вам часто приходится выполнять одни и те же операции в Эксель, то гораздо проще записать макрос или найти готовый код макроса, для выполнения определенных действий в Интернете.

Во втором случае, Вы найдете макрос в виде VBA-кода. В этом обычно и состоит вопрос: как добавить макрос в рабочий лист Excel, и как им пользоваться.

Как включить макросы в Excel

Чтобы Вы могли использовать макросы в работе, для начала их нужно включить. Кликаем по кнопочке «Файл», в левом верхнем углу, и выбираем из списка «Параметры».

Работа с макросами в Excel

В окне «Параметры Excel» перейдите на вкладку «Настройка ленты», теперь в правой части окна поставьте галочку напротив пункта «Разработчик» и нажмите «ОК».

Вверху на ленте появится новая вкладка «Разработчик». На ней и будут находиться все необходимые команды для работы с макросами.

Теперь разрешим использование всех макросов. Снова открываем «Файл» — «Параметры». Переходим на вкладку «Центр управления безопасностью», и в правой части окна кликаем по кнопочке «Параметры центра управления безопасностью».

Кликаем по вкладке «Параметры макросов», выделяем маркером пункт «Включить все макросы» и жмем «ОК». Теперь перезапустите Excel: закройте программу и запустите ее снова.

Как вставить макрос в Excel

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

Вставим код макроса в модуль

Например, нужно объединить несколько ячеек в одну без потери данных. Как известно, Excel может объединять ячейки, сохраняя данные только из левой верхней ячейки. Чтобы сохранить все данные из объединяемых ячеек, будем использовать VBA-код.

Открываем редактор VBА: переходим на вкладку «Разработчик» и кликаем по кнопочке «Visual Basic», также можно воспользоваться комбинацией «Alt+F11».

С левой стороны редактора, в окне «Project», выделяем мышкой рабочую книгу. Рабочая книга — это Ваш открытый документ Excel, в который нужно вставить макрос. У меня он называется «Книга1».

Кликаем по выбранному пункту правой кнопкой мыши и выбираем из меню «Insert» — «Module».

В окне «Project» появилась новая папка «Modules», а в ней наш первый модуль с названием «Module1».

Справа появится поле для ввода VBA-кода. С помощью комбинации «Ctrl+V», вставляю в него код, который будет объединять несколько ячеек, без потери данных. Название макроса «MergeCell».

Следите за тем, куда Вы вставляете код, это будет написано или в заголовке редактора, или в заголовке окна для вставки кода. Мы вставляем код в модуль, соответственно надпись — «Modul1(Code)».

Сохраняем изменения, нажав комбинацию «Ctrl+S». Если Вы используете Excel 2007 и выше, появится окно сохранения документа. В нем, в поле «Тип файла», выберите из выпадающего списка «Книга Excel с поддержкой макросов» и нажмите «Сохранить».

Вставим код макроса в рабочий лист

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

Открываем редактор VBA и в окошке «Project» выделяем нужный лист, если их в рабочей книге несколько, на котором должен работать макрос: «Лист1 (Лист1)». Кликаем по нему два раза мышкой.

Справа появиться окошко для ввода кода. Обратите внимание, мы вставляем код в рабочий лист, соответственно в заголовке написано «Лист1(Code)». Сохраните изменения в документе, как было описано выше.

Чтобы вставить код макроса в рабочую книгу, кликните два раза мышкой по пункту «ЭтаКнига» и вставьте код в появившуюся область.

Создадим пользовательскую функцию

Например, создадим функцию, которая будет рассчитывать НДС. В окне «Project» кликаем по рабочему листу правой кнопкой мыши и выбираем «Insert» — «Module».

В папке «Modules», появляется второй модуль с названием «Module2». Прописываем VBA-код в соответствующее окно, и сохраняем его, нажав «Ctrl+S». Называться функция будет «NDS».

Как запустить макросы в Excel

Теперь рассмотрим, как выполняются все созданные ранее макросы в документе Excel.

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

Выделяем ячейки, которые нужно объединить, затем переходим на вкладку «Разработчик» и кликаем по кнопочке «Макросы».

Откроется диалоговое окно «Макрос». В списке, выбираем нужное имя макроса: «MergeCell», и жмем «Выполнить».

Макрос выполнился: нужные ячейки объединены, и текст в них сохранен.

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

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

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

Если Вы создали пользовательскую функцию, то вставлять в документ ее также надо как функцию. У меня такая функция должна рассчитывать НДС.

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

Откроется окно «Мастер функций». В поле «Категория» выбираем из выпадающего списка «Определенные пользователем», в поле «Выберите функцию» выбираем название из списка: «NDS». Нажимаем «ОК».

Затем выделяю ячейку, для которой нужно посчитать НДС, и нажимаю «ОК».

Включить макросы в документе Excel 2010 совершенно не сложно. Надеюсь, Вы также разобрались, как вставить макрос в 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. Чтобы начать запись макроса, нажмите кнопку ОК.

  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, будет выполняться только для ячеек этого диапазона. Поэтому если вы добавите в диапазон новую строку, макрос не будет применяться к ней.

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

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

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

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

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

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

  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.

 

Pavel.Nev

Пользователь

Сообщений: 82
Регистрация: 22.01.2014

#1

20.09.2018 13:02:14

Добрый день.

Помогите пож-та объединить четыре макроса в один. В VBA не особо силен :(

Код
Sub DeleteSheet()
Dim Sh As Object
    For Each Sh In ActiveWorkbook.Sheets
    Application.DisplayAlerts = False
        If Sh.Visible <> xlSheetVisible Then Sh.Delete
        Application.DisplayAlerts = True
    Next
End Sub

Public Sub DelHiddenRows()
    Dim lR As Long, i As Long, Sh As Worksheet
    On Error Resume Next
    Application.ScreenUpdating = False
    For Each Sh In ThisWorkbook.Worksheets
        Sh.Activate
        lR = Sh.UsedRange.Rows.Count + Sh.UsedRange.Row - 1
        For i = lR To 1 Step -1
            If Sh.Rows(i).Hidden Then Rows(i).Delete
        Next
    Next
    Application.ScreenUpdating = True
End Sub

Sub delete_hidden_columns()
Dim ws As Worksheet
Dim i As Integer
For Each ws In ThisWorkbook.Worksheets
     For i = 256 To 1 Step -1
         If ws.Columns(i).EntireColumn.Hidden Then
             ws.Columns(i).EntireColumn.Delete
         End If
     Next
Next ws
Set ws = Nothing
End Sub

Sub DeleteAllComments()
For Each xWs In Application.ActiveWorkbook.Sheets
    For Each xComment In xWs.Comments
        xComment.Delete
    Next
Next
End Sub

Изменено: Pavel.Nev21.09.2018 19:46:07

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

#2

20.09.2018 13:13:49

Pavel.Nev, неужели Вы не видели, как выглядят макросы у других? Оформляйте код соответствующим тегом: ищите такую кнопку (см. скрин) и исправьте своё сообщение.
По вопросу: Можно не объединять, а просто вызывать все Ваши макросы в нужной последовательности примерно так:

Код
Sub Macro1()
'....
'....
'....
    Call Macro2
    Call Macro3
    Call Macro4
End Sub

Прикрепленные файлы

  • Тег VBA.jpg (19.2 КБ)

 

V

Пользователь

Сообщений: 5018
Регистрация: 22.12.2012

#3

20.09.2018 13:23:36

последние 3 как то так

Код
Application.ScreenUpdating = False
   For Each Sh In ThisWorkbook.Worksheets
       lR = Sh.UsedRange.Rows.Count + Sh.UsedRange.Row - 1
       For i = lR To 1 Step -1
           If Sh.Rows(i).Hidden Then Rows(i).Delete
       Next
       For i = 256 To 1 Step -1
          If Sh.Columns(i).EntireColumn.Hidden Then
              Sh.Columns(i).EntireColumn.Delete
          End If
       Next
      Sh. SpecialCells(xlCellTypeComments).ClearComments
   Next
   Application.ScreenUpdating = True
 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Если нужен не поочередный запуск, а объединение кодов, то вариант есть, но скрыт и ждет изменения названия темы согласно правилам форума. Изменить могут модераторы.

 

Pavel.Nev

Пользователь

Сообщений: 82
Регистрация: 22.01.2014

Объединение в моем понимании означает объединить 4е макроса в один ;)  Одним словом нажимаешь одну кнопку, и выполняются последовательно четыре  макроса. То есть предлагаю следующий заголовок: «Объединить несколько макросов, чтобы их запуск выполнялся последовательно». Пойдет так?

 

Pavel.Nev

Пользователь

Сообщений: 82
Регистрация: 22.01.2014

#6

21.09.2018 19:07:46

Цитата
Юрий М написал:
По вопросу: Можно не объединять, а просто вызывать все Ваши макросы в нужной последовательности примерно так:

Юрий, не могли бы вы пожалуйста написать полный код, поскольку я не особо силен в VBA… Спасибо большое!

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Какова должна быть последовательность выполнения макросов из стартового сообщения?

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

#8

21.09.2018 19:32:07

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

Код
Sub DeleteSheet()
Dim Sh As Object
    Application.DisplayAlerts = False
    For Each Sh In ActiveWorkbook.Sheets
        If Sh.Visible <> xlSheetVisible Then Sh.Delete
    Next
    'Отработал первый макрос - вызываем остальные
    Call DelHiddenRows 'Вызвали второй макрос
    Call delete_hidden_columns 'Вызвали третий макрос
    Call DeleteAllComments 'Вызвали четвёртый макрос
    Application.DisplayAlerts = True
End Sub

С остальными делать ничего не нужно — пусть остаются на своих местах.
P.S. В первом макросе переместил строки с Application.DisplayAlerts — у Вас обновление экрана отключалось/включалось несколько раз.

 

Pavel.Nev

Пользователь

Сообщений: 82
Регистрация: 22.01.2014

#9

21.09.2018 22:21:47

Цитата
Юрий М написал: Неужели я задаю такие трудные вопросы, что на них нельзя ответить сразу?

Ну получается, что нельзя, дядя ;) Попроще надо отвечать и общаться, а то можно и в жбан получить….Это вам так на будущее.
За помощь с макросом благодарю!

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Автор получит

ж

бан, если не объяснится

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

 

Pavel.Nev

Пользователь

Сообщений: 82
Регистрация: 22.01.2014

#12

23.09.2018 22:03:00

Цитата
vikttur написал:
Автор получит жбан, если не объяснится

Объясните сначала вот это: «Неужели я задаю такие трудные вопросы, что на них нельзя ответить сразу?» Апосля и поговорим…

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

За макрос еще раз спасибо ;)

 

БМВ

Модератор

Сообщений: 21383
Регистрация: 28.12.2016

Excel 2013, 2016

#13

23.09.2018 22:21:25

Цитата
Pavel.Nev написал:
Вообще уважительней надо общаться…

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

ВсеЖ бан тут заслуженный на мой взгляд.

По вопросам из тем форума, личку не читаю.

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

#14

23.09.2018 22:29:13

Цитата
Pavel.Nev написал:
уважительней надо общаться

Pavel.Nev, и что же неуважительного было в моём вопросе? Нормальный вопрос — ничего обидного. А в ответ хамство. Извиниться не хотите?

 

Pavel.Nev

Пользователь

Сообщений: 82
Регистрация: 22.01.2014

#15

23.09.2018 22:35:44

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

Цитата
БМВ написал: про жбан, вы написали…

Это была реакция на неуважительное отношение! По моему это никто не любит…

 

LSolaire

Пользователь

Сообщений: 4
Регистрация: 08.10.2019

Добрый день.
Я только изучаю VBA и вот столкнулась с проблемой.
Смысл в том, чтобы при нажатии на диаграмму, изменялись её свойства: т.е. чтобы по первому щелчку можно было перемещать и  изменять размеры диаграммы вместе с ячейками, а по второму щелчку на ту же диаграмму перемещать её, но не изменять размеры.
Я  прописала  2 макроса, но они последовательно не работают, работает только один.
Помогите, пожалуйста, объединить 2 макроса.
Файл во вложении

Изменено: LSolaire08.10.2019 17:58:53

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#17

08.10.2019 20:44:11

Да как Ваш вопрос связан с темой?!  Создайте отдельную тему с названием, отражающим суть задачи.
На форуме по Excel не картинки нужно показывать, а файлы-примеры.

yl3d

3 / 3 / 1

Регистрация: 28.09.2015

Сообщений: 271

1

Как запустить несколько макросов одновременно

28.12.2018, 00:48. Показов 10623. Ответов 21

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Доброй ночи.
Скажите , если кто знает:

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

Visual Basic
1
2
3
4
5
6
Sub Запуск()
Макрос1
Макрос2
Макрос3
Макрос4
End Sub

Как запустить несколько макросов одновременно ?
Не по порядку — один за другим, а одновременно — в одно и то же время.



0



es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

28.12.2018, 05:55

2

Создавать отдельные потоки, и в них запускать.
Но зачем?



0



3 / 3 / 1

Регистрация: 28.09.2015

Сообщений: 271

28.12.2018, 09:36

 [ТС]

3

SoftIce, как это сделать ?



0



es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

28.12.2018, 09:54

4

Цитата
Сообщение от yl3d
Посмотреть сообщение

SoftIce, как это сделать ?

Если долго и упорно скакать с бубном, то можно в VBA сделать.
В других языках это делается намного проще, буквально в пару строк.

Но, скорее всего, Ваш вопрос можно решить по-другому. Вы просто «копаете не в ту сторону».

Зачем макросы одновременно запускать ?



1



11482 / 3773 / 677

Регистрация: 13.02.2009

Сообщений: 11,145

31.12.2018, 18:36

5



0



3 / 3 / 1

Регистрация: 28.09.2015

Сообщений: 271

31.12.2018, 21:52

 [ТС]

6

SoftIce, зачем нужно одновременно запускать ?
Затем, что они должны сработать все разом.
Поэтому я и задаю этот вопрос.

Добавлено через 5 минут
Alex77755, вот наверное действительно — какая-то многопоточность тут нужна.
А как ее применить в моем примере, эту многопоточность ?



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

31.12.2018, 21:58

7

Цитата
Сообщение от yl3d
Посмотреть сообщение

Затем, что они должны сработать все разом.

— идеальный ответ
Т.е. например все 4 макроса одновременно пишут в ячейку каждый своё значение, и Вы устраивает на это дело тотализатор?



1



3 / 3 / 1

Регистрация: 28.09.2015

Сообщений: 271

01.01.2019, 09:47

 [ТС]

8

Hugo121, Как запустить несколько макросов одновременно, с помощью многопоточности ?



0



Модератор

Эксперт функциональных языков программированияЭксперт Python

34708 / 19229 / 4040

Регистрация: 12.02.2012

Сообщений: 32,197

Записей в блоге: 13

01.01.2019, 13:15

9

Дверь и форточка. Если никак не удается проникнуть в дом, остановись и оглядись. Возможно, что ты пытаешься пролезть в форточку, когда рядом открытая дверь.



3



3 / 3 / 1

Регистрация: 28.09.2015

Сообщений: 271

01.01.2019, 19:51

 [ТС]

10

Catstail, нет.
Дверь по-прежнему закрыта.
Остается только форточка.

Как запустить несколько макросов одновременно, с помощью многопоточности ?



0



653 / 246 / 88

Регистрация: 28.10.2015

Сообщений: 520

01.01.2019, 23:45

11

Вам же дали ссылку на обсуждение:
Маленькое продолжение темы «Аналог Excel-метода «OnTime»» или про многопоточность
Разве из всего этого:

Кликните здесь для просмотра всего текста

Цитата
Сообщение от The trick
Посмотреть сообщение

Поток легко можно создать в DLL/OCX и т.п.

Цитата
Сообщение от The trick
Посмотреть сообщение

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

Цитата
Сообщение от StepInLik
Посмотреть сообщение

А никак. Это возможно? Проверять код сотни и сотни раз … ставить флаги, делить ресурсы, думать что где чем может закончиться … думать головой и стать интерпретатором.

Не понятно, что даже для самых искушенных гуру возможность создания потоков в vba — это очень спорно и чаще всего остаётся теорией. The trick пишет, что поток легко создать в DLL/OCX и т.п.
Вот для этого человека собственно создание собственной dll/ocx не является сложностью. yl3d, а вы так можете? Если нет, то и многопоточность у вас не выйдет. Без обид, просто это задача мало кому по плечу даже из наиболее продвинутых.
Если хотите многопоточность, обратите взор на visual basic.net
Хотя возможно, что шанс создать многопоточность в vba есть. Ведь если многопоточность есть в .net, а .net, если всему верить, может быть прикручен к VBA. (гуглим «Excel-DNA», а также гуглим и «выкуриваем» всё по тематике «.net + vba»).
Прислушайтесь к совету Catstailа: многопоточность если и вообще возможна, то крайне сложна, лучше ищите иные стратегии для своего проекта.



1



3 / 3 / 1

Регистрация: 28.09.2015

Сообщений: 271

02.01.2019, 03:22

 [ТС]

12

Святой НякаЛайк, ну тогда не одновременное срабатывание, а каждый — через полсекунды.

Это же не многопоточность.



0



Святой НякаЛайк

653 / 246 / 88

Регистрация: 28.10.2015

Сообщений: 520

02.01.2019, 04:08

13

Цитата
Сообщение от yl3d
Посмотреть сообщение

а каждый — через полсекунды.

Сожалею. Можно предложить лишь метод ontime. НО! Но если ваш макрос работает допустим 5 минут, то всё равно сначала будет завершен этот макрос, а только потом запустится тот, который назначен по ontim’у.

Visual Basic
1
2
3
4
5
6
7
Sub Запустить_Вовремя() ' Процедура для запуска другой процедуры методом Ontime
    Application.OnTime Now + TimeValue("00:00:15"), "Mesaga"
End Sub
 
Sub Mesaga() ' Процедура, вызванная через Ontime
    MsgBox Format(Timer / 86400, "c"), , "Запущен мой макрос"
End Sub

Вот синтаксис для работы с методом Ontime. И да, это совсем не многопоточность. в ВБА она если и возможна, то мало кому «по зубам».



0



3 / 3 / 1

Регистрация: 28.09.2015

Сообщений: 271

02.01.2019, 09:12

 [ТС]

14

Святой НякаЛайк, ясно.
Ну так в том то, все и дело, что макросы выполняются длительностью — около минуты каждый. И нужно как-то не по 4 минуты в сумме — чтобы они шли, а пооперативнее — примерно что-то около минуты все вместе.



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

02.01.2019, 09:16

15

За минуту можно миллион строк обработать…
Нужно было всёж сперва подробно ответить на первый заданный Вам вопрос.



0



3 / 3 / 1

Регистрация: 28.09.2015

Сообщений: 271

02.01.2019, 09:56

 [ТС]

16

Цитата
Сообщение от Hugo121
Посмотреть сообщение

Нужно было всёж сперва подробно ответить на первый заданный Вам вопрос.

Ну так что ответить.
Для сокращения времени работы скрипта. Скрипты однотипные, но хотелось бы — чтобы выполнялись более менее одновременно.



0



Модератор

9167 / 3405 / 853

Регистрация: 22.02.2013

Сообщений: 5,185

Записей в блоге: 78

02.01.2019, 10:13

17

Цитата
Сообщение от yl3d
Посмотреть сообщение

Скрипты однотипные, но хотелось бы — чтобы выполнялись более менее одновременно.

Какие действия выполняются в макросах? Мб вообще нельзя их запускать одновременно к примеру если следующий макрос принимает на вход результат работы первого.



0



3827 / 2254 / 751

Регистрация: 02.11.2012

Сообщений: 5,930

02.01.2019, 10:13

18

покажите скрипты, может спецы подскажут как ускорить их (лучше в файле).
П.С. Хотя это уже другая тема.



0



3 / 3 / 1

Регистрация: 28.09.2015

Сообщений: 271

02.01.2019, 11:10

 [ТС]

19

Vlad999, ну а как вы их ускорите ?
Их не нужно встраивать один в другой.

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



0



1068 / 106 / 4

Регистрация: 19.12.2012

Сообщений: 449

02.01.2019, 13:09

20

Коллеги, а в чем вообще сложность?
Делаете головной модуль, контролируюший группу отдельных самостоятельных аппликейшенов …
В каждом аппликейшене запускаете свою книгу и в ней — свой макрос/вычисление …
Обмен данными и синхронизацию … тоже, разрабатываете схему/протокол обмена данными через управляющее приложение …
Если коллеги подскажут как организовать сервер DDE, то на этой основе можно вообще организовать полноценную быструю эмуляцию многопоточности



1



Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Как связать листы в excel с помощью формул
  • Как связать лист с ячейкой на другом листе в excel
  • Как связать документ excel с документом word
  • Как связать диапазоны ячеек в excel
  • Как связать данные двух таблицы excel

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии