VBA См. Рабочий лист против таблицы - PullRequest
6 голосов
/ 23 июля 2011

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

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

Код:

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». Кроме того, он будет захватывать скрытые листы, поэтому, когда я пытаюсь выбрать их все, я получаю ошибку выхода за границы.

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

Ответы [ 2 ]

7 голосов
/ 24 июля 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
7 голосов
/ 23 июля 2011

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

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

...