все отлично)) спасибки. вот чего я хотел)
Workbooks.Application.DisplayAlerts = False Excel.ActiveWorkbook.Save Application.Quit
все отлично)) спасибки. вот чего я хотел)
Workbooks.Application.DisplayAlerts = False Excel.ActiveWorkbook.Save Application.Quit 85Muslim85
Сообщение все отлично)) спасибки. вот чего я хотел)
Источник: www.excelworld.ru
Запрос “Отключение сохранения изменений” при закрытии книги в Excel
Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).
Описание
В Microsoft Excel можно создать макрос Microsoft Visual Basic для приложений (VBA), который подавляет запрос на Сохранение изменений при закрытии книги. Это можно сделать, указав состояние книги, в которой хранится сохраненное свойство, или подавить все оповещения для книги.
Дополнительные сведения
ПРИМЕЧАНИЕ. Корпорация Майкрософт предоставляет примеры программирования только для иллюстрации, не выполняя либо подразумеваемых. Сюда относится, но не ограничивается подразумеваемым гарантийным обязательством о товаре или пригодности для определенной цели. В этой статье предполагается, что вы знакомы с языком программирования, который вы продемонстрировали, и с инструментами, используемыми для создания и отладки процедур. Специалисты службы поддержки Майкрософт могут объяснить особенности конкретных процедур. Однако они не изменяют эти примеры для предоставления дополнительной функциональности или создания процедур, отвечающих вашим конкретным требованиям.
Чтобы подготовиться к реализации одного из примеров ниже, выполните эти действия в первую очередь.
Запустите Excel и откройте новую книгу.
Нажмите клавиши ALT + F11, чтобы запустить редактор Visual Basic.
В меню Вставка выберите пункт модуль.
Введите пример кода макроса на лист модуля.
Нажмите клавиши ALT + F11, чтобы вернуться в Excel.
В Microsoft Office Excel 2003 и более ранних версиях Excel в меню Сервис выберите пункт макрос , а затем — макросы.
В Microsoft Office Excel 2007 в группе код на вкладке разработчик нажмите кнопку макросы .
Если вкладка разработчикнедоступна, выполните указанные ниже действия.
помощью. Нажмите кнопку Microsoft Office , а затем — Параметры Excel.
байт. В категории популярные в разделе Основные параметры работы с Excelвыберите пункт Показать . Флажок “Разработчик” на ленте и нажмите кнопку ОК.
Выберите нужный макрос и нажмите кнопку выполнить.
Свойство Saved возвращает значение false , если после последнего сохранения книги были внесены изменения.
Для указания макроса, который должен выполняться при закрытии книги, можно использовать зарезервированное имя подпрограммы Auto_Close . Таким образом, вы можете управлять обработкой документа, когда пользователь закрывает документы в Excel.
Пример 1: Закрытие книги без сохранения изменений
Чтобы принудительно закрыть книгу, не сохраняя никаких изменений, введите следующий код в модуль Visual Basic этой книги:
ДоЧерний элемент Auto_Close ()
ThisWorkbook. Save = true
Если для свойства Saved установлено значение true, приложение Excel отправляет сообщение о том, что книга уже была сохранена, и после последнего сохранения изменения не произошел.
Свойство дисплайалертс программы можно использовать для той же цели. Например, следующий макрос выключает дисплайалертс , закрывает активную книгу без сохранения изменений, а затем снова включает дисплайалертс .
Application. Дисплайалертс = false
Application. Дисплайалертс = true
Кроме того, можно использовать аргумент SaveChanges метода Close .
Следующий макрос закрывает книгу без сохранения изменений.
Пример 2: Закрытие книги и сохранение изменений
Чтобы принудительно сохранить изменения в книге, введите следующий код в модуль Visual Basic этой книги:
ДоЧерний элемент Auto_Close ()
Если ThisWorkbook. Save = false, то
ThisWorkbook. Save End, если
Эта подпроцедура проверяет, было ли для сохраненного свойства File задано значение false. Если да, то книга была изменена с момента последнего сохранения, и эти изменения будут сохранены.
Источник: support.office.com
Закрыть все открытые книги Excel
Эти макросы помогут вам закрыть все открытые файлы Excel, оставив лишь текущий файл.
Выбирайте любой из них – они мало чем отличаются.
Первый оставляет открытой только активную книгу, независимо от того, из какого файла запущен этот макрос:
Второй макрос оставляет открытой только ту книгу, из которой запущен этот самый макрос, независимо от того, какая книга активна на момент запуска:
Третья версия макроса отличается от первой лишь тем, что все файлы закрываются с сохранением изменений: (первый макрос в этом случае выдаёт диалоговое окно – сохранять файл, или нет)
Ну и четвертый вариант – тоже закрывает все открытые файлы, только изменения в этих файлах не сохраняются:
Комментарии
В такой комбинации, без дополнительных кодов в файле, вроде работает
Private Sub Workbook_Open() ‘ срабатывает при открытии ThisWorkbook.Windows(1).Visible = False ‘ скрываем окно файла, он становится невидимым Application.OnTime Now + 1 / 86400, “CloseThisFile” ‘ через секунду запустим макрос ThisWorkbook.Windows(1).Visible = True ‘ открываем окно файла, он становится видимым End Sub
‘ этот код в стандартном модуле Sub CloseThisFile() ‘ закрываем все книги, кроме той, из которой запущен макрос Dim wb As Workbook: Application.ScreenUpdating = False For Each wb In Workbooks ‘ перебираем все открытые книги If Not wb Is ThisWorkbook Then If wb.Windows(1).Visible Then wb.Close Next wb End Sub
В тоже время в моем файле, где установлен код скрытия всех элементов, происходит некий конфликт, что приводит к различным сбоям, но убрав команды, скрытия и открытия окон, вроде тоже работает.
Private Sub Workbook_Open() ‘ срабатывает при открытии Application.OnTime Now + 1 / 86400, “CloseThisFile” ‘ через секунду запустим макрос End Sub
Здравствуйте, Сергей Исправить-то возможно, но как именно, навскидку не могу сказать. По идее, должно всё работать Я пытался протестировать, но что-то у меня не срослось.
Вставил в Книгу1 такой код (в модуль ЭтаКнига)
Причин не знаю, — ни разу с подобной необходимость не сталкивался, чтобы закрывать макросом файл, открытый по гиперссылке.
Я бы попробовал сделать так: (не проверял)
Здравствуйте. Попытался вставить второй код в Книгу1 в процедуру открытия книги а затем открыть ее гиперссылкой в Книге2, Книга2 закрывается, но Книга1 открывается и сразу закрывается. Походу открытие Книги1 через гиперссылку в другой книге не является корректным для данного кода, возможно ли это исправить?
Тимон, я же вам сказал, – с данным конкретным макросом все в порядке. В нём не может быть ошибок, если рядом с этим макросом не написать какой-нибудь код, который с ним будет конфликтовать.
можно ли получать не имена открытых книг, а имена открытых файлов Excel
а чем, по-вашему, отличается книга от файла? если что-то открыто в Excel, – то это объект Workbook (книга Excel)
Обратитесь на форумы по Excel, прикрепите там свой файл, – тогда вам подскажут, в чем проблема. В этом конкретном макросе, – ошибок нет.
Вроде разобрался в чем дело. VBA ругается на несоответствие полученного значения переменной wb объявленному типу Workbook (почему и выползает wb=nothing). А можно ли получать не имена открытых книг, а имена открытых файлов Excel и закрывать их? Прошу сильно не пинать за глупость, я совсем недавно начал осваивать VBA. На случай если что-то зависит от версии, Excel у меня 2007.
Поменял, и снова вылезает ошибка type mismatch с указанием что wb=nothing. Вообще цель такая, что при запуске определенного файла excel все открытые файлы должны закрыться и сохраниться, если изменения не сохранены. может нужно код вынести на кнопку, раз при открытии книги он не срабатывает?
с кодом всё в порядке (у себя проверил, – всё работает) могу порекомендовать только заменить ActiveWorkbook на ThisWorkbook
можете попробовать ещё поменять
Подскажите пожалуйста, а почему не работает такой вот код:
Private Sub Workbook_Open() CloseAllWorkbooks frm_Work.Show End Sub
Sub CloseAllWorkbooks() Dim wb As Workbook Application.ScreenUpdating = False For Each wb In Workbooks If Not wb Is ActiveWorkbook Then wb.Close (Not wb.Saved) End If Next wb End Sub
При наличии любого открытого файла excel выполнение этого кода при запуске файла с ним приводит к ошибке wb=nothing.
Вы не написали, в каком формате сохранять, – я это и не учел в макросе Метод saveas принимает в качестве второго параметра тип файла – поставьте курсор в коде на saveas, нажмите F1, почитайте справку, доработайте код
Эхехе. Даже и не знаю, что делать. Файлы выгружаются из программы в старом формате, из-за этого включается режим ограниченной функциональности и отключаются макросы.
Источник: excelvba.ru
Закрыть и сохранить книгу с помощью макроса без запуска событий beforesave
У меня есть список рабочих книг, которые следуют одному и тому же шаблону, и у всех есть событие макроса “beforesave”, которое в основном создает логин сохранения на листах, перечисляя время и идентификатор пользователя от того, кто сохраняет рабочую книгу.
Поэтому иногда мне нужно изменить формулу во всех книгах, и, поскольку закрытие и сохранение каждой из них вручную занимает около минуты, я создал макрос, который открывает все изменения, которые мне нужны, и закрывает их сохранение. Это сэкономило бы мне значительное количество времени, так как в целом этот процесс занимает около 30 минут моего времени и много скуки.
Проблема в том, что когда макрос пытается закрыть и сохранить книгу, событие beforesave не выполняется должным образом, и в результате рабочая книга не сохраняет и не закрывает макрос. По какой-то причине событие пропускается в макросе.
Чтобы решить эту проблему, я хочу запустить этот макрос, чтобы внести все изменения во все рабочие книги, пропустив событие до сохранения (если необходимо) и фактически сохранив и закрыв их в конце.
Попытка запуска макроса построчно, и когда он попадает в часть события, он вызывает ее, но по какой-то причине он остается на том же листе вместо перехода к листу журнала и записывает информацию журнала в неправильный лист как результат. В любом случае, выполнение строки за строкой, очевидно, не будет работать для меня, так как это в основном то же самое, что выполнять процесс самостоятельно, вручную.
Запуск макроса для внесения необходимых изменений, а также сохранение и закрытие всех рабочих книг.
1 ответ
0 Ahmed AU [2019-01-25 08:16:00]
Добро пожаловать в ТАК. Ответ на заголовок слишком прост, если вы в порядке, чтобы выполнить задание обновления, запустив какие-либо события в wbPaste . Просто добавьте Application.EnableEvents = False перед сохранением файла и сделайте его истинным после завершения сохранения.
Также, основываясь на комментариях @Mathieu Guindon, ваше сообщение сбивает вас с толку из-за ваших точных требований и непреднамеренного использования Activate Я просто немного изменил структуру вашего кода, чтобы избежать каких-либо событий во время обновления.
Если вы хотите запускать другие события в книгах wbPaste и не хотите запускать только события BeforeSave или часть кода в этом событии, и у вас есть доступ для изменения кодов событий, то вы можете прибегнуть к добавлению ветки в “BeforeSave”. код событий, проверяя значение ячейки в соответствии с моим комментарием. Если вы опасаетесь случайного изменения/удаления значения ячейки пользователем, лучше ввести флажок CustomDocumentProperties.
Вы можете добавить и установить пользовательское свойство документа на панели документов всех wbPaste книг wbPaste . Я бы предпочел ввести свойство Custom Document BeforeSaveCheck ‘, запустив один раз код
Теперь вы можете ввести простую ветвь в BeforeSave событий wbPaste книг, как
и установка свойства в True при открытом событии
Источник: qarchive.ru
3 совета, как сохранить и закрыть все открытые файлы книги Excel + макрос
Итог: Изучите несколько трюков и советов, чтобы сохранить и закрыть все открытые книги Excel.
Уровень мастерства: Начинающий

