Remkomplekty.ru

IT Новости из мира ПК
4 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Excel application save

«How to suppress Save Changes» prompt when you close a workbook in Excel

Summary

In Microsoft Excel, you can create a Microsoft Visual Basic for Applications (VBA) macro that suppresses the Save Changes prompt when you close a workbook. This can be done either by specifying the state of the workbook Saved property, or by suppressing all alerts for the workbook.

More Information

NOTE: Microsoft provides programming examples for illustration only, without warranty either expressed or implied. This includes, but is not limited to, the implied warranties of merchantability or fitness for a particular purpose. This article assumes that you are familiar with the programming language that is being demonstrated and with the tools that are used to create and to debug procedures. Microsoft support engineers can help explain the functionality of a particular procedure. However, they will not modify these examples to provide added functionality or construct procedures to meet your specific requirements.

To prepare for implementing either of the examples below, perform these steps first:

Start Excel and open a new workbook.

Press ALT+F11 to start the Visual Basic editor.

On the Insert menu, click Module.

Type the sample macro code into the module sheet.

Press ALT+F11 to return to Excel.

In Microsoft Office Excel 2003 and in earlier versions of Excel, choose Macro from the Tools menu, and then click Macros.

In Microsoft Office Excel 2007, click Macros in the Code group on the Developer tab.

If the Developer tab is not available, consider doing this:

a. Click the Microsoft Office Button, and then click Excel Options.

b. In the Popular category, under Top options for working with Excel, click to select the Show
Developer tab in the Ribbon
check box, and then click OK.

Select the macro that you want, and then click Run.

The Saved property returns the value False if changes have been made to a workbook since it was last saved.

You can use the reserved subroutine name Auto_Close to specify a macro that should run whenever a workbook is closed. In doing so, you can control how the document is handled when the user closes the documents in Excel.

Example 1: Close the workbook without saving changes

To force a workbook to close without saving any changes, type the following code in a Visual Basic module of that workbook:

When the Saved property is set to True, Excel responds as though the workbook has already been saved and no changes have occurred since that last save.

The DisplayAlerts property of the program can be used for the same purpose. For example, the following macro turns DisplayAlerts off, closes the active workbook without saving changes, and then turns DisplayAlerts on again.

You can also use the SaveChanges argument of the Close method.

The following macro closes the workbook without saving changes:

Example 2: Close the workbook and save the changes

To force a workbook to save changes, type the following code in a Visual Basic module of that workbook:

If ThisWorkbook.Saved = False Then

ThisWorkbook.Save End If

This subprocedure checks to see if the file Saved property has been set to False. If so, the workbook has been changed since the last save, and those changes are saved.

Как на VBA сохранить файл Excel с названием, взятым из ячейки?

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

Исходные данные

Сначала давайте разберем исходные данные, которые я буду использовать в примерах. Пусть это будет некая абстракция марок автомобилей с указанием их VIN номера.

Примечание! Я использую Excel 2013.

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

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

Сохранение файла Excel с названием из ячейки — с привязкой к этой ячейке

Итак, данные у нас есть, теперь необходимо написать процедуру на VBA (макрос), которая брала бы значение из конкретной ячейки, в данном случае это будет ячейка B14, и присваивала бы это значение имени файла.

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

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

Читать еще:  Excel не хватает памяти

Открываем в Excel редактор Visual Basic, и вставляем код следующей процедуры в исходный код этой книги (ЭтаКнига, открыть двойным кликом) или в модуль, который Вы предварительно должны создать.

Примечание! Для того чтобы открыть редактор Visual Basic в Excel, необходимо перейти на вкладку «Разработчик» и нажать на кнопку «Visual Basic». Файл Excel с кодом процедуры необходимо сохранить с типом «Книга Excel с поддержкой макросов».

Код процедуры

После сохранения файла запустите макрос («Макросы -> Выполнить -> SaveFile»).

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

Добавление кнопки в Excel для запуска макроса

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

Затем выберите место, где вставить кнопку, и нажмите туда. После этого появится окно назначения действия, т.е. нужно выбрать, какой макрос запускать при нажатии этой кнопки, выбираем наш макрос, т.е. SaveFile, и нажимаем «ОК».

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

Сохранение файла Excel с названием из ячейки — без привязки к ячейке

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

Замените код процедуры следующим кодом, который совсем немного, но изменен.

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

