VBA请参阅工作表与图表表

Jes*_*mon 6 charts vba worksheet refer

我正在尝试编写一个小函数,它接受一个文件路径(工作簿保存在哪里),targetpath(将保存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
Run Code Online (Sandbox Code Playgroud)

For Each循环有两个问题:它不会抓取任何纸张,例如"Chart1",它只会抓取诸如"Sheet1"之类的纸张.此外,它将抓取隐藏的工作表,以便当我尝试选择它们时,我得到一个越界错误.

我不知道图表表格是否与常规表格不同,或者为什么还会选择隐藏表格.

GSe*_*erg 7

使用WBO.Sheets,而不是WBO.Worksheets在循环.

验证是否WSO.Visible = xlSheetVisible过滤掉隐藏的工作表.


Ste*_*erg 7

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
Run Code Online (Sandbox Code Playgroud)