Если вы используете Excel весь день каждый день, как я, то у вас, наверняка, открыто много рабочих книг одновременно. Я стараюсь дисциплинировать себя, но иногда это трудно. И в конце дня мы просто хотим закрыть все открытые рабочие тетради и пойти домой! Итак, этот пост содержит несколько советов по быстрому закрытию всех открытых файлов, чтобы помочь сократить трафик в час пик.
Совет № 1: Shift + кнопка закрытия окна
Самый быстрый способ закрыть все открытые книги — это удерживать клавишу Shift, нажимая кнопку «Закрыть окно». Кнопка «Закрыть окно» — это «х» в правом верхнем углу окна приложения

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

Окно также содержит кнопку Сохранить все. Вы можете нажать эту кнопку, чтобы сохранить все несохраненные книги за один шаг.
Нажатие на кнопку «Отмена» отменит всю операцию, а все еще открытые книги останутся открытыми.
Но что, если мы не хотим сохранить все или некоторые из открытых рабочих книг? Мы вернемся к этому в совет № 3.
Совет № 2: добавьте кнопку «Закрыть все» на панель быстрого доступа
Мы также можем добавить кнопку «Закрыть все» на панель быстрого доступа (QAT), чтобы закрыть все открытые книги. Это делает то же самое, что и сочетание клавиш Shift + Close Window.

Преимущество здесь в том, что мы можем использовать сочетание клавиш для нажатия кнопки. Доступ к кнопкам QAT можно получить с помощью сочетания клавиш, нажав клавишу Alt и номер, назначенный кнопке.

Чтобы добавить кнопку «Закрыть все» в QAT, откройте окно параметров Excel («Файл»> «Параметры») и следуйте инструкциям на изображении ниже.

После нажатия кнопки «Закрыть все» нам будет предложено то же окно, как описано в совете № 1.
Бонусный совет: мы также можем использовать сочетание клавиш Ctrl + W, чтобы закрыть одну книгу. Я упомянул этот совет в своем посте по 17 ярлыкам Excel на 2017 год.

Совет № 3: Закройте все открытые книги с помощью макроса
В этом разделе я поделюсь несколькими макросами, которые можно использовать для закрытия всех открытых рабочих книг. Макросы дают нам большую гибкость, когда мы хотим контролировать, какие книги сохраняются перед закрытием.
Вы можете скачать файл Excel, который содержит макросы здесь.
Save And Close All Files Macros.xlsm (15.8 KB)
Макрос для закрытия всех книг без сохранения
Если мы не хотим сохранять какие-либо открытые файлы, мы можем использовать следующий макрос.
Как работает этот макрос?
Приведенный выше макрос просматривает все открытые книги на компьютере с помощью цикла For Next Loop. Он использует оператор If, чтобы проверить, является ли файл в цикле (wb.Name) НЕ (<>) файлом, который содержит код ThisWorkbook.Name.
Затем он использует метод Workbooks.Close (страница справки MSDN), чтобы закрыть книгу. Метод Close имеет необязательный параметр для SaveChanges. Мы можем установить значение True, чтобы сохранить изменения, и False, чтобы закрыть без сохранения.
Примечание. Этот макрос следует запускать только в том случае, если вы уверены, что не хотите сохранять изменения ни в одном из открытых файлов. Его нельзя отменить. Возможно, вы также захотите добавить окно сообщения Да / Нет, чтобы предупредить пользователя перед запуском этого макроса.
Макрос для сохранения всех, кроме новых несохраненных книг (блокнот)
В конце рабочего дня у меня обычно есть несколько книг, которые я хочу сохранить, и некоторые, которые я НЕ хочу сохранять. Я часто открываю новые рабочие книги, чтобы использовать файлы Excel для быстрых вычислений. Я называю их «блокноты». Я не хочу сохранять их, но хочу сохранить все другие открытые файлы.

