How to allow your macro/vba code to overwrite an existing Excel file.
This allows you to do things like, export a weekly report to a specific file and have it overwrite that file each week.
The technique in this tutorial does not require any confirmation in order to overwrite the file.
Sections:
Overwrite A File Using VBA
Example
Notes
Overwrite A File Using VBA
Add these two lines to any macro to allow them to overwrite a file without having the confirmation window appear:
Add to the top of the macro:
Application.DisplayAlerts = False
Add to the bottom of the macro:
Application.DisplayAlerts = True
Application.DisplayAlerts controls if Excel will show pop-up window alert messages, such as when you go to overwrite an existing file and Excel wants to warn you about that.
When you set this value to False, these messages will not appear and, so, you won’t have to confirm anything that the macro does.
Make sure to set it back to True at the end of the macro so that Excel will function normally again after the macro has finished running.
Example
Here is a simple macro that you can use to test this out:
Sub Save_File_Overwrite()
' Save the current workbook as Test.xlsm
' 51 for regular file
' 52 for macro enabled workbook
ThisWorkbook.SaveAs "C:Test.xlsm", 52
End Sub
Run the above macro twice from a macro-enabled workbook. The second time that you run it, you will see a confirmation dialogue box asking if you want to overwrite the existing file or not.
Add the DisplayAlerts lines of code to the file and try it again:
Sub Save_File_Overwrite()
' Don't show confirmation window
Application.DisplayAlerts = False
' Save the current workbook as Test.xlsm
' 51 for regular file
' 52 for macro enabled workbook
ThisWorkbook.SaveAs "C:DirectoryTest.xlsm", 52
' Allow confirmation windows to appear as normal
Application.DisplayAlerts = True
End Sub
Now, the file will overwrite the existing file without making a mention of it.
Notes
Be careful! When you disable alerts in Excel, data can be overwritten without you knowing about it. If you have a large and complex macro that works fine except for one area where you want to save the file, disable alerts only for that one area and enable them afterwards for the rest of the macro; this reduces the chance that other data will get overwritten without warning.
Download the sample file if you want to see the above example in Excel.
Similar Content on TeachExcel
Excel VBA MsgBox — Message Box Macro
Tutorial: Create a pop-up message box in Excel using VBA Macros. This allows you to show a message t…
Logical Operators in Excel VBA Macros
Tutorial: Logical operators in VBA allow you to make decisions when certain conditions are met.
They…
Require a Password to View Hidden Worksheets in Excel — VBA Tutorial
Tutorial:
Full Course
A simple macro that allows you to require a password in order to view hidden …
Excel VBA — Create an Array — 3 ways
Tutorial: Ill show you three different ways to create an array in Excel VBA and Macros and how to ge…
Loop Through an Array in Excel VBA Macros
Tutorial:
I’ll show you how to loop through an array in VBA and macros in Excel. This is a fairly…
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 …
Subscribe for Weekly Tutorials
BONUS: subscribe now to download our Top Tutorials Ebook!
Finally got it right, everything above is so confusing.
Sub SaveAndClose()
Dim wb1 As String
Application.Calculation = xlCalculationAutomatic
'this only works if the following equation is in C43 in sheet "data"
'=LEFT(MID(CELL("filename",C41),SEARCH("[",CELL("filename",C41))+1, SEARCH("]",CELL("filename",C41))-SEARCH("[",CELL("filename",C41))-1),75)
'the vba equation has double quotes everywhere that is how you use a formula in vba.
'vba code recreates this incase it gets deleted by accident.
ThisWorkbook.Sheets("Data").Range("C43").ClearContents
ThisWorkbook.Sheets("Data").Range("C43").Formula2R1C1 = _
"=LEFT(MID(CELL(""filename"",R[-2]C),SEARCH(""["",CELL(""filename"",R[-2]C))+1, SEARCH(""]"",CELL(""filename"",R[-2]C))-SEARCH(""["",CELL(""filename"",R[-2]C))-1),75)"
'https://techcommunity.microsoft.com/t5/excel/cell-reference-containing-file-name-changes-when-opening-second/m-p/2417030
wb1 = ThisWorkbook.Sheets("Data").Range("C43").Text
If ThisWorkbook.Name = wb1 Then
'MsgBox (wb1)
Workbooks(wb1).Close SaveChanges:=True
End If
End Sub
this will allow the spreadsheet to determine its own name and then only then can the sub run something against that name. this is so when you have multiple sheets running duplicate sheets but with different names you don’t accidently close the wrong sheet. this is a huge win for CYA in my book.
This will also bypass the overwrite message too, you can have the code automatically run in the background on another workbook while you are working in a different workbook without being affected.
При сохранении книги Excel в новую папку вы получите окно подсказки, как показано на скриншоте ниже, если книга с таким же именем существует и находится в папке. Как автоматически перезаписать существующий файл без предупреждения? Метод, описанный в этой статье, может вам помочь.
Функция Сохранить как для автоматической перезаписи существующего файла кодом VBA
Функция Сохранить как для автоматической перезаписи существующего файла кодом VBA
Если вы хотите сохранить книгу под новым именем и автоматически перезаписать существующий файл в Excel. Пожалуйста, сделайте следующее.
1. Сначала создайте командную кнопку для запуска функции «Сохранить как» на вашем листе. Пожалуйста, нажмите Застройщик > Вставить > Командная кнопка (активный элемент управления X). Смотрите скриншот:
2. Нарисуйте командную кнопку на своем листе. Затем щелкните его правой кнопкой мыши и выберите Просмотреть код из контекстного меню.
3. в Microsoft Visual Basic для приложений окна, скопируйте приведенный ниже код VBA и вставьте между Частный суб и End Sub линий в Code окно.
Код VBA: функция «Сохранить как» для автоматической перезаписи существующего файла
Dim xFileName As String
Application.DisplayAlerts = False
If Right(ActiveWorkbook.Name, 4) = "xlsm" Then
xFileName = Application.GetSaveAsFilename(ActiveWorkbook.Name, "Excel Macro-Enabled Workbook (*.xlsm),*.xlsm")
Else
xFileName = Application.GetSaveAsFilename(ActiveWorkbook.Name, "Excel Workbook (*.xlsx),*.xlsx")
End If
If (xFileName <> "") Or (xFileName <> "False") Then
ActiveWorkbook.SaveAs Filename:=xFileName
End If
Application.DisplayAlerts = True
4. нажмите другой + Q ключи для выхода из Microsoft Visual Basic для приложений окно. И выключите Режим проектирования под Застройщик меню.
5. Нажмите кнопку Command, затем Сохранить как появится диалоговое окно, выберите папку для сохранения этой книги и нажмите кнопку Сохраните кнопку.
Если в целевой папке существует книга с таким же именем, она будет автоматически перезаписана текущей книгой без запроса.
Статьи по теме:
- Как сохранить рабочий лист в виде файла PDF и отправить его по электронной почте в виде вложения через Outlook?
- Как сохранить имя файла Excel с отметкой времени?
- Как сохранить, экспортировать несколько / все листы в отдельные CSV или текстовые файлы в Excel?
- Как отключить или запретить параметры «Сохранить и сохранить как» в Excel?
- Как отключить сохранение книги, но разрешить сохранение только как в Excel?
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (2)
Оценок пока нет. Оцените первым!
The following code saves a selected area of my excel sheet. If I try to save a file that has the same file name as one that already exists, however, it will just save the file without showing the «Do you want to overwrite the file» dialog box.
Is there a way to change this code so that it will ask if I would like to overwrite the preexisting file?
Option Explicit
Sub CreatePDF()
Dim wSheet As Worksheet
Dim vFile As Variant
Dim sFile As String
Set wSheet = ActiveSheet
sFile = Replace(Replace(wSheet.Name, " ", ""), ".", "_") _
& "_" _
& Format(Now(), "yyyymmdd_hhmm") _
& ".pdf"
sFile = ThisWorkbook.Path & "" & sFile
vFile = Application.GetSaveAsFilename _
(InitialFileName:=sFile, _
FileFilter:="PDF Files (*.pdf), *.pdf", _
Title:="Select Folder and FileName to save")
If vFile <> "False" Then
wSheet.Range("B2:J44").ExportAsFixedFormat _
Type:=xlTypePDF, _
FileName:=vFile, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
MsgBox "PDF file has been created."
End If
End Sub
effort 0 / 0 / 0 Регистрация: 17.06.2016 Сообщений: 43 |
||||
1 |
||||
Как сохранить файл эксел перезаписав старый без запроса на сохранение?14.07.2016, 18:46. Показов 1554. Ответов 6 Метки нет (Все метки)
Надо сохранить из аксесса эксел файл поверх старого с тем же названием, чтобы пользователь не опрашивался на перезапись.
опрашивает на перезапись…
0 |
ltv_1953 17146 / 7012 / 1567 Регистрация: 21.06.2012 Сообщений: 13,113 |
||||
14.07.2016, 18:52 |
2 |
|||
Ну так убейте «имя файла», если он есть … .
1 |
0 / 0 / 0 Регистрация: 17.06.2016 Сообщений: 43 |
|
14.07.2016, 18:53 [ТС] |
3 |
О, точно, буду уничтожать. Спасибо.
0 |
7267 / 4469 / 288 Регистрация: 12.08.2011 Сообщений: 13,512 |
|
15.07.2016, 02:24 |
4 |
Что за опции у «filexcel.SaveAs « Видимо у вас кнопочка на клавиатуре отломалась, вот эта: Миниатюры
0 |
0 / 0 / 0 Регистрация: 17.06.2016 Сообщений: 43 |
|
15.07.2016, 16:20 [ТС] |
5 |
С кнопкой все хорошо. Поисковик гугл тоже установлен и обновлен.
0 |
mobile 26777 / 14456 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
||||
15.07.2016, 16:26 |
6 |
|||
effort, перед сохранением отключайте екселевские сообщения
3 |
0 / 0 / 0 Регистрация: 17.06.2016 Сообщений: 43 |
|
15.07.2016, 16:31 [ТС] |
7 |
Работает, спасибо!
0 |