Как проверить, существует ли лист с помощью vba?
Если вы хотите создать лист, удалить его, переместить или скопировать, вам необходимо знать, существует этот лист или нет.
Чтобы написать код, проверяющий, существует ли лист или нет, вам понадобится цикл, который проходит через каждый лист в книге и соответствует указанному вами имени. Но вот в чем дело, для этого можно использовать два разных цикла ( For Next и For Each ), и сегодня мы будем использовать оба.
В этом уроке мы рассмотрим различные способы сделать это. Поэтому убедитесь, что у вас есть вкладка «Разработчик» на ленте , и откройте редактор VBA , чтобы написать этот код.
Проверьте, существует ли лист в текущей книге
С помощью этого цикла вы можете ссылаться на все листы в книге и просматривать их один за другим, чтобы сопоставить имя листа с именем листа, который вы хотите найти.
Следуй этим шагам:
- Сначала объявите переменную, которая будет использоваться для листа при запуске цикла и для хранения имени листа, который вы хотите найти.
- Затем напишите строку кода для поля ввода, чтобы ввести имя листа, который вы хотите найти.
- После этого начните цикл с ключевого слова For Each. И используйте переменную для ссылки на каждый лист в книге.
- Отсюда вам нужно написать оператор IF THEN ELSE , чтобы сопоставить имя листа с именем, введенным вами в поле ввода, а затем отобразить окно сообщения, если совпадение обнаружено, и выйти из процедуры.
- В конце появится окно сообщения , уведомляющее вас, если совпадение не найдено.
Полезные ссылки: Запуск макроса – Средство записи макросов – Редактор Visual Basic – Персональный справочник по макросам
Полный код:
Sub vba_check_sheet() Dim sht As Worksheet Dim shtName As String shtName = InputBox(Prompt:="Enter the sheet name", _ Title:="Search Sheet") For Each sht In ThisWorkbook.Worksheets If sht.Name = shtName Then MsgBox "Yes! " & shtName & " is there in the workbook." Exit Sub End If Next sht MsgBox "No! " & shtName & "is not there in the workbook." End Sub
Позвольте мне объяснить, как это работает: при запуске этого кода появится сообщение, в котором вам нужно ввести имя листа, который вы хотите найти.
После этого он проходит через каждый лист, чтобы сопоставить имя с введенным вами именем, и если имя соответствует листу, он показывает вам одно сообщение и другое сообщение, если совпадений нет.
Вот еще один код, позволяющий проверить, существует ли лист или нет.
Sub vba_check_sheet() Dim sht As Worksheet Dim shtName As String Dim i As Long i = Sheets.Count shtName = InputBox(Prompt:="Enter the sheet name", _ Title:="Search Sheet") For i = 1 To i If Sheets(i).Name = shtName Then MsgBox "Yes! " & shtName & " is there in the workbook." Exit Sub End If Next i MsgBox "No! " & shtName & " is not there in the workbook." End Sub
Этот код использует цикл FOR NEXT и использует общее количество листов в книге и на основе этого перебирает каждый лист, имя которого соответствует введенному вами имени.
Проверьте, существует ли лист в закрытой книге
В следующем коде у вас есть цикл, который ищет имя листа в закрытой книге. Для ссылки на файл мы использовали адрес файла.
Sub vba_check_sheet() Dim wb As Workbook Dim sht As Worksheet Dim shtName As String shtName = InputBox(Prompt:="Enter the sheet name", _ Title:="Search Sheet") Application.ScreenUpdating = False Set wb = Workbooks.Open _ ("C:UsersDellDesktopsample-file.xlsx") For Each sht In wb.Worksheets If sht.Name = shtName Then wb.Close SaveChanges:=True MsgBox "Yes! " & shtName & " is there in the workbook." _ , vbInformation, "Found" Exit Sub End If Next sht Application.ScreenUpdating = False MsgBox "No! " & shtName _ & " is not there in the workbook.", _ vbCritical, "Not Found" End Sub
Когда вы запускаете этот макрос, он открывает файл сзади, когда вы отключили обновление экрана, и как только он пройдет через все листы, у вас будет код для включения обновления экрана. ‘экран.
Примечание. Как видите, в адресе расположения файла указано расширение файла, а это означает, что для ссылки на него вам необходимо иметь правильное расширение файла.