Как удалить файлы excel

Обновлено: 08.07.2024

Предположим, что ежедневно во временную папку поступают файлы отчетов от филиалов. Они могут собираться из почты кодом вроде такого: Сохранить вложения из Outlook в указанную папку или добавляться в папку иными средствами. Далее Вы собираете данные из этих файлов неким кодом(вроде этого - Как собрать данные с нескольких листов или книг?). Но с каждым днем файлов все больше и больше и приходится заходить в папку и руками чистить её от лишних файлов, чтобы при сборе данных не приходилось каждый раз искать и отбирать только новые файлы.
Если надо удалять только конкретные файлы(например только файлы Excel, содержащие в имени слово "отчет"), то можно использовать такой код:

Чтобы удалять полностью все файлы в папке(а не только файлы Excel), а саму папку оставить, то строку sFiles = Dir(sFolder & "*отчет*.xls*") надо записать так: sFiles = Dir(sFolder & "*")

Если необходимо удалять файлы по дате создания/изменения(например, только файлы, созданные раньше 01.03.2017), то можно использовать такой код:

Если необходимо всегда удалять файлы, дата создания которых раньше текущей, то строку dKill = CDate("01.03.2017") нужно заменить на такую: dKill = Date . Если удалить надо файлы недельной давности, то: dKill = Date-7

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

