Если вы пишете макросы, которые обрабатывают разные листы в книге, вам может потребоваться выяснить, какие типы листов есть в книге, прежде чем выполнять какую-либо обработку. Это может быть особенно критичным, потому что некоторые команды 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 = «» Для iCount = 1 В Sheets.Count iType = Sheets (iCount) .Type sTemp = sTemp & Sheets (iCount) .Name & «is a» bFound = False для каждого oChart в диаграммах Если oChart.Name = Sheets (iCount) .Name Then bFound = True End If Next oChart If bFound Then sTemp = sTemp & «лист диаграммы». В противном случае выберите Case iType Case xlWorksheet sTemp = sTemp & «рабочий лист». Случай xlChart sTemp = sTemp & «лист диаграммы». Случай xlExcel4MacroSheet sTemp = sTemp & «n Лист макросов Excel 4. «Case xlExcel4IntlMacroSheet sTemp = sTemp &» n Международный лист макросов Excel 4 «Case Else sTemp = sTemp &» n неизвестный тип листа. «End Select End If sTemp = sTemp & vbCrLf Next iCount MsgBox sTempEnd Sub
Когда вы запускаете макрос, вы видите одно окно сообщения, в котором отображается имя каждого листа в вашей книге, а также тип листа.
Источник: