Vba excel при закрытии файла

 

safin

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

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

Есть макрос записан, требуется, чтобы он запускался при закрытии книги, или Excel

 

mazayZR

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

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

вот пример кода, который сохраняет книгу при ее закрытии и не ругается  

  Private Sub Workbook_BeforeClose(Cancel As Boolean)  
Application.DisplayAlerts = False  
ActiveWorkbook.Save  
End Sub  

  между саб и енд саб можно напихать чего требуется :-)

 

safin

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

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

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

 

Товарищу safin требуется следующее (судя по предыдущей его теме):  
1. У некоего господина (или дамы) имеется флешка, которую он периодически вставляет в компьютер, к которому имеет доступ наш герой (safin), но не имеет доступа к самой флешке  
2. Нашему герою ОЧЕНЬ хочется узнать содержимое этой самой флешки, а в частности файлов эксель  
3. Вот и созрел в его голове хитроумный план написать макрос (точнее чтобы ув. форумчане его написали), который будет сохранять в определенную папку копию любого открытого(закрытого) экселевского файла на данном компьютере, а равно как и файлов открытых(закрытых) с флешки  

  Мне кажеца что здесь попахивает макровирусом, или я не так понял?

 

а по закрытию — чтобы самый свежачок? :)

 

safin

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

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

Молодец 007, правильно понял. Можно сделать все проще, контролировать вставление флешки и катать оттуда все файлы, но вот это уже более страшное преступление. И потом это не так интересно.

 

Safin, Опа! Не знал такого…  
Как сохранять файл по закрытию — знаю, а вот по событию появления нового носителя…  
Ну поделись. Весь код не нужен, только основное.  
Все равно ведь открою для себя это, рано или поздно. Мне просто хочется знать такие примочки, чтобы не быть «лохом» в VBA.

 

safin, я так предполагаю, что тут не обходится без функций API. Я их плохо, то есть ваще не знаю, как с ними работать.

 

safin

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

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

dsapa  
Тут нафиг Excel уже не нужен. Главное иметь администраторские права на компьютер, а мне хочется имено один эксельский файл, имено с помощью макросов взять.

 

аха.. админские права все же нужны..  

  хотя зачем не знаю :)

 

возможен ли такой вариант:  
если есть доступ к Excel, сделать для него надстройку, в которой и прописать процедуру сохранения всех открытых книг в определенную папку при событии закрытия любой из них. Мусору вагон и маленькая тележка выйдет, но может и получится что-нить. И лучше не сам файл сохранять, а копирнуть, а то юзер удивлен будет — работал, а рез-т тот же (редактированный файл улетел в шпионскую папку).    
Эт так, теоретические домыслы, на практике фиг его знает, что выйдет.

 

safin

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

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

слэн  
Чтобы всю флешку утащить.  

  Мне же просто нужно копирнуть файл, который будет на выходе. Т.е. его сохранить в двух местах, на флешке и на локальном жестком диске.  

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

 

{quote}{login=}{date=26.06.2008 03:57}{thema=}{post}возможен ли такой вариант:  
если есть доступ к Excel, сделать для него надстройку, в которой и прописать процедуру сохранения всех открытых книг в определенную папку при событии закрытия любой из них. Мусору вагон и маленькая тележка выйдет, но может и получится что-нить. И лучше не сам файл сохранять, а копирнуть, а то юзер удивлен будет — работал, а рез-т тот же (редактированный файл улетел в шпионскую папку).    
Эт так, теоретические домыслы, на практике фиг его знает, что выйдет.{/post}{/quote}  

  истина где-то рядом

 

mazayZR ответил..  

  если вы этого не поняли, то..

 

Бало уже, однако…  

  Цитата_1 (safin):  
1 — «Задача стоит следующим образом:  
1. Уже есть файл, хранится на флешке, требуется украсть его копию;  
2. К файлу как понимаете никакого доступа нет;  
3. Но есть доступ к Excel на компьютере, где работают с этим файлом;  
4. Требуется макрос, который будет запускаться, при запуске Excel и при закрытии файла или его сохранении, просто сохраняет копию в определенную папку.»  

  Цитата_2(Артем) (:  
«даже и не знаю…мне кажется это неэстетичным и не этичным  
»  
Вопрос: г-н safin, может вам сразу в НТЦ Генпрокуратуры, МВД или ФСБ обратиться? Там заодно и справку дадут под какую/ие статью/и подпадете сами и «консультанты»? Ведь не решение задачи «А=Б+С» треубется «стянуть»…

 

Z,   «генпрокуратура… статью… стянуть…»  
А я так скажу: отнюдь!  
Любой поступок любого человека можно оценить как на «плюс», так и на «минус». Как там у Гёте в «Фаусте»?  
«Кто хочет правым быть и языком владеет,  
Тот правым быть всегда сумеет» (слова Мефистофеля).  
Поэтому предлагаю считать эту тему как развивающую для всех нас, юзеров. В противном случае мы не юзеры, а лохи, если не знаем таких «уловок» и лазеек Екселя. Готов поспорить.  
Продолжаем тему. Думаю, тут надо в Екселе прописать макрос, который бы срабатывал от события открытия определенного файла с определенного носителя. А вот с чего начать — ума не приложу. К тому же надо и порт знать, к которому флешка подключается, а их в компе может быть 3-4 штуки (USB).

 

я все-таки думаю про надстройку, а чтоб лишнего не накопировать-так сделать проверку в коде принадлежности файла к съемному диску по имени диска, и если да, то копировать. Да и вообще просто интересно на сам код посмотреть, если кто-то захочет таковой написать, как писал ранее ув. dsapa, в качестве развития. А «консультанты» с «генпрокуратурой»… — кто будет использовать, пусть энтих и ловят. :)

 

ну, если вы уверены, что съемный диск всегда определенной буквой будет, то да..    

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

  и все равно — вам давно уже ответили.. а недостающее давно бы справкой нагнали..

 

yozhik

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

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

#19

28.06.2008 12:14:35

{quote}{login=слэн}{date=28.06.2008 10:03}{thema=}{post}ну, если вы уверены, что съемный диск всегда определенной буквой будет, то да..    

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

  и все равно — вам давно уже ответили.. а недостающее давно бы справкой нагнали..{/post}{/quote}  

  слэн, посты с надстройкой мои (сорри, забывал подписываться), а искать решение — не вижу практического применения. Интересно просто разбираться в том, что вы (я имею ввиду всех гуру этого форума) здесь выкладываете. Я учусь :). А насчет справки — не повезло, офис англоязычный, а в англицком я еще хуже разбираюсь, чем в VBA :). А еще как всегда два фактора: время и лень искать что-то самому, что не будет потом использоваться (тут Артема полностью поддерживаю про этичность вопроса). Просто любопытно.

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

Запускать код VBA при закрытии или открытии книги


Запускать код VBA при закрытии или открытии книги

1. Включите книгу, нажмите Alt + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. Двойной клик ThisWorkbook в проекте — VBAProject панель, чтобы открыть ThisWorkbook (Код) окно.
код запуска документа при открытии или закрытии 1

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

3. Затем скопируйте свой собственный код без первой и последней строки и вставьте между Private Sub Workbook_Open() и End Sub как показано ниже.
код запуска документа при открытии или закрытии 3

4. Затем нажмите Сохраните кнопку, чтобы сохранить код, в появившемся диалоговом окне напоминания нажмите Нет.
код запуска документа при открытии или закрытии 4

5 Тогда Сохранить как появится диалоговое окно, сохраните файл как Excel Macro-Enabled Workbook и выберите папку для размещения файла.
код запуска документа при открытии или закрытии 5

6. Нажмите Сохраните кнопка. Теперь код будет работать, пока рабочая книга открыта.

Если вы хотите запускать код при закрытии книги каждый раз, выберите Деактивировать из правого раскрывающегося списка в Code окно и скопируйте код, который вы будете запускать, и вставьте между Private Sub Workbook_Deactivate() и End Sub.


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (1)


Оценок пока нет. Оцените первым!

Макрос закрытия книги без сохранения

​Смотрите также​​Private Sub CommandButton4_Click()​
​ и получать нужный​ как правильно?​ #2 объект, точка​ As Excel.Application Dim​Set oExcel =​ это сделать через​ & » /T»,​Ответ:​

​ что при событии​​ к строковым переменным​
​ActiveWorkbook.Close True​ так:​ кликом сохранялся файл​Workbooks.Close​
​ не работает (​vadim​ Set_windows.Hide End Subпри​ результат???​Но ведь в​

​ Клозе, ну сделал​​ oWorkbook As Excel.Workbook​ CreateObject(«Excel.Application») ‘создать объект​ regional settings, а​
​ vbHide Else: MsgBox​Разместите этот код​ открытия файла из​Вы пытаетесь прицепить​
​End If​
​Sub TestClose()​ и закрывался Excel?​

​End Sub​​Юрий М​

​: ActiveWindow.Close​​ закрытии все настройки​

​oExcel.Worksheets(«Лист1»).Range(«a1»).Font.Size = 14​​ Ворде в том​ так​ Dim Количество_найденного_текста As​ Microsoft Excelзатем делаю​

​ вот как бы​​ «Excel не может​ в модуле книги,​ некоторой папки, переписываются​

​ значение типа Integer,​​End Sub​Application.Run «ВосстановитьИнтерфейс»​Юрий М​KSV​

​: Вы, если спрашиваете,​​При закрытии книги​
​ сохраняются, при открытии​
​Busine2009​

​ скрипте который я​так как не​

​ Long Set oExcel​​ что хочу​ программно?​ закрыться, наверное вы​ (обычно с названием​ модули в VBA​ возвращаемое функцией​openid.mail.ru/mail/vlad3622340​Application.Quit​: Не это ищете:​: все правильно​
​ то хоть читайте​ появляется окно «Сохранить​
​ снова этой формы​
​:​

​ представил не ругается,​​ знаю как правильно,​
​ = CreateObject(«Excel.Application») ‘создать​………………..​
​Ципихович Эндрю​
​ не сказали пожалуйста»,​
​ ЭтаКнига)​ в открытый файл.​InStr(sName, »&»)Андрей​: Спасибо, Юрий, ещё​ActiveWorkbook.Close True​

​ Workbooks(имя).Close true Или​​200?’200px’:»+(this.scrollHeight+5)+’px’);»>’ подавляет предупреждения Excel​ ответы. Ведь ясно​ изменения в файле?»​ с следующий раз-​Ципихович Эндрю​ выполнается и есть​ приходится угадывать​ объект Microsoft Excel​

​хочу закрыть без​
​: Вроде изучил этот​
​ 16: Cancel =​

​Option Explicit Private​​ Модули предназначены для​

planetaexcel.ru

закрытие екселя с сохранением и без предупреждения (Макросы/Sub)

​wertt​​ раз!​End Sub​ активная книга​Workbooks.Application.DisplayAlerts = False​ сказал — В​ Мне сохранять изменения​
​ они воспроизводятся ))​,​ результат​
​Workbook.Close savechanges =​
​ oExcel.Workbooks.Open ("L:Г.xls") oExcel.Visible​
​ вопросов, пишу так:​
​ вопрос​
​ 1 End If​
​ Sub Workbook_BeforeClose(Cancel As​

​ того что-бы не​​: Все равно ошибка​
​Вроде разобрался.​
​А в модуле​
​openid.mail.ru/mail/vlad3622340​' сохраняет книгу​ МОДУЛЬ КНИГИ. В​
​ не надо. Какой​
​ такого быть не​в 5 строке​согласно её текста,​
​ False '424 ошибка​
​ = True 'задаём​
​oExcel.Workbooks.Close(SaveChanges = True)​
​'параметр SaveChanges типа​ End Sub​ Boolean) Const i​ можна было распечатать​ выскакивает на строчке​
​wertt​
​ книги удалить весь​: Нет, не это.​ в файл С​ ответ: "Вставил отдельным​ надо написать макрос​
​ должно?))​
​ помести в переменную​ что за подвох??​ oExcel.Close savechanges =​ размер шрифта для​ 'ошибка аргумент не​ Boolean, если установить​
​Night Ranger​ = "Excel закройся​ документ и сохранять.Что-то​ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges.​
​: Нужно закрыть документ​

​ код.​​Открыта всего одна​ ДРУГИМ именем​ модулем…» Тогда или​
​ чтобы это окно​
​Ципихович Эндрю​
​ oWorkBook открываемый документ.​

excelworld.ru

Закрытие Excel макросом без запроса о сохранении

​Busine2009​​ False ‘438 ошибка​

​ листа …, ячейки​
​ верный???????если напишу так:​

​ True сделанные изменения​: теперь Excel убегает,​
​ пожалуйста» MsgBox _​ я совсем невнимательно​Пишет Run-time error​ без сохранения. К​openid.mail.ru/mail/vlad3622340​

​ книга и нажатием​​Excel.ActiveWorkbook.SaveAs («rl.xlsm»)​ вызывайте этот макрос​ не появлялось?​

​: так и должно​​так запрограммировано.​
​:​ oWorkbook.Close savechanges =​ … равным 14​oExcel.Workbooks.Closeвсё работает, но​ сохранятся​

​ когда я его​​ «Вы уверенны что​

​ читал условие твоей​​ 4198​
​ сожалению ничего неполучается.​
​: Спасибо!​
​ на кнопку нужно​
​’ сохраняет книгу​ или явно на​

​Артем​​ быть, потому как​
​Randy​Ципихович Эндрю​
​ False ’91 ошибкаВё​ Worksheets(«Лист1»).Range(«a1»).Font.Size = 14​ мне так не​

​’в противном случае​ пытаюсь закрыть,​ завершили свою работу​ задачи (​

​Ошибка команды.​Private Sub Document_Close()​
​Всё получилось!​
​ её сохранить и​

​ в файл С​ событие пишите:​

​: вот так​​ Вы не выгрузили​: здравствуйте! Подскажите, пожалуйста,​,​
​ мимо, ещё 8​
​ oExcel.Workbooks.Close 1 oExcel.Workbooks.Close​ надо, так как​
​ нет, если параметр​
​Ужос!​
​ ?» & vbCrLf​
​Вот решение:​Может потому что​ Application.DisplayAlerts = True​Немного, конечно, не​

​ закрыть Excel.​​ ТЕМ ЖЕ именем​Private Sub Workbook_BeforeClose(Cancel​
​ActiveWorkbook.Save (ActiveWindow только​
​ её с памяти,​
​ как закрыть форму​
​для Wordа эта​
​ отличий не нашёл​
​ SaveChanges = TrueВот​ Эксель спросит, сохранить​ упускается​

​Option Explicit Private​​ & _ «может​
​Sub AutoClose() ActiveWindow.Close​
​ закрыть мы хотим​ strPath = ‘C:Моя​ удобно, когда при​Юрий М​Excel.ActiveWorkbook.Save​ As Boolean)​

​ частный случай, окон​​ а только скрыли​ без сохранения изменений,​ строка нерабочая, а​

​увидел двоеточие, попробую​​ этот скрипт я​ ли файл, надо​’тогда при закрытии​ Sub Workbook_BeforeClose(Cancel As​ вы чтото не​ False End SubЭтот​ в событии Close​ директория’ sName =​
​ любом закрытии файла​: А добавить Application.Quit​’ закрывает книгу​

​ActiveWindow.Close False​​ в одном файле​ с глаз -​
​ внесенных в такие​ не для Excel.​двоеточие добавил, а​ запускаю в ВБА​ чтобы сохранил без​ появляется диалоговое окно​
​ Boolean) Randomize With​ сохранили ?», 64​

​ ‘авто-макрос’ надо разместить​​wertt​
​ ActiveDocument.Name If ActiveDocument.FullName​
​ изменения всегда будут​
​Юрий М​Workbooks.Close​End Sub​ может быть несколько)​
​ жрёте память понимаешь-ли​
​ компоненты, как TextBox(ы)?​
​Правильно, вот к​
​ ошибки те же​
​ в Ворде, на​

​ вопросов​​ с вопросом о​ Application .WindowState =​
​ If InputBox(«Напишите такие​

planetaexcel.ru

Выход из документа без сохранения.

​ или в ThisDocument,​​: Попробуй SaveChanges:=False​ Like ‘*’ &​ сохраняться без спроса.​
​: Sub TestClose()​’ закрыть с​k61​Application.DisplayAlerts = False​ — дело хозяйское​Я пробовал так:​ этому привязать:​Workbook.Close savechanges:=False ‘424​ двух последних строчках​Busine2009​ необходимости сохранения​

​ xlNormal .Width =​​ слова: » &​

​ или в каком-либо​​wertt​ strPath & ‘*’​
​ Но это ерунда.​
​Application.Quit​ сохранением (без запроса​: получаем вечноживущую книгу:​ (хотя это не​ironegg​Private Sub CommandButton4_Click()​oWorkbook​ oExcel.Close savechanges:=False ‘438​ выделяет​: вытащи из скобок​’параметр FileName необходим,​ 300: .Height =​

​ i) = i​​ модуле, находящемся внутри​
​: Ошибок нет, но​ And InStr(sName, ‘&’)​Юрий М​ActiveWorkbook.Close True​ подтверждения пользователя, даже​Private Sub Workbook_BeforeClose(Cancel​ спасет, если файл​: префикс​
​ Set_windows.Hide End SubНо​Ципихович Эндрю​ oWorkbook.Close savechanges:=False ’91​
​’.Close и сообщение:​ и пробелом отбей.​ когда идёт вопрос​
​ 200 .Left =​ Then Shell «taskkill​ документа.​
​ привходе спрашивает о​

​ Then Application.DisplayAlerts =​​: Добавьте MsgBox, который​End Sub​
​ если .DisplayAlerts =​
​ As Boolean)​ будет открыт только​
​ас​
​ изменения сохраняются. Поискал​: Я Вас уверяю​Busine2009​

​ wrong Number of​​Ципихович Эндрю​

​ о закрытии книги​​ Fix(Rnd * .Width):​ /f /IM excel.exe​Документ захлопнется без​

​ сохранении файла.​​ False ActiveDocument.Close End​

​ спросит — сохранять​​Работает, как Вы​ True)​
​Cancel = True​ для чтения)​говорит о том,​ в интернете, -нашел​

​ в Ворде, что​:​
​ arguments or invalid​
​: теперь​ не связанной ещё​
​ .Top = Fix(Rnd​ /T», vbHide Else:​ лишних вопросов и​
​wertt​ If End Sub​ или нет?​ и хотели.​Workbooks.Close True​End Sub​Лузер​ что это код​ что-то вроде:​ так​
​Ципихович Эндрю​ property assigment​
​oExcel.Workbooks.Close SaveChanges =​ с именем файла​ * .Height) End​ MsgBox «Excel не​
​ без сохранения.​: Пардон, при выходе.​sitcom​openid.mail.ru/mail/vlad3622340​openid.mail.ru/mail/vlad3622340​’ закрыть без​Открывает возможность не​: Артем! Просят закрыть​ для Access.​Private Sub CommandButton4_Click()​oExcel.Worksheets(«Лист1»).Range(«a1»).Font.Size = 14что​,​Что мне там​
​ Trueвыделяет .Close и​
​’параметр RouteWorkbook связан​ With Cancel =​ может закрыться, наверное​Artem93z​wertt​: ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges​: Да, Юрий, в​
​: Спасибо, Юрий!​ сохранения (без запроса​ закрывать книгу до​

CyberForum.ru

Закрыть Excel, не сохраняя файл

​ без сохранения, а​​а это​ On Error GoTo​ так​теперь 10 строку​ нужно изменить, чтобы​ сообщение Wrong number​ с одновременной работой​ 1 End Sub​ вы не сказали​: Как можно закрыть​: Ну не знаю​wertt​ последнем Вашем посте​Но работает не​ подтверждения пользователя, даже​ тех пор пока​ ты предлагаешь сохранить.​

​говорит о том,​​ Err_CommandButton4_Click DoCmd.RunCommand acCmdUndo​Worksheets(«Лист1»).Range(«a1»).Font.Size = 14работает!​

​ исправляй, там у​​ файл закрывался без​ of arguments or​ над книгой, он​AlexCage​ пожалуйста», 16: Cancel​ ексель вместе с​

​ тогда.​​: Пишет Run-time error​

​ этого недостатка нет,​​ так, как хотел.​​ если .DisplayAlerts =​
​ не будут выполнены​ActiveWorkbook.Saved = True​ что, скорее всего,​ DoCmd.Close Exit_CommandButton4_Click: Exit​
​По закрытию поясните,​ тебя не указывается,​ вопросов о его​ invalid property assigment​ типа Boolean​: Как закрыть .xls​ = 1 End​ книгой с макросами?​Да сохрани его​ 4198​ зато при стандартном​Пустое окно программы​ True)​ какие либо действия.​ — говорит, что​ код выполняется в​ Sub Err_CommandButton4_Click: DoCmd.CloseНо​ пожалуйста, как строка​ к какой книге​ сохранении???​Busine2009​Но пишу так​ без сохранения, чтобы​

​ If End Sub​​ Application.Quit спрашивает, сохранить​​ перед закрытием отдельной​​Ошибка команды.​ закрытии Excel крестиком​ Excel всё-равно остаётся​Workbooks.Close False​
​Alex_ST​ книга уже сохранена,​ Word или Excel.​ на команду​ будет??​ относится лист.​Busine2009​:​Set oExcel =​ не выскакивало окно​Казанский​ ли изменения в​ командой — да​Private Sub Document_Close()​ не будет восстанавливаться​ открытым.​’ закрыть Excel​: Вполне можно событие​ ничего не сохраняя​в этом и​DoCmd.RunCommandкомпилятор ругается. Подскажите,​Busine2009​Ципихович Эндрю​:​Ципихович Эндрю​ CreateObject(«Excel.Application») ‘создать объект​ с вопросом о​:​

​ файле (в книжке).​​ и всех делов.​ Application.DisplayAlerts = True​ интерфейс у последующих​​Это наверное, потому,​
​ (закроется только если​ закрытия книги обрабатывать​или​ была проблема​ пожалуйста, в чем​:​: 10 строка в​Ципихович Эндрю​,​ Microsoft Excel ………………..​ сохранении изменений в​Night Ranger​

CyberForum.ru

Как зарыть файл без сохранения (Excel/VBA )?

​ мне не нужно​​Вообщем то цель​ strPath = ‘C:Моя​ открываемых файлов.​ что при закрытии​ в этом же​ не в модуле​
​ActiveWindow.Close False -​

​Теххи​​ дело..​Ципихович Эндрю​

​ моём 9 м​​,​всё правильно, см.​

​ oExcel.Workbooks.Close(SaveChanges = True)​ файле?​
​, угу, и вдруг​ сохранить их. А​ не сохранять.)​ директория’ sName =​Всем запросам не​ выполняется ещё один​ Application больше нет​ книги (как положено),​ закрыть без сохранения​: Народ, подскажите, как​KoGG​,​ сообщениии, это вот​11 строку удали,​ #2.​ ‘ошибка аргумент не​Зарание спасибо, Alex​ закроется другой экземпляр​

CyberForum.ru

Закрыть файл Excel с сохранением сделанных изменений

​ если я перед​​затупил я что-то​ ActiveDocument.Name If ActiveDocument.FullName​
​ угодить, либо то,​ макрос:​ открытых и не​ а в стандартном​
​Артем​ закрыть приложение Excel​: Замени CommandButton4_Click​
​Про закрытие всё​ эта:​ а насчёт 12​Vlanib​
​ верный???????так​AlexCage​ приложения Excel с​ куайтом закрою книгу​Тогда ни черта​
​ Like ‘*’ &​ либо это:)​Sub Workbook_BeforeClose(Cancel As​ сохраненных книг,​
​ модуле (как попытался​
​: ага, ошибся, сорри​ из VB без​Private Sub CommandButton4_Click()​ уже разъяснено. Вставьте​Worksheets(«Лист1»).Range(«a1»).Font.Size = 14Во​ строки:​
​: Вот так напиши:​oExcel.Workbooks.Closeвопросов нет, но​: ThisWorkbook.Close (SaveChanges =​

​ кучей несохраненных данных​​ без сохранения -​
​ не понимаю.​​ strPath & ‘*’​​openid.mail.ru/mail/vlad3622340​ Boolean)​’ иначе будет​
​ сделать marat), но​vadim​ сохранения изменений?​ Unload Me End​
​ ещё раз ваш​

​ всяком случае она​​найди 10 отличий​oExcel.Workbooks.Close 1​
​ мне так не​ False)​Тогда уж так​
​ до куайта не​Только что сделал​ And InStr(sName, ‘&’)​: А MsgBox куда​
​Application.Run «ВосстановитьИнтерфейс»​
​ запрашивать подтверждения сохранения,​ процедурой​
​: Спасибо получилось!!!​stanmarc​ Sub​
​ код, только Worksheets(«Лист1»)​ рабочая, ну пусть​ между 12 строкой​Busine2009​ надо​AlexCage​ Private Declare Function​