Sub RemoveFolderWithContent() Dim sFolder As String, sFiles As String 'диалог запроса выбора папки на удаление With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator) 'путь к папке можно задать статично, если он заранее известен и не изменяется ' sFolder = "C:\temp\Ежедневные отчеты\10072017" 'путь к папке, которую надо удалить Shell "cmd /c rd /S/Q """ & sFolder & """" End Sub

Этот код удалить папку вместе со всеми файлами буквально за секунду.
Вообще в VBA есть специальная команда для удаления директорий(папок) RmDir . Но она способна удалить только пустую папку, поэтому редко когда можно найти её практическое применение. Если в файле есть хоть один файл то команда RmDir выдаст ошибку '75' - File/Path access error .

Ниже приведены пошаговые инструкции по удалению продуктов Office с ПК (ноутбука, настольного компьютера или трансформера 2-в-1). Если вы хотите удалить Office с компьютера Mac, см. статью Удаление Office для Mac.

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

Удаление Office для вашего типа установки

Действия по удалению Office зависят от вашего типа установки. Наиболее распространенные типы установки: по технологии "нажми и работай" и с помощью установщика Microsoft Windows (MSI). Другой тип — это установка Office из приложения Microsoft Store.

Выберите ниже вкладку Технология "нажми и работай" или MSI или Microsoft Store и следуйте инструкциям по удалению для вашего типа установки.

Не знаете, какой у вас тип установки?

Разверните этот раздел, если не знаете, какой у вас тип установки

Откройте приложение Office, чтобы проверить тип установки

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

Создайте или откройте существующий файл и выберите Файл > Учетная запись (этот элемент также может называться Учетная запись Office).

В разделе сведений о продукте найдите кнопку О программе и проверьте наличие следующих элементов:

Технология "нажми и работай"

Снимок экрана: версия и сборка соответствуют технологии "нажми и работай"

Для установок по технологии "нажми и работай" указана версия и номер сборки, а также фраза нажми и работай.

Следуйте приведенным ниже инструкциям для технологии "нажми и работай" или MSI.

Снимок экрана: кнопка "О программе" для установки MSI. Он не включают версию или номер сборки

Установки MSI не содержат версии и номера сборки.

Следуйте приведенным ниже инструкциям для технологии "нажми и работай" или MSI.

Microsoft Store

Снимок экрана: версия и сборка соответствуют Microsoft Store

Для установок из Microsoft Store указана версия и номер сборки, а также фраза Microsoft Store.

Если вы используете этот тип установки, выберите вкладку Microsoft Store.

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

Откройте панель управления.

Совет: Если вы устанавливали приложения Office как часть набора, например Office для дома и учебы или Microsoft 365, найдите имя этого набора. Чтобы найти отдельное приложение, выполните поиск по его имени, например Project или Visio.

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

Способ открытия панели управления зависит от версии Windows.

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

Выберите раздел Программы, а затем — Программы и компоненты, щелкните правой кнопкой мыши нужный продукт Microsoft Office и выберите команду Удалить.

Windows 8.1 или 8

Кнопка "Пуск" в Windows 8 и Windows 10

Щелкните правой кнопкой мыши кнопку Пуск (в левом нижнем углу) и выберите команду Панель управления.

Выберите пункт Программы и компоненты, щелкните правой кнопкой мыши нужный продукт Office и выберите команду Удалить.

В категории Программы выберите пункт Программы и компоненты.

Щелкните правой кнопкой мыши приложение Office, которое нужно удалить, и выберите команду Удалить.

Следуйте указаниям, чтобы завершить удаление.

Примечание: Если Office не указан в панели управления, возможно, вы использовали установку из Microsoft Store. Вместо этого выберите вкладку Microsoft Store выше и следуйте указанным в ней инструкциям по удалению.

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

Вариант 2. Полное удаление Office с помощью средства поддержки удаления

Выберите кнопку ниже для скачивания средства поддержки удаления Office.

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

Совет: Скачивание и установка средства может занять несколько минут. По завершении установки откроется окно удаления продуктов Office.

Edge или Chrome

В левом нижнем углу щелкните правой кнопкой мыши SetupProd_OffScrub.exe и выберите пункт Открыть.

Microsoft Edge (старый)

В нижней части окна браузера нажмите кнопку Выполнить, чтобы запустить файл SetupProd_OffScrub.exe.

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

В окне "Удалить продукты Office" выберите версию Office, которую нужно удалить, а затем выберите Далее.

Следуйте указаниям и при появлении запроса перезагрузите компьютер.

После перезагрузки компьютера средство удаления автоматически откроется для завершения последнего этапа процесса удаления. Следуйте остальным указаниям.

Если вы хотите переустановить Office, выберите и выполните инструкцию для нужной версии. Закройте средство удаления.

Совет: Если средство удаления Office не полностью удаляет Office с компьютера, можно попытаться удалить Office вручную.

Удаление Office из раздела параметров Windows 10

Выберите Пуск > Параметры > Приложения.

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

Совет: Если не удается удалить установку Microsoft Store с помощью раздела Параметры в Windows 10, попробуйте удалить Office вручную с помощью Windows PowerShell, следуя инструкциям ниже.

Удаление Office вручную с помощью Windows PowerShell

Удаление Office

Значок "Пуск" Windows 10

Щелкните правой кнопкой мыши кнопку Пуск и выберите Windows PowerShell(администратор).

В окне Windows PowerShell введите следующее:

Get-AppxPackage -name “Microsoft.Office.Desktop” | Remove-AppxPackage

Нажмите клавишу ВВОД.

Это займет несколько минут. После завершения появится новая командная строка.

Проверьте удаление Office

В окне Windows PowerShell введите следующее:

Get-AppxPackage -name “Microsoft.Office.Desktop”

Нажмите клавишу ВВОД.

Если отображается только командная строка без дополнительных сведений, то Office успешно удален и окно Windows PowerShell можно закрыть.

Переустановка Office

Примечание: Если не знаете, какая у вас операционная версия, см. статью Какая у меня версия операционной системы Windows?.

Создание новых рабочих листов осуществляется с помощью метода Sheets.Add.

Синтаксис метода Sheets.Add

expression.Add [Before, After, Count, Type]

где expression — переменная, представляющая собой объект Sheet.

Компоненты метода Sheets.Add

  • Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет добавлен новый.
  • After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет добавлен новый.
  • Count — необязательный параметр типа данных Variant, указывающий, сколько листов будет добавлено (по умолчанию — 1).
  • Type — необязательный параметр типа данных Variant, указывающий тип листа: xlWorksheet** (рабочий лист) или xlChart (диаграмма), по умолчанию — xlWorksheet.

*Если Before и After не указаны, новый лист, по умолчанию, будет добавлен перед активным листом.

**Для создания рабочего листа (xlWorksheet) можно использовать метод Worksheets.Add, который для создания диаграмм уже не подойдет.

Примеры создания листов

ThisWorkbook . Sheets . Add After : = ActiveSheet , Count : = 2 Workbooks ( "Книга1.xlsm" ) . Sheets . Add After : = Лист 1 Workbooks ( "Книга1.xlsm" ) . Sheets . Add After : = Worksheets ( 1 ) Workbooks ( "Книга1.xlsm" ) . Sheets . Add After : = Worksheets ( "Лист1" ) Workbooks ( "Книга1.xlsm" ) . Sheets . Add . Name = "Мой новый лист" Sheets . Add Before : = Worksheets ( Worksheets . Count )
  • Лист1 в After:=Лист1 — это уникальное имя листа, указанное в проводнике редактора VBA без скобок.
  • Лист1 в After:=Worksheets(«Лист1») — это имя на ярлыке листа, указанное в проводнике редактора VBA в скобках.

Создаваемый лист можно присвоить объектной переменной:

Set myList = Workbooks ( "Книга1.xlsm" ) . Worksheets . Add

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

Копирование листов

Копирование рабочих листов осуществляется с помощью метода Worksheet.Copy.

Синтаксис метода Worksheet.Copy

expression.Copy [Before, After]

где expression — переменная, представляющая собой объект Worksheet.

Компоненты метода Worksheet.Copy

  • Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет добавлена копия.
  • After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет добавлена копия.

*Если Before и After не указаны, Excel создаст новую книгу и поместит копию листа в нее. Если скопированный лист содержит код в проекте VBA (в модуле листа), он тоже будет перенесен в новую книгу.

Примеры копирования листов

Worksheets ( "Лист1" ) . Copy Before : = Worksheets ( "Лист2" ) Workbooks ( "Книга1.xlsm" ) . Worksheets ( "Лист1" ) . Copy _

Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.

Перемещение листов

Перемещение рабочих листов осуществляется с помощью метода Worksheet.Move.

Синтаксис метода Worksheet.Move

expression.Move [Before, After]

где expression — переменная, представляющая собой объект Worksheet.

Компоненты метода Worksheet.Move

  • Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет размещен перемещаемый лист.
  • After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет размещен перемещаемый лист.

*Если Before и After не указаны, Excel создаст новую книгу и переместит лист в нее.

Примеры перемещения листов

Простые примеры перемещения листов:

Worksheets ( "Лист1" ) . Move Before : = Worksheets ( "Лист2" ) Workbooks ( "Книга1.xlsm" ) . Worksheets ( "Лист1" ) . Move _

Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.

Перемещение листа «Лист4» в позицию перед листом, указанным как по порядковому номеру, так и по имени ярлыка:

x = InputBox ( "Введите имя или номер листа" , "Перемещение листа «Лист4»" )

Удаление листов

Удаление рабочих листов осуществляется с помощью метода Worksheet.Delete

Синтаксис метода Worksheet.Delete

где expression — переменная, представляющая собой объект Worksheet.

Примеры удаления листов

Workbooks ( "Книга1.xlsm" ) . Worksheets ( "Лист1" ) . Delete

Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.

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

Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

48 комментариев для “VBA Excel. Рабочий лист (создание, копирование, удаление)”

А как удалить листы не указывая постоянно их название?:

Если по крупному
нет Проверки наличия Листа в книге
нет Переименования Листа

Добрый день, Эдуард!
Я правильно понял вопрос: нужно, чтобы макрос при каждом запуске создавал копию листа и присваивал ему новое имя, отличное от имени по умолчанию? Если так, то по каким правилам должно создаваться новое имя?

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

Добрый день!
У меня вопрос.
Как перемещать лист перед другим листом, номер или название которого будет вводить пользователь?

Привет, Артур!
Перемещение листа «Лист2» на позицию перед листом, имя ярлыка которого вводится в текстовое поле информационного окна InputBox:

x = InputBox ( "Введите имя листа" , "Перемещение листа «Лист2»" )

Спасибо!
У меня ещё вопрос. А если указывать номер листа, перед которым будет другой лист, какое изменение будет в коде?

А так можно вводить и номер, и имя:

x = InputBox ( "Введите имя или номер листа" , "Перемещение листа «Лист2»" ) x = InputBox ( "Введите имя или номер листа" , "Перемещение листа «Лист2»" )

Добрый день! Возможно ли полное копирование листа на нужный мне лист? В январе заполняются данные каждый день и надо чтобы за каждый день создавалась копия на заранее созданные 31 лист по дням?

. PasteSpecial Paste : = xlPasteFormulasAndNumberFormats

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

MsgBox "Лист за " & FormatDateTime ( Date , vbShortDate ) & " уже сохранен!" Worksheets ( "Січень" ) . Copy After : = Worksheets ( Worksheets . Count ) 'присваиваем листу в качестве имени число текущей даты

Спасибо за помощь! Нашел другое решение более мне подходящее но не знаю как сделать чтобы созданые листы вставлялись по порядку нумерации 1,2,3 и т.д. после активного листа? Не поможете вот код

destSht . Move After : = Worksheets ( Worksheets . Count )

Спасибо все работает!

Еще вопрос, можно ли скопировать лист не в конец книги а между листами, есть 12 месяцев в книге ексель чтобы копировалось после января, февраля?

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

Sheets . Add . Name = InputBox ( "Ввести дату - від 1 до 31" ) destSht . Move After : = Worksheets ( Worksheets . Count )

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

Sheets . Add . Name = InputBox ( "Ввести дату - від 1 до 31" ) destSht . Move After : = Worksheets ( CStr ( CByte ( destSht . Name ) - 1 ) )

Евгений огромное спасибо это то что и требовалось весьма признателен за Вашу помощь.

Эдуард, представленный выше код будет работать только с одним месяцем. Excel не даст создать в одной книге несколько листов с одним именем (одно и то же число, но разных месяцев). Вам придется как-то изменить наименование листов, например: 1.01-31.01, 1.02-28.02. Тогда для перемещения новых листов придется использовать другой алгоритм или по окончании одного месяца, все его листы переименовать, например так:

MsgBox "Такой номер уже используется - введите другой"

Я понял этого и не требуется по окончанию месяца листы будут сохранены отдельно.
А вот по предедущему коду нельзя ввести произвольное число т.е не по порядку 1,2,3 а сразу например 17 пропустив с 1 по 16?

Sheets . Add . Name = InputBox ( "Ввести дату - від 1 до 31" )

Помогите с мелочью никак не пойму куда вставить умножить на 2,1 и на 1,9 чтобы не считалось +_ 20% в этой формуле?
=ДВССЫЛ(АДРЕС(СТРОКА();СТОЛБЕЦ()-1;1;1))

Эдуард, может быть у вас для ячейки с формулой установлен формат «Процентный»?

Нет числовой. условное форматирование со стрелками вверх вниз и вправо
=ДВССЫЛ(АДРЕС(СТРОКА();СТОЛБЕЦ()-1;1;1*2,6)) для стрелки вверх
=ДВССЫЛ(АДРЕС(СТРОКА();СТОЛБЕЦ()-1;1;1*2,4)) для стрелки вправо
но не работает может я не туда вставляю *2,6

Синтаксис функции АДРЕС:
АДРЕС(номер_строки;номер_столбца;[тип_ссылки];[A1];[имя_листа])
Там, где вы умножаете, должно быть логическое значение [A1]: ИСТИНА или ЛОЖЬ (1 или 0).

удаляю Лист по имени на ярлычке

Евгений, помогите пожалуйста со следующей задачей.
В папке несколько документов эксель, в каждом из которых несколько листов.
Необходимо, чтобы макрос открывал по порядку каждый документ, проходил по каждому листу и брал оттуда нужную информацию. Затем эта информация переносится в новый документ эксель в заданном порядке.
В целом программу я реализовал, но столкнулся с проблемой, что debug упирается в последний лист первого открытого документа и не может дальше перейти к следующему документу. Т.е. необходимо прописать условие, чтобы vba понимал, что данный лист в документе последний.
Подскажите пожалуйста, как это сделать?

Цикл будет завершен после обработки последнего листа.

Здравствуйте!
Возможно ли при копировании листа из другого файла перенести и пользовательский стиль таблицы?

Добрый день!
Если не ошибаюсь, пользовательский стиль таблицы всегда копируется вместе с листом, но внешний вид таблиц будет одинаков, если оба файла созданы и открыты в одной версии Excel.

Спасибо за ответ.
Увы, не так, и даже всё не так.
Стиль «пытается» копироваться, цвета отличаются оттенками, но это полбеды. Главное, что нужно мне, чтобы копировался цвет шрифта таблицы, а этого не происходит. Почему-то на листе-цели устанавливается на весь лист чёрный шрифт, который Эксель считает главнее табличного.
И даже больше. После ручной замены на всё листе-цели шрифта с чёрного на авто замены цвета шрифта в импортированной таблице не происходит. Что всегда есть при ручной работе с таблицами.
Ну, и совсем глюк. Пользовательский стиль переезжает и доступен в новой книге. Но даже при ручном его выборе на листе-цели для таблицы не происходит смены цвета шрифта.
Цвет можно поменять только руками (макросом) без учёта таблицы.
Всё это происходит на одном компьютере в одной ОС В10.

Хм. Эксель 2016, всё выше описанное по-прежнему.
Если не затруднит, скопируйте умную таблицу макросом на новый лист, перед этим созданный тем же макросом.

Ответ однозначный - да. Для этого в языке VBA есть специальный оператор - kill. Для нас он и представляет определённый интерес.

Давайте посмотрим как его можно использовать. Имеется папка (в моём примере это C:\Для всех), её нужно очистить от файлов с расширением *.xlsx.

Удаление файлов с помощью VBA в Excel

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

  • вкладка «Разработчик», кнопка «Visual basic»;
  • вставляем новый модуль и помещаем следующий код макроса.

Sub DF()
' Удаление всех файлов из папки с расширением .xlsx
Kill "C:\Для всех\" & "*.xlsx"
End Sub

Удаление файлов с помощью VBA в Excel

Будьте внимательны - макрос не удаляет файлы в "Корзину", а полностью стирает их с жёсткого диска компьютера!

Аналогично сочетанию клавиш Shift+Delete.

Проверим работоспособность нашего кода. Запустим окно выбора макросов комбинацией клавиш Alt+F8 и нажмём "Выполнить".

Удаление файлов с помощью VBA в Excel

Результат на лицо - в папке остался только один файл "Изменение листа.xlsm" потому что у него разрешение не совпадает с указанным в макросе.

Также хочется отметить, что привычное сочетание клавиш Ctrl+Z не поможет восстановить файлы.

Удаление файлов с помощью VBA в Excel

Необходимая оговорка - макрос можно использовать для всех типов файлов. Для этого необходимо изменить в макросе расширение *.xlsx на нужное для удаления вам.

Читайте также: