Определение типов листов в VBA (Microsoft Excel)
Если вы пишете макросы, которые обрабатывают разные листы в книге, вам может потребоваться выяснить, какие типы листов находятся в книге, прежде чем выполнять какую-либо обработку. Это может быть особенно критичным, поскольку некоторые команды VBA работают только с определенными типами листов.
Прежде чем вы сможете выяснить, какие типы листов находятся в книге, полезно узнать, как Excel внутренне хранит некоторые объекты, составляющие книгу. Excel поддерживает как коллекцию листов, так и коллекцию диаграмм. Коллекция Worksheets состоит из объектов рабочего листа, а коллекция Charts — из объектов листа диаграммы.
Объекты листа диаграммы — это диаграммы, которые занимают весь рабочий лист; он не включает объекты, встроенные в рабочий лист.
Достаточно интересно, что листы и объекты листов диаграммы также являются членами коллекции Sheets. Итак, если вы хотите обработать книгу в том порядке, в котором расположены листы, проще всего сделать это, пройдя через коллекцию Sheets. При этом вы можете изучить свойство Type отдельных объектов в коллекции, чтобы определить, какой это тип объекта. Excel определяет два типа объектов, которые могут принадлежать коллекции Sheets:
xlWorksheet. * Это обычный рабочий лист.
xlChart. * Это диаграмма.
Следующие два типа объектов по-прежнему поддерживаются Microsoft Excel, но Microsoft рекомендует перенести их в последнюю версию Microsoft VBA. (Дополнительную информацию о работе с макросами Excel 4.0 см. На указанной ниже веб-странице.):
xlExcel4MacroSheet. * Это лист макросов, используемый в Excel 4.0.
xlExcel4IntlMacroSheet. * Это международный лист макросов, используемый в Excel 4.0.
https://support.office.com/en-us/article/Working-with-Excel-4-0-macros-BA8924D4-E157-4BB2-8D76-2C07FF02E0B8
У вас может возникнуть соблазн подумать, что достаточно взглянуть на список типов листов. Однако интересно, что Excel не всегда возвращает то, что вы ожидаете от свойства Type. Вместо этого, если вы изучите свойство Type для диаграммы, оно вернет значение, равное xlExcel4MacroSheet.
Это может вызвать проблемы для любого макроса.
Чтобы решить эту проблему, нужно сравнить имя каждого элемента в коллекции Sheets с именами в коллекции Charts. Если имя присутствует в обеих коллекциях, можно с уверенностью предположить, что лист является диаграммой. Если нет в обоих, то вы можете проанализировать дальше, чтобы увидеть, относится ли рабочий лист к одному из других типов. Следующий макрос SheetType следует именно этому процессу:
Sub SheetType() Dim iCount As Integer Dim iType As Integer Dim sTemp As String Dim oChart As Chart Dim bFound As Boolean sTemp = "" For iCount = 1 To Sheets.Count iType = Sheets(iCount).Type sTemp = sTemp & Sheets(iCount).Name & " is a" bFound = False For Each oChart In Charts If oChart.Name = Sheets(iCount).Name Then bFound = True End If Next oChart If bFound Then sTemp = sTemp & " chart sheet." Else Select Case iType Case xlWorksheet sTemp = sTemp & " worksheet." Case xlChart sTemp = sTemp & " chart sheet." Case xlExcel4MacroSheet sTemp = sTemp & "n Excel 4 macro sheet." Case xlExcel4IntlMacroSheet sTemp = sTemp & "n Excel 4 international macro sheet" Case Else sTemp = sTemp & "n unknown type of sheet." End Select End If sTemp = sTemp & vbCrLf Next iCount MsgBox sTemp End Sub
Когда вы запускаете макрос, вы видите одно окно сообщения, в котором отображается имя каждого листа в вашей книге, а также тип листа.
Наконец, помните, что этот код сообщает вам, какие типы листов находятся в книге; он не сообщает вам, в какой книге они содержатся. (Другими словами, макросу все равно, в какой версии Excel вы работаете.)
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (10483) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для более старого интерфейса меню Excel здесь:
link: / excel-Detecting_Types_of_Sheets_in_VBA [Определение типов листов в VBA]
.