Удаление листов из файла Excel с использованием VBA - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь удалить все ненужные листы из activeWorkbook, но Sheet1, потому что это будет мой основной лист с исходными необработанными данными в нем.Когда я запускаю следующий код, мои листы удаляются, но я получаю эту ошибку, как только она достигает моего последнего оставшегося листа.Ошибка выполнения «1004»: рабочая книга должна содержать хотя бы одну видимую рабочую таблицу.К вашему сведению: я пишу этот макрос в личной книге макросов, чтобы использовать его для всех других таблиц Excel.

Sub deleteSheets()

Dim ws As Worksheet

   Application.DisplayAlerts = False

   For Each ws In ActiveWorkbook.Worksheets
      If Not ws Is Sheet1 Then ws.Delete
   Next ws

End Sub

Ответы [ 2 ]

2 голосов
/ 14 марта 2019
If Not ws Is Sheet1 Then ws.Delete

Булево выражение {object1} Is {object2} оценивает равенство ссылок : это будет True, если {object1} равно {object2}.

Здесьws - это рабочий лист в ActiveWorkbook, а Sheet1 - это (предположительно) глобальный идентификатор, относящийся к CodeName листа, существующего в ThisWorkbook - который может быть или не быть текущей активной рабочей книгой.

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

Если вы не хотите удалять листы в ThisWorkbook, вы не можете использовать равенство ссылок для этой проверки.

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

For Each ws In ActiveWorkbook.Worksheets
    Debug.Assert ActiveWorkbook.Worksheets.Count > 1
    If Not ws.Name = "Sheet1" Then ws.Delete
Next

Убедитесь, что лист, который вы хотите удалить, имеет ожидаемый индекс (1) и/ или ожидаемое имя;для этого используйте Project Explorer (Ctrl + R) и окна свойств (F4).Имейте в виду, что свойство (Name) является идентификатором CodeName листа, который вы можете использовать / использовать только в проекте VBA ThisWorkbook;вам нужно проверить его Name свойство - это изменяемое пользователем "имя вкладки" на рабочем листе.

1 голос
/ 14 марта 2019
dim i as Integer
dim ws as Worksheet

For i = 2 to ActiveWorkbook.Worksheets.Count
   Sheets(2).Delete
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...