Если вы пишете макросы, которые обрабатывают разные листы в книге, вам может потребоваться выяснить, какие типы листов находятся в книге, прежде чем выполнять какую-либо обработку. Это может быть особенно критичным, поскольку некоторые команды VBA работают только с определенными типами листов.

Прежде чем вы сможете выяснить, какие типы листов находятся в книге, полезно узнать, как Excel внутренне хранит некоторые объекты, составляющие книгу. Excel поддерживает как коллекцию листов, так и коллекцию диаграмм. Коллекция Worksheets состоит из объектов рабочего листа, а коллекция Charts — из объектов листа диаграммы.

Объекты листа диаграммы — это диаграммы, которые занимают весь рабочий лист; он не включает объекты, встроенные в рабочий лист.

Достаточно интересно, что листы и объекты листов диаграммы также являются членами коллекции Sheets. Итак, если вы хотите обработать книгу в том порядке, в котором расположены листы, проще всего сделать это, пройдя через коллекцию Sheets. При этом вы можете изучить свойство Type отдельных объектов в коллекции, чтобы определить, какой это тип объекта. Excel определяет четыре типа объектов, которые могут принадлежать коллекции Sheets:

xlWorksheet. * Это обычный рабочий лист.

xlChart. * Это диаграмма.

xlExcel4MacroSheet. * Это лист макросов, используемый в Excel 4.0.

xlExcel4IntlMacroSheet. * Это международный лист макросов, используемый в Excel 4.0.

У вас может возникнуть соблазн подумать, что достаточно взглянуть на список типов листов. Однако интересно, что 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

Когда вы запускаете макрос, вы видите одно окно сообщения, в котором отображается имя каждого листа в вашей книге, а также тип листа.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (2538) относится к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и более поздних версий) здесь:

link: / excelribbon-Detecting_Types_of_Sheets_in_VBA [Определение типов листов в VBA].