Как видим, все отработало.

Сохранение файла Excel с названием, которое сформировано из значений двух ячеек

Теперь представим, что нам нужно сформировать файл с названием из значений двух ячеек. Например, в нашем случае это может быть «Марка Авто – VIN Номер», в качестве разделителя я указал символ – (дефис), но им может выступать любой символ или вовсе отсутствовать.

В этом примере я покажу, как можно это реализовать с привязкой к конкретным ячейкам, в нашем случае B14 и D14.

Код процедуры в данном случае будет выглядеть следующим образом.

Все ОК, файл создан.

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

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

Код процедуры

Становитесь на любую ячейку со значением в столбце B, и запускайте макрос.

У меня на этом все, надеюсь, материал был Вам полезен, пока!

Сохранение Excel без запроса к пользователю

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

ExcelWorkBook.SaveAs(@»C:UsersadminDocuments» + k + «.xls», Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

По идее, как я поняла, за сохранение отвечает эта строчка, но она выдает ошибку Use of unassined local variable.

Закрытие книги Excel без запроса на сохранение
Excel.Application xlApp = new Excel.Application(); //Excel Excel.Workbook xlWB; //рабочая книга .

Выход без запроса на сохранение
Как сделать так, чтобы при закрытии не было запроса на сохранение?

Сохранение документа Word без запроса
Подскажите как отловить событие — когда пользователь нажал на кнопку Закрыть в документе Ворд и.

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

В переменной содержится счетчик, который и должен быть именем файла

Ругается именно на ExcelWorkBook

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

*ну и параллельно я путь поменяла, куда сохранять немного, как видно из ошибки*

Не могу сообразить как это записать..
на Microsoft.Office.Interop.Excel.xlLocalSessionChanges он ругается:

The type or namespace name ‘xlLocalSessionChanges’ does not exist in the namespace ‘Microsoft.Office.Interop.Excel’ (are you missing an assembly reference?)

Читать еще:  Скачать видео с нета

Хотя парой аргументов до этого я описывала Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault и все ок было

Решение

Ma_Russia, У меня вопрос. Какая версия Excel у вас установлена на компьютере?
Предлагаю следующие варианты Excel 97, 2000, 2003, 2007, 2010, 2013, 2016.

Если у вас установлена одна из версий 2007, 2010, 2013, 2016, то почему вы сохраняете с форматом XLS?
Аргумент XlFileFormat.xlWorkbookDefault говорит «необходимо сохранить файл с форматом «XLSX»

Вам нужно сперва определится какая версия Excel у вас стоит и с каким форматом вы хотите сохранить файл

Я сейчас переписал ваш код немного. Попробуйте его.

Напишите эту строку в самом верху

using Excel = Microsoft.Office.Interop.Excel;

почитайте комментарии в коде.
Если вам надо сохранить файл именно в формате Excel 2003, то раскомментируйте этот блок, а другой блок, который сохраняет в формате Excel 2007 наоборот закомментируйте.

и укажите свой путь к сохранению файла.

У меня установлен Excel 2013, соответственно я сохраняю файл в формат Excel 2007 (XLSX)

Как на VBA сохранить файл Excel с названием, взятым из ячейки?

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

Исходные данные

Сначала давайте разберем исходные данные, которые я буду использовать в примерах. Пусть это будет некая абстракция марок автомобилей с указанием их VIN номера.

Примечание! Я использую Excel 2013.

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

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

Сохранение файла Excel с названием из ячейки — с привязкой к этой ячейке

Итак, данные у нас есть, теперь необходимо написать процедуру на VBA (макрос), которая брала бы значение из конкретной ячейки, в данном случае это будет ячейка B14, и присваивала бы это значение имени файла.

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

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

Открываем в Excel редактор Visual Basic, и вставляем код следующей процедуры в исходный код этой книги (ЭтаКнига, открыть двойным кликом) или в модуль, который Вы предварительно должны создать.

Примечание! Для того чтобы открыть редактор Visual Basic в Excel, необходимо перейти на вкладку «Разработчик» и нажать на кнопку «Visual Basic». Файл Excel с кодом процедуры необходимо сохранить с типом «Книга Excel с поддержкой макросов».

Код процедуры

После сохранения файла запустите макрос («Макросы -> Выполнить -> SaveFile»).

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

Добавление кнопки в Excel для запуска макроса

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

Затем выберите место, где вставить кнопку, и нажмите туда. После этого появится окно назначения действия, т.е. нужно выбрать, какой макрос запускать при нажатии этой кнопки, выбираем наш макрос, т.е. SaveFile, и нажимаем «ОК».

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

Сохранение файла Excel с названием из ячейки — без привязки к ячейке

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

Замените код процедуры следующим кодом, который совсем немного, но изменен.

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

Как видим, все отработало.

Читать еще:  Где находится карандаш в excel

Сохранение файла Excel с названием, которое сформировано из значений двух ячеек

Теперь представим, что нам нужно сформировать файл с названием из значений двух ячеек. Например, в нашем случае это может быть «Марка Авто – VIN Номер», в качестве разделителя я указал символ – (дефис), но им может выступать любой символ или вовсе отсутствовать.

В этом примере я покажу, как можно это реализовать с привязкой к конкретным ячейкам, в нашем случае B14 и D14.

Код процедуры в данном случае будет выглядеть следующим образом.

Все ОК, файл создан.

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

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

Код процедуры

Становитесь на любую ячейку со значением в столбце B, и запускайте макрос.

У меня на этом все, надеюсь, материал был Вам полезен, пока!

Закрытие процесса приложения Excel в C# после доступа к данным

Я пишу приложение на C#, которая открывает файл шаблона Excel для операций чтения/записи. Я хочу, чтобы когда пользователь закрывает приложение, процесс приложения Excel был закрыт без сохранения файла Excel. См. мой Диспетчер задач после нескольких запусков приложения.

Я использую этот код, чтобы открыть файл Excel :

и для доступа к данным, я использую этот код :

Я вижу подобные вопросы в stackoverflow, такие как этот вопрос и этот, и тестовые ответы, но он не работает.

15 ответов:

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

Workbook.Close(false) или если вы делаете позднюю привязку, иногда проще использовать ноль Workbook.Close(0) Вот как я сделал это при автоматизации закрытия книги.

также я пошел и посмотрел документацию для него, и нашел его здесь: Книга Excel Закрыть

попробуйте это.. это сработало для меня. вы должны освободить этот объект приложения xl, чтобы остановить процесс.

подумайте об этом, это убивает процесс:

кроме того, вы пытались просто закрыть его нормально?

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

. потому что таким образом вы создаете объекты RCW не только для книги, но и для книг, и вы должны освободить его тоже (что невозможно, если ссылка на объект не поддерживается).

это решило проблему для меня. Ваш код становится:

и затем освободите все эти объекты:

я заворачиваю это в try <> finally <> чтобы убедиться, что все выйдет, даже если что-то пойдет не так (что может пойти не так?), например,

убить Excel не всегда легко; смотрите эту статью: 50 способов убить Excel

эта статья принимает лучшие советы от Microsoft (MS Knowlege базовая статья) о том, как заставить Excel выйти красиво, но затем также удостоверяется в этом, убивая процесс, если это необходимо. Мне нравится иметь второй парашют.

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

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

вот код, который я использую: (работает все время)

excelBook.Закрывать(); excelApp.Выход(); добавьте конец кода, этого может быть достаточно. он работает над моим кодом

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

надеюсь, что мой код может помочь кому-то в будущем. Я потратил более двух дней, чтобы решить эту проблему. Ниже приведен мой код:

вы можете убить процесс своими COM объект excel pid

добавить где-то ниже кода импорта dll

он закрывает последний 10 сек процесс с именем «Excel»

правильный способ закрыть весь процесс excel

на основе других решений. Я должен использовать это:

С помощью» MainWindowHandle», чтобы определить процесс и закрыть его.

excelObj: это мое приложение Interop excel objecto

использовать переменную для каждого объекта Excel и петли Marshal.ReleaseComObject >0 . Без цикла процесс Excel по-прежнему остается активным.

мы можем закрыть приложение Excel при преобразовании xls в xlsx с помощью следующего кода. Когда мы выполняем этот вид задачи, то приложение Excel работает в диспетчере задач, мы должны закрыть этот excel, который работает в фоновом режиме. Interop-это Com-компонент, чтобы освободить com-компонент, который мы использовали Marshal.FinalReleaseComObject.

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

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

этот GetWindowThreadProcessId находит правильный идентификатор процесса o excell . После убивает его. Наслаждайся Этим.

Ссылка на основную публикацию
Adblock
detector