Файлы — блокноты никогда не сохранялись, поэтому они еще не имеют расширения. Они называются: Book1, Book2, Book2 и т.д. Обратите внимание, что на снимке экрана отсутствует расширение файла (.xlsx, .xlsm).
Таким образом, мы можем добавить оператор If в наш макрос, чтобы увидеть, существует ли расширение файла. Если расширение файла существует, то мы сохраним файл. Если нет, то мы закроем без сохранения.
Как работает этот макрос?
Этот макрос похож на макрос для закрытия всех книг. Разница в том, что мы используем оператор If, чтобы проверить, имеет ли файл расширение.
Функция Right используется для возврата 5 символов в конце имени файла. Если wb — это существующий файл, который уже был сохранен, то Right (wb.Name, 5) вернет «.xlsx» или «.xlsm».
Функция Instr (страница справки MSDN) используется для поиска строки в строке. Возвращает начальный номер строки. Таким образом, если Instr находит «.xls» в пределах «.xlsx» или «.xlsm», он возвращает 1. В противном случае он возвращает 0.
Оператор If проверяет, является ли возвращаемое значение из Instr больше 0, и сохраняет изменения при закрытии книги. В противном случае изменения не сохраняются для книг, которые НЕ содержат расширения.
Макрос для сохранения и закрытия всех книг и автоматического именования файлов
Иногда нам можем быть нужно сохранить некоторые из этих новых файлов (блокноты), но у нас нет времени, чтобы просмотреть каждый файл и сохранить его с именем.

