VBA Обратитесь к листу или листу диаграммы

Я пытаюсь написать небольшую функцию, которая принимает путь к файлу (где была сохранена книга), целевой путь (где будет сохранен PDF-файл) и строку имен вкладок (разделенных вертикальной чертой (|)) в excel.

Пользователю функции не нужно вводить строку с именами вкладок (это необязательно), и если они этого не сделают, я хочу выбрать все видимые вкладки и распечатать их. Это было бы в том случае, если бы пользователь имел 50 диаграмм на отдельных листах и ​​не хотел писать строку типа «Диаграмма1 | Диаграмма2 | ....»

Код:

For Each WSO.Name In WBO.Worksheets 
    strSheets = strSheets & WSO.Name & "|" 
Next WSO

strSheets = Left(strSheets, Len(strSheets) - 1) 
arraySheets() = Split(strSheets, "|")

WBO.Sheets(arraySheets()).Select     
WBO.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _ 
    strFilePath, Quality:=xlQualityStandard, _ 
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ 
    True

С циклом For Each есть две проблемы: он не захватывает такие листы, как «Chart1», а только захватывает такие листы, как «Sheet1». Кроме того, он будет захватывать скрытые листы, поэтому, когда я пытаюсь выбрать их все, я получаю ошибку за пределами границ.

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


person Jesse Smothermon    schedule 23.07.2011    source источник


Ответы (2)


Используйте WBO.Sheets вместо WBO.Worksheets в цикле.

Убедитесь, что WSO.Visible = xlSheetVisible отфильтровывает скрытые листы.

person GSerg    schedule 23.07.2011

У цикла For Each есть две проблемы: он не захватывает никакие листы, такие как «Chart1», он захватывает только такие листы, как «Sheet1».

Диаграммы и рабочие листы - это две разные коллекции.
Попробуйте следующее:

Sub Demo()
Dim oWs As Worksheet
Dim oCs As Chart

For Each oWs In ActiveWorkbook.Worksheets
    Debug.Print oWs.Name
Next

For Each oCs In ActiveWorkbook.Charts
    Debug.Print oCs.Name
Next
End Sub
person Steve Rindsberg    schedule 24.07.2011
comment
Конечно, ActiveWorkbook.Sheets включает как ActiveWorkbook.Worksheets, так и ActiveWorkbook.Charts. - person Jon Peltier; 31.07.2015