​ дойдет, т.к. закроется​​ процедуру с единственной​ Then Application.DisplayAlerts =​

​ добавить?​​End Sub​
​ при .DisplayAlerts =​Sub Auto_Close()​Andrey88​: Option Explicit Private​Ципихович Эндрю​

​ привяжите к oWorkbook,​​ даже её я​​ и соответствующей строкой​​:​
​Pavel Murtishev​: Еще раз спасибо,​

​ GetCurrentProcessId Lib «kernel32″​​ файл, а вместе​
​ строчкой:​

​ False ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges​​В макрос «ВосстановитьИнтерфейс»​​Как это можно​​ True)​
​ActiveWindow.Close False​: ActiveWindow.Close False -​ appExl As Excel.Application​: как видите не​ а не oExcel.​

​ заремарчу, ничего ведь​​ из #2.​Vlanib​: Эндрю,​ за HELP!​ () As Long​ с ним и​ActiveDocument.Close FalseВ пустом​ End If End​ (запускаемый при закрытии​ обойти?​Application.Quit​End Sub​ А куда конкретно​ Private wbItems As​ есть проблема​Ципихович Эндрю​ не изменится​Ципихович Эндрю​,​Workbook​Уважаю таких как​ Private Sub Workbook_BeforeClose(Cancel​ макрос с куайтом.​ документе напечатал текст​ Sub​ книги) при условии,​Юрий М​85Muslim85​
​ran​ это надо прописать​ Excel.Workbook Public Sub​а вот если​
​: запускаю с Ворда​Busine2009​: 11 строку удалил​так не надо​s​

​ ты.​​ As Boolean) Const​​ вот.​​ и, не сохраняя​
​sitcom​ если книга ещё​: У меня никаких​
​: все отлично)) спасибки…​:​ или вставить???​ ExitExcel() If Not​

​Закрыть форму с​​Dim oExcel As​
​:​
​12 строку​ писать — это​- это коллекция​
​А то бывают​ i = «Excel​
​Апострофф​ документ, переключился в​: непонятна строка​ не сохранена MsgBox​ пустых окон -​ вот чего я​
​85Muslim85​Marat​ wbItems Is Nothing​ сохранением изменений придётся​ Excel.Application Dim oWorkbook​
​Ципихович Эндрю​oExcel.Workbooks.CLOSE SaveChanges =​ для профессиональных программистов​
​ объектов Workbook. Попробуйте​ такие, им ответишь,​ закройся пожалуйста» MsgBox​: ThisWorkbook.Saved = True​ окно VBA и​If ActiveDocument.FullName Like​ есть, иначе нет.​ всё закрывается.​
​ хотел)​
​: добрый день, скажите​: Так куда все​
​ Then wbItems.Close SaveChanges:=False​ что-то предпринять​ As Excel.Workbook Dim​

​,​​ Trueнадо сравнить с​​ — пиши так,​​ исполнить данный код:​
​ а они даже​ _ «Вы уверенны​ Application.Quit?​ выполнил эту процедуру.​ »*» & strPath​

​Как такое условие​​Попробуйте так:​Workbooks.Application.DisplayAlerts = False​ как закрыть ексель​ таки это нужно​
​ Set wbItems =​Randy​ Количество_найденного_текста As Long​эта строка вообще​ строкой​ чтобы было понятно.​

​Dim oRptWorkBook As​​ не скажут работает​​ что завершили свою​​The_Prist​
​ Документ закрылся без​ & »*» And​

​ задать?​​Sub Workbook_BeforeClose(Cancel As​Excel.ActiveWorkbook.Save​ (полностью выйти) с​ прописать ?​ Nothing End If​:​
​ Set oExcel =​ не рабочая.​oRptWorkBook.Close savechanges:=Falseи найти​Ципихович Эндрю​
​ Workbook Set oRptWorkBook​ ли, уж не​ работу ?» &​: Sub CloseNotSave() Dim​ всяких вопросов.Да конечно,​ InStr(sName, »&») ThenВо-первых,​
​Юрий М​ Boolean)​