Следующий макрос сохранит и закроет ВСЕ файлы и автоматически назовет новые файлы, которые не были сохранены. Он помещает все новые файлы (блокнот) в указанную вами папку.

Затем вы можете вернуться в эту папку, когда у вас будет свободное время для перемещения и переименования файлов.
Как работает этот макрос?
Этот макрос работает аналогично двум другим выше. Единственное отличие состоит в том, что он сохраняет новые файлы (блокноты) в папку на вашем компьютере.
Чтобы использовать этот макрос, вам нужно изменить переменную sPath на папку на вашем компьютере. Обязательно заканчивайте строку пути к файлу обратной косой чертой.
У метода Workbooks.Close есть еще один необязательный параметр (Filename), который позволяет нам указать имя файла, в котором мы хотим сохранить файл, если файл еще не был сохранен.
Если мы не используем параметр «Имя файла», Excel предложит нам меню «Сохранить как» для каждого файла. Таким образом, указание имени файла обходит это окно и может сэкономить нам много времени.
Значение параметра Filename объединяет строку для полного пути к файлу. Он также изменяет текущую дату и время до конца имени файла, используя функции «Формат» и «Сейчас». Функция Format в VBA аналогична функции TEXT в Excel и позволяет нам указать числовой формат. Функция «Сейчас» возвращает текущую дату и время на компьютере пользователя.
Я рекомендую добавить эти макросы в вашу личную книгу макросов, чтобы вы могли использовать их в любое время. Чтобы узнать больше, ознакомьтесь с моей статьей и видео о личной книге макросов.
У вас есть свои советы по сохранению и закрытию файлов?
Я надеюсь, что эти советы и макросы помогут вам закончить день немного быстрее. Есть ли у вас какие-либо другие советы по закрытию файлов? Пожалуйста, оставьте комментарий ниже с любыми предложениями или вопросами. Спасибо!
Источник: excelpedia.ru
Канал в Telegram
Вы здесь
Автозапуск макроса при открытии или закрытии книги Excel
Как запустить макрос при открытии или закрытии книги Excel?
Иногда требуется выполнить некоторые действия или расчеты при запуске рабочей книги в Excel. В этой статье рассмотрим на примере простого запроса пароля как реализуется автозапуск макроса в Excel. Хочу сразу отметить, запуск макроса произойдет только в случае если в настройках безопасности (Сервис – Макрос – Безопасность) выбран низкий или средний уровень безопасности. При среднем уровне пользователь должен не отключать макросы при запросе.
Итак, Excel запущен, книга создана, VBE открыт (Alt+F11).
В окне Project Explorer (Ctrl+R) находим нашу книгу

