Access vba удалить лист excel
Access vba удалить лист excel
Еще вопрос. Файл Excel перемещается с компьютера на компьютер с разными локализациями офиса одной версии. Постоянно появляются новые модули типа : ЭтаКнига1, ThisWorkBook1, Лист2, Sheet2 и т.д. Номера — условно. Причем некоторых листов в самой книге нет. В загрузке самого WorkBook стоит макрос и когда файл переносится на другой компьютер, где появляется уже новый активный модуль ThisWorkBookХ, то макрос не срабатывает. Что за дурацкая система! Как навести порядок?
Здравствуйте, Trot, Вы писали:
T>Привет. Задолбали ненужные листы Excel в дереве проектов VB. Как удалить это дело? RMB меню Remove засерено. Что делать?
Здравствуйте, Trot, Вы писали:
T>Еще вопрос. Файл Excel перемещается с компьютера на компьютер с разными локализациями офиса одной версии. Постоянно появляются новые модули типа : ЭтаКнига1, ThisWorkBook1, Лист2, Sheet2 и т.д. Номера — условно. Причем некоторых листов в самой книге нет. В загрузке самого WorkBook стоит макрос и когда файл переносится на другой компьютер, где появляется уже новый активный модуль ThisWorkBookХ, то макрос не срабатывает. Что за дурацкая система! Как навести порядок?
А в какой папке они появляются — Microsoft Excel Objects или Modules?
Здравствуйте, Elena_, Вы писали:
E_>Здравствуйте, Trot, Вы писали:
T>>Еще вопрос. Файл Excel перемещается с компьютера на компьютер с разными локализациями офиса одной версии. Постоянно появляются новые модули типа : ЭтаКнига1, ThisWorkBook1, Лист2, Sheet2 и т.д. Номера — условно. Причем некоторых листов в самой книге нет. В загрузке самого WorkBook стоит макрос и когда файл переносится на другой компьютер, где появляется уже новый активный модуль ThisWorkBookХ, то макрос не срабатывает. Что за дурацкая система! Как навести порядок?
E_>А в какой папке они появляются — Microsoft Excel Objects или Modules?
В Microsoft Excel Objects.
В Modules только мои файлы — с этим все в порядке.
Здравствуйте, Trot, Вы писали:
E_>>А в какой папке они появляются — Microsoft Excel Objects или Modules?
T>В Microsoft Excel Objects.
T>В Modules только мои файлы — с этим все в порядке.
А в Ваших макросах ничего не может спровоцировать такое поведение? Дело в том, что я для одной цели в свое время пыталась добавить ЭтаКнига, туда где уже было ThisWorkbook (и наоборот) специально, в подходящей версии, конечно, и у меня ничего не получилось.
Здравствуйте, Elena_, Вы писали:
E_>А в Ваших макросах ничего не может спровоцировать такое поведение? Дело в том, что я для одной цели в свое время пыталась добавить ЭтаКнига, туда где уже было ThisWorkbook (и наоборот) специально, в подходящей версии, конечно, и у меня ничего не получилось.
Нет, в макросах ничего похожего нет. Инициализация переменных, открытие других книг. «Моя озабоченность» вызвана тем, что:
1. ThisWoorkBook только один, а ЭтаКнига уже несколько
2. Sheetы видимо тоже соответствуют числу доступных листов, а вот Листов развелось уже за 3-ий десяток.
3. Почему то я не могу удалить хотя бы эти листы. Меню Remove недоступно.
Сейчас работаю на английской системе. Рост страниц не наблюдаю. Возможно есть какое-то меню в Excel, которое позволяет увидеть внутрениие листы что ли. Только где такое меню — непонятно.
Здравствуйте, Trot, Вы писали:
T>1. ThisWoorkBook только один, а ЭтаКнига уже несколько
T>2. Sheetы видимо тоже соответствуют числу доступных листов, а вот Листов развелось уже за 3-ий десяток.
T>3. Почему то я не могу удалить хотя бы эти листы. Меню Remove недоступно.
T>Сейчас работаю на английской системе. Рост страниц не наблюдаю. Возможно есть какое-то меню в Excel, которое позволяет увидеть внутрениие листы что ли. Только где такое меню — непонятно.
А в окне Properties у них есть свойства: Name, Visible и другие, и чему они равны?
Может быть, они VeryHidden? И на самом деле существуют?
если поменять Visible на что-нибудь и снова установить Visible, что-нибудь произойдет?
Если обратиться из программы к ним по этому объектному имени, типа,
Если попробовать их так удалить, типа
Вообще, если они есть как объекты, то можно ли ими как-то манипулировать? Я пока только о листах.
Спасибо, что пытаетесь мне помочь
Выяснилось следующее.
На самом деле, что объекты (назовем их неопознанными екселевскими объектоми — НЕО) под названия ЛистNN или SheetNN — это Workbookи. Это я выяснил по
1. свойств Visible у них нет (есть куча других свойств, назначение большинства я не знаю)
2. иконки другие (как файл екселя)
3. в каждом таком объекте доступна функция WoorkBook_Open.
А с листами оказалось все в порядке. Сколько в файле, столько и в дереве.
Здравствуйте, Trot, Вы писали:
T>Выяснилось следующее.
T>На самом деле, что объекты (назовем их неопознанными екселевскими объектоми — НЕО) под названия ЛистNN или SheetNN — это Workbookи. Это я выяснил по
T>1. свойств Visible у них нет (есть куча других свойств, назначение большинства я не знаю)
T>2. иконки другие (как файл екселя)
T>3. в каждом таком объекте доступна функция WoorkBook_Open.
T>А с листами оказалось все в порядке. Сколько в файле, столько и в дереве.
Вообще, очень это все странно выглядит. Я бы предположила, что это результат какого-то сбоя и автоматического восстановления файла. Может быть, имеет смысл просто перенести весь код и данные в чистую книгу?
То есть, как я поняла, все эти объекты имеют те же свойства, что и настоящая ThisWorkbook? Выполняются ли их события, то же Open при открытии, Save при сохранении и т.п.? Чему у них равно значение свойства IsAddin, если оно есть, как в любом нормальном ThisWorkbook? Можно ли их закрыть, и что собственно при этом закроется, если вызывать метод Close по этому объектному имени —
или покажет ли какое-нибудь имя
Можно ли импортировать эти модули, и если можно, отличаются ли они от ThisWorkbook. То есть как-то подобраться к их удалению. Хотя, мне кажется, что надежнее просто все перенести в чистую книгу, даже копированием, а не импортом, экспортом, хотя это более-менее все равно. А то какой-то монстр просто получается.
Здравствуйте, Elena_, Вы писали:
Если попробовать взять указатели на эти объекты ObjPtr(ЛистNN), то они разные, как для нормальных объектов? или это просто отображение дерева проекта глючит?
Здравствуйте, Elena_, Вы писали:
E_>Вообще, очень это все странно выглядит. Я бы предположила, что это результат какого-то сбоя и автоматического восстановления файла. Может быть, имеет смысл просто перенести весь код и данные в чистую книгу?
Возможно, Ексль часто падал. Можно и перенести, почучится. Только не хотелось бы тратить время, если эта проблема не серьезная. Вдруг там опять такое проявится. И переносить надо аккуратно. Пока работает, лучше не трогать
E_>То есть, как я поняла, все эти объекты имеют те же свойства, что и настоящая ThisWorkbook? Выполняются ли их события, то же Open при открытии, Save при сохранении и т.п.? Чему у них равно значение свойства IsAddin, если оно есть, как в любом нормальном ThisWorkbook? Можно ли их закрыть, и что собственно при этом закроется, если вызывать метод Close по этому объектному имени —
E_>
E_>или покажет ли какое-нибудь имя
E_>
Эти объекты ПУСТЫЕ. Что это значит. Когда я кликаю на этот объект в окне Properties в заголовке появляется имя этого объекта, а в списке параметров отображаются свойства АКТИВНОГО WorkBook. Даже параметр (Name) показывает имя активного объекта. Собственно я так и нахожу, какой модуль рабочий.
IsAddin у этого модуля = False. Для других модулей я добраться не могу (см. предложение выше). Окно кода же появляется и в нем можно писать что угодно. В ниспадающем комбобоксике окна редактора кода есть объект WorkBook. Функции у этого объекта также существуют. Закрыть окно кода можно.
Код, который вы мне написали еще не пробовал.
E_>Можно ли импортировать эти модули, и если можно, отличаются ли они от ThisWorkbook. То есть как-то подобраться к их удалению. Хотя, мне кажется, что надежнее просто все перенести в чистую книгу, даже копированием, а не импортом, экспортом, хотя это более-менее все равно. А то какой-то монстр просто получается.
Экспортировать эти модули можно. Файл сохраняется с уникальным именем. например:
Может быть свойста о чем то вам подскажут.
Вот такая вот шняга.
Копировать не хочется, т.к. проект большой, есть вероятность что-то забыть и порушить.
11.5 Коллекция Sheets и объект Worksheet , их свойства и методы
Объект Excel.Worksheet, программное создание, обнаружение, удаление листа Excel средствами VBA, свойства, методы и события объекта Excel.Worksheet
В Word ниже объекта Application и Document начинались уже объекты непосредственно для работы с текстом — Selection, Range и т.п. В Excel между объектом рабочей книги и ячейками есть еще один промежуточный объект — объект Worksheet (лист). Объекты Worksheet в книге объединены в коллекцию Sheets.
Чаще всего для ввода данных в Excel (напрямую или из базы данных) нам потребуется в первую очередь определиться с листом, на который пойдет ввод данных — либо просто выбрать его, либо вначале создать, а потом выбрать.
Процесс создания выглядит очень просто:
Dim oExcel As New Excel.Application ‘Запускаем Excel
oExcel.Visible = True ‘Делаем его видимым
Dim oWbk As Excel.Workbook
Set oWbk = oExcel.Workbooks.Add () ‘Создаем новую книгу
Dim oSheet As Excel.Worksheet
Set oSheet = oWbk.Worksheets.Add() ‘ Создаем новый лист
oSheet.Name = «Новый лист» ‘Присваиваем ему имя «Новый лист»
Метод Add() для коллекции Worksheets принимает несколько необязательных параметров, главная задача которых — определить, между какими существующими листами будет вставлен новый лист. Если ничего не указывать, то новый лист будет помещен самым первым.
Часто встречается и другая задача — просто найти нужный лист среди листов книги, например, если мы открыли существующую книгу. Сделать это очень просто, поскольку коллекция Worksheets умеет работать с именами листов. Ниже приведен пример, в котором мы так же запускаем Excel и создаем новую книгу, но при этом находим лист с именем «Лист1» и переименовываем его в «Новый лист»:
Dim oExcel As New Excel.Application ‘Запускаем Excel
oExcel.Visible = True ‘Делаем его видимым
Dim oWbk As Excel.Workbook
Set oWbk = oExcel.Workbooks.Add() ‘Создаем новую книгу
Dim oSheet As Excel.Worksheet
Set oSheet = oWbk.Worksheets.Item(«Лист 1») ‘ Находим Лист1
oSheet.Name = «Новый лист» ‘Присваиваем ему имя «Новый лист»
Обратите внимание, что в английской версии Excel этот код, скорее всего, не пройдет, поскольку листы там по умолчанию называются «Sheet1», «Sheet2» и т.п. Если вы в вашем коде используете имена листов по умолчанию и при этом вашей программе придется работать на компьютерах с разноязычными версиями Excel, обязательно предусмотрите дополнительные проверки или просто используйте номера листов вместо их имен.
У коллекции Sheets, помимо привычных нам свойств и методов ( Count, Item, Add(), Delete()) и свойств и методов, которые удобнее применять для объекта Worksheet ( Visible(), Copy(), Move(), PrintOut(), PrintPreview(), Select()) — поскольку все равно указывать конкретный лист — есть и один специфический метод FillAcrossSheets() — скопировать объект диапазона Range (варианты: полностью, только содержимое, только оформление) во все листы данной книги.
У объекта Worksheet — множество важных свойств и методов:
- Cells — одно из наиболее часто используемых свойств объекта Worksheet. Работает точно так же, как и рассмотренное выше одноименное свойство объекта Application — за исключением того, что вам больше не нужно ограничиваться только активным листом. Аналогично работают свойства Columns и Rows.
- EnableCalculation — возможность отключить автоматический пересчет значений ячеек в книге.
- EnableSelection — возможность запретить выделять на листе: все, ничего не запрещать, или разрешить выделять только незаблокированные ячейки.
- Next — возможность получить ссылку на следующий лист в книге. Previous — то же самое для предыдущего листа.
- PageSetup — как и в Word, возможность получить объект PageSetup, при помощи которого можно настроить те же параметры, что и через меню Файл ->Параметры страницы.
- свойство Protection позволяет получить объект Protection, при помощи которого можно запретить пользователю вносить изменения в лист Excel. Настройке параметров защиты также служат и другие свойства, названия которых начинаются на Protection.
- QueryTables — исключительно важное свойство. Оно возвращает коллекцию QueryTables — набор объектов QueryTable, которые, в свою очередь, представляют данные, полученные из внешних источников (как правило, из баз данных).
- Range — самое важное свойство объекта Worksheet. Возвращает объект Range (диапазон ячеек), который в объектной модели Excel занимает примерно такое же место, что и одноименный объект в объектной модели Word. Этот объект будет рассматриваться ниже.
- Type — возможность определить тип данного листа. Обычно используются два типа: xlWorksheet (обычный лист) и xlChart (диаграмма).
- UsedRange — возвращает объект Range, представляющий собой прямоугольную область, включающую все непустые ячейки. Удобно для целей копирования или форматирования.
- Visible — возможность спрятать лист с глаз пользователя (например, если он используется для служебных целей).
Некоторые важные методы объекта Worksheet:
- методы Activate() , Calculate(), Copy(), Paste(), Delete(), Move(), Evaluate(), Select(), SaveAs(), PrintOut(), PrintPreview(), Protect(), Unprotect()нам уже знакомы . Отличие заключается только в том, что теперь эти методы могут применяться для выбранного вами листа.
- метод PivotTables() возвращает коллекцию очень интересных объектов PivotTable (сводная таблица), которые будут рассматриваться ниже;
- метод Scenarios() возвращает коллекцию Scenarios, состоящую из объектов Scenario (сценарии). Сценарии — это именованные наборы вводных данных, которые можно использовать для проверки различных сценариев (разные суммы продаж, уровни налогов, расходов и т.п.)
- SetBackgroundPicture() — возможность назначить листу фоновое изображение (естественно, желательно, чтобы оно было полупрозрачное — «водяной знак», иначе на его фоне будет трудно читать текст в ячейках).
- ShowAllData() — показать все скрытые и отфильтрованные данные на листе.
Самое важное событие объекта Worksheet — это, конечно, Change. Существует множество практических задач, когда изменение пользователем значения ячейки должно приводить к изменению значения в ячейке другого листа/рабочей книги Excel или даже в базе данных. Другая ситуация, в которой используется это события — сложная проверка вводимого пользователем значения (например, опять-таки через обращение к базе данных). Эта событийная процедура работает со специальным параметром Target — то есть объектом Range, представляющим изменившуюся ячейку. При помощи свойств и методов объекта Range вы можете получить информацию об изменившемся значении, столбце и строке, в котором произошло изменение и т.п.
У объекта Worksheet есть еще два очень удобных события (их сильно не хватает объекту Document в Word). Это — события BeforeRightClick() и BeforeDoubleClick(). Как понятно из названия, первое событие позволяет перехватывать щелчок правой кнопкой мыши по любому месту в листе, а второе — двойной щелчок мышью. При помощи этих событий вы можете назначить свою реакцию (открытие контекстных меню, выдачу предупреждающих сообщений, переход в другой режим работы и т.п.) на действия пользователя.
VBA: Добавление/Удаление/Изменение/Обновление записей в таблицах Access
Добавление записи в таблицу Access
Пользователи А и Б вводят информацию о перемещениях товаров в форму. Фактическое добавление записи в таблицу Access возложено на макрос AddTransfег.
При добавлении записи в таблицу Access макрос AddTransf ег выполняет следующую последовательность действий.
1. Создание объекта соединения.
2. Создание объекта набора данных для обращения ктаблице tblTransfer.
3. Вызов метода AddNew для добавления новой записи в таблицу tblTransfer.
4. Установка значения каждого поля новой записи таблицы tblTrans f ег.
5. Вызов метода Update для внесения изменений в базу данных.
6. Закрытие объектов набора данных и соединения.
Ниже приведен код метода AddTransfег.
Извлечение записей из таблицы Access
Чтобы извлечь записи из таблицы Access, определите набор данных, указав в качестве источника строку SQL-запроса, задающую требуемый критерий отбора. Скопировать записи из таблицы Access на рабочий лист Excel поможет метод Excel VBA CopyFromRecordset. Следующий макрос извлекает из таблицы tblTransfer все записи, в которых значение поля Отправлен равно False, и помещает их на рабочий лист. Строка f rmTransConf. Show выводит на экран пользовательскую форму, которая применяется для обновления записей и рассматривается в следующем разделе.
Метод CopyFromRecordset копирует на рабочий лист Excel только строки с данными, а строку заголовка необходимо создавать вручную. Результат выполнения макроса GetUnsentTransfers до отображения пользовательской формы показан на рис. 19.3.
Обновление записей таблицы Access
Чтобы обновить существующую запись таблицы Access, создайте набор данных, содержащий одну-единственную запись. Обычно для этого необходимо, чтобы пользователь выбрал требуемую запись (а значит и ее уникальный идентификатор — ключ) с помощью формы. Измените значение требуемого поля с помощью свойства Fields и внесите обновленную запись в базу данных с помощью метода Update. Рассмотренный ранее макрос GetUnsentTransfers помещает записи таблицы tblTransfer на рабочий лист, а затем выводит на экран пользовательскую форму frmTransConf. Метод инициализации формы User Form_Initialize загружает все записи с текущего рабочего листа в список, поддерживающий множественный выбор (значение свойства MultiSelect равно True):
Форма, показанная на рис. 19.4, отображает записи, соответствующие неотправленным товарам. Чтобы изменить значение поля Отправлен требуемых записей с Fa] se на True, выделите их и щелкните на кнопке Подтвердить.
Ниже приведен код, выполняющийся в результате щелчка на кнопке Подтвердить. Ключевым фрагментом этого кода является создание SQL-запроса, использующегося для отбора единственной записи таблицы tblTransfer с помощью поля Идентификатор.
Удаление записей таблицы Access
Чтобы удалить существующую запись таблицы Access, создайте SQL-код, удаляющий запись на основе значения ее уникального идентификатора. Установите соединение с базой данных и выполните SQL-код с помощью метода Execute, как показано ниже:
Как в Access на VBA выгрузить Recordset в Excel?
Всем привет! Материал сегодня будет посвящен рассмотрению возможности Access выгружать Recordset в Excel на VBA. Данный способ достаточно простой и предполагает использование Recordset как формы, так и специально созданного объекта.
Ранее мы с Вами уже рассматривали возможность выгрузки данных из Access в Excel в материале «Выгрузка данных из Access в шаблон Word и Excel», но там мы использовали специально созданный шаблон, что не совсем удобно, если например, нам необходимо выгрузить просто набор данных с заголовками полей.
Также если кого интересует, недавно мы рассматривали возможность выгрузки данных из базы MS SQL Server в формат CSV (текстовый файл с разделителями) с помощью VBA Access в материале «Экспорт данных в CSV файл из Microsoft SQL Server, используя Access 2003».
Сейчас я покажу простой пример реализации возможности выгружать наборы данных с заголовками из базы MS SQL Server средствами VBA Access в Excel.
Весь смысл сводится в использование метода CopyFromRecordset, который позволяет переносить Recordset в Excel в том виде, какой он и есть, т.е. в виде таблицы. Единственное что нам необходимо будет сделать, это выгрузить заголовки, чтобы было понятней, что за данные содержатся в той или иной колонке.
Итак, давайте приступать и для начала рассмотрим исходные данные.
Примечание! В качестве примера источником данных у меня будет выступать MS SQL Server 2012 Express, а в качестве клиента ADP проект Access 2003. Также на компьютере клиенте установлен Microsoft Office 2010.
Исходные данные
Допустим, на сервере у нас есть таблица TestTable.
И она содержит следующие данные.
Также допустим, что в ADP проекте Access у нас есть форма, источником данных которой выступает наша тестовая таблица TestTable.
Код VBA для выгрузки Recordset формы в Excel
Сначала давайте рассмотрим пример выгрузки объекта Recordset формы в Excel. Для этого добавляем на форму кнопку, для примера я ее назвал RSExportInExcel. В обработку события нажатие кнопки вставляем следующий код, я его прокомментировал:
Сохраняем изменения и пробуем нажать на кнопку. В итоге у нас запустится Excel, а в нем будут необходимые нам данные.
Примечание! Свойства HorizontalAlignment и VerticalAlignment могут не работать, если на компьютере не установлен Microsoft Office 2010, поэтому в случае возникновения ошибок связанных с этими свойствами просто закомментируйте их.
Код VBA для выгрузки объекта Recordset в Excel
Теперь давайте напишем код, который позволяет выгружать объект Recordset, данные которого получены, скажем с помощью запроса к базе данных. Для этого добавьте еще одну кнопку (я ее назвал RSExportInExcel2) и вставьте немного модифицированный код:
Снова сохраняем и пробуем нажать на кнопку, в итоге у нас получится точно такая же выгрузка, как и чуть ранее, только сейчас в качестве источника данных Recordset у нас может выступать любой запрос, а не только данные формы.
На этом у меня все! Надеюсь, материал был Вам полезен, пока!
Удаление листа с ошибками VBA Excel
Я пытаюсь удалить рабочий лист, когда пользователь нажимает на изображение (кнопку) в Excel. Однако это приводит к сбою и перезагрузке excel, забывая о любом несохраненном прогрессе.
Это мое подразделение:
Запуск приложения чаще всего происходит. Но не всегда. Любые идеи, что может быть неправильным? (Я протестировал и подтвердил, что функция удаления вызывает сбой, но не всегда тот же лист).
Изменить: эта функция не удаляет последний лист в книге. Есть еще 20 листов. Также я использую Application.Calculation = xlCalculationAutomatic , потому что есть выделение формул, и я не хочу, чтобы excel вычислял изменения до того, как все связанные листы удалены.
Любой намек или ответ приветствуются 🙂
Вы можете удалить активный лист с кнопки (или изображения) на активном листе. Вам просто нужно обойти это.
Ошибка возникает, когда кнопка, которая инициирует макрос, находится на одном из листов, которые необходимо удалить.
Поэтому ответ: не создавайте кнопку (или изображение, связанное с макросом), которое удаляет лист, на котором он включен.
Если кто-то может добавить к этому ответу причину этой ошибки, сделайте это;)
Я сам столкнулся с этой проблемой! Я собираюсь отнестись к более опытным дизайнерам, чтобы усовершенствовать эту технику, но, как общая концепция, у меня есть рабочее решение:
Если вы разрешите макросу запускать его курс, а затем удалять лист, он не падает. Что-то вроде этого:
Я обнаружил, что в Office 2013 вы не можете поместить кнопку, которая перекрывает ячейку, которая изменяет этот макрос. Интересно, что это не происходит, если изменение носит числовой характер, но если оно является буквенно-цифровым, оно взрывается, когда вы пытаетесь удалить эту вкладку. Оказывается, он взрывает его при попытке удалить вкладку вручную (щелчком мыши) или макросом, пытающимся это сделать. THUS, мой урок, извлеченный из этого потока и применяющий его к моей конкретной ситуации, никогда не помещает кнопку развития над ячейкой, которую он меняет (в моем случае это была просто ячейка, которая дает статус того, что делал этот макрос). Excel 2013 не нравится эта ситуация, в то время как Excel 2010 просто все равно.
Как насчет перемещения кода кнопки в модуль?
У меня была проблема с этим в Excel 2016, из-за которой Option явный не работал, если код был в модуле, но если код был в модуле, то вы «должны» быть в состоянии удалить лист, где находилась кнопка.
Мне нужна кнопка, которая удалит лист, так как рабочая книга была защищена и могла бы «экспортировать» результаты, но не удалять нежелательные результаты.
Мое простое решение заключалось в том, чтобы макрос скрыть лист, но затем удалить последний скрытый лист, чтобы файлы не стали огромными с десятками скрытых листов.
Я создал диапазон в скрытом листе, называемом «DeleteSheet», чтобы сохранить имя скрытого листа.
У меня была аналогичная, но не идентичная проблема. У меня был макрос, который удалил все листы диаграмм со следующей командой, но, несмотря на то, что он работал правильно, Excel 2013 был обречен на провал, как только я попытался сохранить файл, и «восстановился», вернувшись к ранее сохраненной ситуации, отбрасывая любую последующую работу:
О, и он работал нормально, пока я не переехал, я думаю, что это был Excel 2010 до 2013 года, одновременно меняя Windows 10. Команда обречена:
Благодаря некоторому вдохновению из приведенных выше ответов, я сначала ввел сохранение перед действием удаления, а затем изменил удаление следующим образом (оказалось, что сохранение не было необходимым, но мне нравится иметь их там, даже если я их прокомментирую ):
Следует также упомянуть, что перед циклом for существует предшествующее Application.DisplayAlerts = False и, конечно же, Application.DisplayAlerts = True после оператора Next. для вырезания нежелательных
вы уверены, что хотите сделать этот вопрос?
Опять же, благодаря вашим вкладчикам за вдохновение.