​Application.Quit​​ сохранением под таким​​Юрий М​​ If Not appExl​
​KoGG​ CreateObject(«Excel.Application») ‘создать объект​Ципихович Эндрю​
​ 10 отличий​: ‘экспорт найденного текста​
​ = Application.Workbooks.Add oRptWorkBook.Close​

​ говоря про ‘спасибо’Слушай,​​ vbCrLf & _​ wb As Workbook​ если запустить отдельно​
​ что Вы пытаетесь​: Попробуйте так:​
​Application.Run «ВосстановитьИнтерфейс»​
​openid.mail.ru/mail/vlad3622340​ же названием и​: Как куда -​

​ Is Nothing Then​​, огромное спасибо. Работает​​ Microsoft Excel oExcel.Workbooks.Open​​: я её не​
​1 отличие это​ в документе Ворд​ savechanges:=FalseДолжно работать.​ назрел еще один​ «может вы чтото​ For Each wb​

​ команду​​ найти в полном​
​Sub TestClose()​Call TestClose​: Закрываю Excel так:​ без предупреждения​ в модуль книги​ appExl.Quit Set appExl​ отлично!​ («L:Глаголы.xls») oExcel.Visible =​ с потолка взял,​ Фальше-Труе, пока не​ в Microsoft Excel​
​BR​ вопрос. Мне надо​ не сохранили ?»,​ In Workbooks wb.Saved​ActiveDocument.Close False -​ имени файла? Что​
​Application.Quit​

​End Sub​​ActiveWorkbook.Save​​скажите что в​​ на событие закрытия​
​ = Nothing End​Ципихович Эндрю​ Trueпочему я должен​
​ искал не могу​

CyberForum.ru

Закрыть форму без сохранения изменений

​ важно, так как​​ ‘подключаем библиотеку Tools​Ципихович Эндрю​ сохранить .xls в​ 64 If InputBox(«Напишите​ = True Next​
​ все работает нормально.​
​ значит »&»?​If MsgBox(«Сохранить данные»,​или непосредственно две​Application.Quit​ этом коде не​
​ книги.​ If End SubwbItems.Close​, Вы знаете, у​ так писать и​ вспомнить из какого​ выделяет и до​
​ — References -​: Вы меня не​ в .csv, но​

​ такие слова: «​​ Application.Quit End Sub​
​А тут событие​во-вторых, эта строка​ vbYesNo + vbQuestion,​

​ строки из указанного​​появляется окно «Сохранить​ так((((​
​Marat​
​ SaveChanges:=False — ili​ меня вот наоборот,​ получать ошибку 91​

​ места я её​​ этой строки ещё​​ Microsoft Excel 11.0​​ поняли:​ только с разделителями​
​ & i) =​​Farad​ на закрытие файла,​ у меня совершенно​ «Ваш выбор?») =​ макроса после Application.Run​ изменения в файле?»​
​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub вава()​: Sub zakrutie()​ prosto -​ когда я вношу​oWorkbook.Worksheets(«Лист1»).Range(«a1»).Font.Size = 14почему​ взял​ не дошёл​ Object Library или​я работаю в​

​ ‘,’, а не​​ i Then Shell​: ActiveWorkbook.Close False​ из кторого нужно​ справедливо вызывает​ vbNo Then​ «ВосстановитьИнтерфейс»​Как сделать, чтобы​Range(«A1») = 1​

​ActiveWindow.Close False​​wbItems.Close False -​​ в ТекстБоксы изменения​​ я не должен​попробовал сейчас в​2 отличие это​
​ Excel 12.0 Object​
​ Ворде, поэтому создаю​ ‘;’.Много информации перерыл,​ «taskkill /f /PID​Night Ranger​
​ выйти без сохранения.​ошибку 13(несоответствие типа​

CyberForum.ru

Как закрыть приложение Excel из VB без сохранения изменений?

​ActiveWorkbook.Close False​​Юрий М​ этот запрос не​Workbooks.Application.DisplayAlerts = False​End Sub​

​ eto to,chto tebe​​ в рабочем режиме​ так писать и​ макросе Экселя действительно​ то что в​ Library Dim oExcel​ объект​ нашел что можно​ » & GetCurrentProcessId​:​Дело в том​ данных) так как​Else​: Или (на кнопке)​ появлялся, а одним​Excel.ActiveWorkbook.SaveAs («rl.xlsm»)​Вставил отдельным модулем.​
​ nuzhno​ программы по команде​ не получать ошибку,​

CyberForum.ru

​ не работает, а​

How to close an Excel workbook using VBA and macros, including how to save the file before you close it or discard any changes.

Sections:

Selecting Which Workbook to Close

Close Workbook While Saving Changes

Close Workbook Without Saving Changes

Let the User Decide to Save Changes or Not

Notes

Selecting Which Workbook to Close

First, we need to tell the macro to choose the current workbook to close or another workbook to close.

Current Workbook

We use this piece of code to close the current or currently active workbook and close that.

Other Workbook

We use this piece of code to close any specific open workbook.

Workbooks("test.xlsx").Close

Replace test.xlsx with the name of the file that you want to close.

Close Workbook While Saving Changes

To have Excel automatically save any changes for the workbook that you want to close, just put True behind the close workbook code from above like this:

ActiveWorkbook.Close True

or, to close a specific file like this:

Workbooks("test.xlsx").Close True

Close Workbook Without Saving Changes

To have an Excel window close WITHOUT saving any changes, just put False behind the close workbook code from above like this:

ActiveWorkbook.Close False

or, to close a specific file like this:

Workbooks("test.xlsx").Close False

Let the User Decide to Save Changes or Not

You use the basic code from the first section and don’t include a True or False after it and a dialog box will open asking if you want to save the file or not; it looks like this:

Close the currently active or visible workbook:

Close a specific workbook:

Workbooks("test.xlsx").Close

Notes

You may run into issues with messages popping up depending on your implementation of this code and your setup and it can help to turn off ScreenUpdating for Excel. Make sure to turn it back on when you are finished though.

If Application.DisplayAlerts is set to False before you close the workbook, you won’t see a popup asking if you want to save it or not before closing it. If this is the case, you may lose data if you wanted to save the file before closing it, so test your code on a sample workbook first.

Download the sample files for this tutorial to test everything out.

Similar Content on TeachExcel

Open Excel Workbook Using VBA Macros

Tutorial:
Simple way to open an Excel workbook using VBA and macros.

Syntax

Workbooks.Open («File…

Macro to get Data from Another Workbook in Excel

Tutorial:
Macro to get data from a workbook, closed or open, over a network or locally on your comp…

Get User Submitted Data from a Prompt in Excel using VBA Macros

Tutorial: How to prompt a user for their input in Excel.
There is a simple way to do this using VBA …

Interactive Clickable Buttons and Interface Without Using VBA/Macros in Excel

Tutorial:
How to make your Excel dashboards and worksheets more interactive and easier to view and …

Loop through a Range of Cells in Excel VBA/Macros

Tutorial: How to use VBA/Macros to iterate through each cell in a range, either a row, a column, or …

Kill Command in Excel (Delete Files Using VBA)

Tutorial:
How to safely remove, delete, kill any Excel file, or other file, using VBA Macros in Exc…

Subscribe for Weekly Tutorials

BONUS: subscribe now to download our Top Tutorials Ebook!

Skip to content

На чтение 3 мин. Просмотров 2.9k.

Что делает макрос:  Этот макрос защищает от случайного закрытия файла перед сохранением. Он гарантирует, что Excel автоматически сохранит файл перед закрытием.

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

С этим макросом Вы защитите свой файл от невнимательных пользователей.

Содержание

  1. Как это работает
  2. Код макроса
  3. Как работает этот код
  4. Как использовать

Как это работает

Этот код запускается событием рабочей книги (BeforeClose- перед закрытием). При нажатии на кнопку Закрыть срабатывает событие и запускается макрос. Суть кода проста — он запрашивает у пользователя, действительно ли он хочет закрыть книгу

Как сохранить файл в Excel перед закрытием

Макрос затем проверяет какую кнопку нажал пользователь ОК или Отмена. Оценка производится с помощью конструкции Select Case. Оператор Select Case является альтернативой в If … Then … Else, что позволяет выполнять проверки условий ваших макросов (обычно используется для большого количества условий).

Код макроса

Private Sub Workbook_BeforeClose(Cancel
As Boolean)Выведем сообщение с "ОК" или "Отмена"
Select Case MsgBox("Сохранить и закрыть?",vbOKCancel)
'Если нажал "Отмена", закрываем окно
Case Is = vbCancel
Cancel=True
'Если нажал "Да", то сохраняем книгу
Case Is=vbOK
ActiveWorkbook.Save
'Завершаем проверку, закрываем Select Case
End Select
End Sub

Как работает этот код

Давайте подробно рассмотрим каждую строчку кода

  1. На шаге 1 мы активируем окно c сообщением, где в качестве проверки используем оператор Select Case. Здесь мы используем аргумент vbOKCancel, чтобы на формочке отображались кнопки ОК и Отмена.
  2. Если пользователь нажал кнопку Отмена в окне сообщения, макрос говорит Excel: «Не выходим! Закрой событие!». Это делается путем присвоения переменной Cancel свойства True
    (Верно). Если пользователь нажал кнопку OK в окне сообщений, п. 3 вступает в силу.
  3. Здесь мы говорим Excel: «Сохранить книгу!». Здесь мы не пишем Cancel = True, поэтому событие успешно завершается.
  4. На шаге 4, мы просто закрываем Оператор Select Case.

Как использовать

Для реализации этого макроса, Вам нужно скопировать и вставить его в код события Workbook_BeforeClose. Размещение макроса здесь позволяет запускать макрос непосредственно перед закрытием excel-файла.

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. В окне проекта найдите свой проект/имя рабочей книги и нажмите на знак плюс рядом с ним в чтобы увидеть все листы и модуль ЭтаКнига.
  3. Правой кнопкой мыши нажмите на модуле ЭтаКнига и выберите View Code.
  4. В левой части окна выберите объект WorkBook (Excel автоматом предложит написать макрос для события Workbook_Open (можете позже удалить его за ненадобностью)
  5. В правом выпадающем списке свойство BeforeClose

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

Sub docVariables()
    Dim aVar As Variable
    Dim isVarExist As Boolean
    Dim fName As String

    isVarExist = False
    fName = "Иванов Иван"
    ' Проверка на существование переменной
    For Each aVar In ActiveDocument.Variables
         If aVar.Name = "FullName" Then isVarExist = True: Exit For
    Next aVar
    ' Если переменная уже существует, то меняем её значение
    ' в противном случае создаём её
    If isVarExist Then
         ActiveDocument.Variables("FullName").Value = fName
    Else
        ActiveDocument.Variables.Add Name:="FullName", Value:=fName
    End If
    ' Обращение к переменной
    MsgBox ActiveDocument.Variables("FullName").Value
    ' Удаление переменной
    ActiveDocument.Variables("FullName").Delete
End Sub

Вот статья на эту тему: https://support.microsoft.com/en-us/kb/306281.
Данный способ подходит только MS Word, в Excel, к сожалению, variables нет. Для него можно предложить хранение значений на скрытых листах.

1 / 1 / 0

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

Сообщений: 39

1

23.01.2014, 13:14. Показов 4364. Ответов 7


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

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



0



1 / 1 / 0

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

Сообщений: 39

23.01.2014, 13:28

 [ТС]

2

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



0



KoGG

5590 / 1580 / 406

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

Сообщений: 2,366

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

23.01.2014, 15:44

3

Поместить в объектный модуль ЭтаКнига:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim aLinks, BackupName$, BackupPath$
    BackupPath = "C:temp"
    BackupName = BackupPath & ThisWorkbook.Name
    For Each aLinks In ThisWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
        ThisWorkbook.BreakLink Name:=aLinks, Type:=xlLinkTypeExcelLinks
    Next
    Application.DisplayAlerts = False
    ThisWorkbook.SaveAs Filename:=BackupName, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
    Application.DisplayAlerts = True
End Sub

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

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim BackupName$, BackupPath$
    Dim H As Hyperlink, temp
    BackupPath = "C:temp"
    ' Предохранитель от перезаписи саму на себя
    If ThisWorkbook.Name & "" = BackupPath Then Exit Sub
    BackupName = BackupPath & ThisWorkbook.Name
    For Each H In ThisWorkbook.Sheets("Шаблон").Hyperlinks
        temp = ThisWorkbook.Sheets("Шаблон").Cells(H.Range.Row, "C")
        If InStr(1, temp, "ПИ", vbTextCompare) Then
            H.Delete
        End If
    Next H
    Application.DisplayAlerts = False
    ThisWorkbook.SaveAs Filename:=BackupName, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
    Application.DisplayAlerts = True
End Sub



1



1 / 1 / 0

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

Сообщений: 39

24.01.2014, 01:43

 [ТС]

4

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



0



KoGG

5590 / 1580 / 406

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

Сообщений: 2,366

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

24.01.2014, 10:30

5

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim BackupName$, BackupPath$, BackupFormat$
    Dim H As Hyperlink, oFSO As Object, temp
    BackupPath = "C:temp"
    ' Предохранитель от перезаписи саму на себя
    If ThisWorkbook.Name & "" = BackupPath Then Exit Sub
    BackupName = BackupPath & Replace(ThisWorkbook.Name, ".xl", "1.xl", , 1, vbTextCompare)
    BackupFormat = ThisWorkbook.FileFormat
    ActiveWorkbook.Sheets.Copy
    For Each H In ActiveWorkbook.Sheets("Шаблон").Hyperlinks
        temp = ActiveWorkbook.Sheets("Шаблон").Cells(H.Range.Row, "C")
        If InStr(1, temp, "ПИ", vbTextCompare) Then
            H.Delete
        End If
    Next H
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    If oFSO.FolderExists(BackupPath) Then
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Filename:=BackupName, FileFormat:=BackupFormat, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
        Application.DisplayAlerts = True
    Else
        MsgBox "Бэкап недоступен."
    End If
    ActiveWorkbook.Close SaveChanges:=False
End Sub



1



Sta1917

1 / 1 / 0

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

Сообщений: 39

26.01.2014, 23:56

 [ТС]

6

C помошью рекордера записал макрос для восстановления форматирования после удаления гиперссылки, вставляю в Ваш макрос между 14 и 15 строкой:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
'Установка шрифта Arial 10пт
    Columns("H:H").Select
    With Selection.Font
        .Name = "Arial"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
'Установка форматирования ячеек по центру
   With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
'Рисование границ_ячеек
    Columns("H:H").Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With

прошу сделать чтобы форматирование действовало с ячейки «Н3» и до конца таблицы где есть данные (чтобы ячейки рисовались только в таблице, а не по всему листу), также можно сделать срабатывание макроса, только если были внесены изменения в таблице (за исключением строки A1:I1, это поисковая строка «суперфильтра»)

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



0



KoGG

5590 / 1580 / 406

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

Сообщений: 2,366

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

27.01.2014, 10:34

7

Лучший ответ Сообщение было отмечено Sta1917 как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim BackupName$, BackupPath$, BackupFormat$
    Dim H As Hyperlink, oFSO As Object, temp, Ra As Range
    BackupPath = "C:temp"
    BackupName = BackupPath & Replace(ThisWorkbook.Name, ".xl", "1.xl", , 1, vbTextCompare)
    BackupFormat = ThisWorkbook.FileFormat
    ThisWorkbook.Sheets.Copy
    For Each H In ActiveWorkbook.Sheets("Шаблон").Hyperlinks
        temp = ActiveWorkbook.Sheets("Шаблон").Cells(H.Range.Row, "C")
        If InStr(1, temp, "ПИ", vbTextCompare) Then
            Set Ra = H.Range
            H.Delete
            ' Восстановление форматирования ячейки с разорванной гиперссылкой
            With Ra
                .Font.Name = "Arial" ' Я вижу в вашей исходной таблице Calibri
                .Font.Size = 10      ' Я вижу в вашей исходной таблице 11
                ' Не восстановлен синий цвет шрифта, как у гиперссылки
                '.Font.Color = vbBlue ' если надо
                ' Не восстановлено подчеркивание шрифта, как у гиперссылки
                '.Font.Underline = xlUnderlineStyleSingle ' если надо
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .Borders.LineStyle = xlContinuous ' Не понятно зачем, границы не исчезают
            End With
        End If
    Next H
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    If oFSO.FolderExists(BackupPath) Then
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Filename:=BackupName, FileFormat:=BackupFormat, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
        Application.DisplayAlerts = True
    Else
        MsgBox "Бэкап недоступен."
    End If
    ActiveWorkbook.Close SaveChanges:=False
End Sub



1



1 / 1 / 0

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

Сообщений: 39

27.01.2014, 14:27

 [ТС]

8

Спасибо, то что нужно.

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

Я вижу в вашей исходной таблице Calibri 11

прошу прощения, это в примере текст стал по умолчанию.

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

Не понятно зачем, границы не исчезают

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



0



Понравилась статья? Поделить с друзьями:
  • Vba excel прерывание макроса
  • Vba excel прервать макрос
  • Vba excel прервать выполнение макроса при выполнении условия
  • Vba excel последняя строка умной таблицы
  • Vba excel последняя строка на листе