в моем случае это Книга2. Разворачиваем группу объектов “Microsoft Excel Objects” и находим объект “ЭтаКнига“

кликаем по нему два раза. Перед нами откроется редактор кода объекта “ЭтаКнига“. Вы можете переименовать название объекта, выделив его и в окне Properties (F4) изменить свойство (Name).
Теперь создадим форму в нашей книге (как это сделать читаем здесь). На форму добавим две кнопки (CommandButton) и TextBox. Примерный вид следующий:

Эта форма будет появляться при открытии книги, в которую пользователю необходимо ввести пароль. Ввод пароля всегда скрывается звездочками, точками и т.д. Сделаем и мы тоже самое. Для этого выделите TextBox и в его свойствах (окно Properties) найдите пункт PasswordChar. В его значение вы можете поставить любой символ, эти символы будут отображаться при вводе. Не будем отступать от традиций, поставим знак “звездочки”

Код для кнопки “Продолжить” следующий:
Private Sub CommandButton1_Click() If TextBox1.Text = “123” Then UserForm1.Hide _ Else MsgBox “Вы ввели неверный пароль! Попробуйте еще раз.” End Sub
Пароль у нас “123”, если введен верный пароль, то скрываем форму и продолжаем работать с книгой.
Код для кнопки “Отмена”
Private Sub CommandButton2_Click() ThisWorkbook.Close False End Sub
ThisWorkbook – ключевое слово. Дословно “Эта рабочая книга” или “Текущая рабочая книга” Close – команда на закрытие нашей книги. Параметр False указывает на закрытие книги без сохранения. Параметр false является необязательным. Если этот параметр не указать, то в случае внесения изменений в книгу отобразится диалог:

Все. Форму запрограммировали. Осталось ее автоматически запустить. Для этого перейдем в открытый ранее редактор объекта “ЭтаКнига” и добавим туда следующую процедуру:
Private Sub Workbook_Open() UserForm1.Show End Sub
Workbook_Open – событие, происходящее при открытии рабочей книги. Собственно в этой процедуре и открывается наша форма (UserForm1.Show), происходит запуск макроса, или выполняется любой другой код. Процедура Workbook_Open сработает только в объекте “ЭтаКнига”. Сохраните книгу, закройте и попробуйте ее открыть.
Как выполнить макрос при закрытии книги Excel?
Событие, вызываемое при закрытии книги, так же как и открытие, относится к объекту “ЭтаКнига” (workbook). Открываем редактор кода этого объекта. Теперь выберите в выпадающем списке объект “Workbook” затем в списке доступных событий выберите BeforeClose – событие, вызываемое перед закрытием книги:

Событий объекта книги полно: событие при создании листа, событие при активации книги и т.д. Итак, после выбора BeforeClose будет создана процедура:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
End Sub
Добавьте в эту процедуру например, строчку вызова сообщения:
Private Sub Workbook_BeforeClose(Cancel As Boolean) MsgBox “Ой! Меня закрывают!” End Sub
Событие BeforeClose имеет параметр Cancel логического типа, который по умолчанию имеет значение False. Если в этот параметр передать значение True, то книгу невозможно будет закрыть:
Private Sub Workbook_BeforeClose(Cancel As Boolean) MsgBox “Меня закрыть невозможно!” Cancel = True End Sub
На этом все. Рабочий вариант, рассмотренный в данной статье, прикреплен ниже. В последующих статьях еще не однократно будет затронут объект WorkBook и его события, ну а пока – пока!
Источник: www.programm-school.ru
Adblock detector
|