VBA参考工作表与图表表

VBA参考工作表与图表表,vba,charts,worksheet,refer,Vba,Charts,Worksheet,Refer,我正在尝试编写一个小函数,它接受excel中的文件路径(保存工作簿的位置)、targetpath(pdf将保存到的位置)和一串选项卡名称(以管道(|)分隔) 该函数的用户不必输入标签名称字符串(这是可选的),如果不需要,我希望选择所有可见的标签并打印它们。如果用户在单独的工作表中有50个图表,并且不想编写类似“Chart1 | Chart2 |…”的字符串,则会出现这种情况 代码: For-Each循环有两个问题:它不抓取任何诸如“Chart1”之类的表,它只抓取诸如“Sheet1”之类的表。此

我正在尝试编写一个小函数,它接受excel中的文件路径(保存工作簿的位置)、targetpath(pdf将保存到的位置)和一串选项卡名称(以管道(|)分隔)

该函数的用户不必输入标签名称字符串(这是可选的),如果不需要,我希望选择所有可见的标签并打印它们。如果用户在单独的工作表中有50个图表,并且不想编写类似“Chart1 | Chart2 |…”的字符串,则会出现这种情况

代码:

For-Each循环有两个问题:它不抓取任何诸如“Chart1”之类的表,它只抓取诸如“Sheet1”之类的表。此外,它还会抓取隐藏的工作表,这样当我尝试选择所有工作表时,就会出现越界错误


我不知道图表工作表的引用方式是否与常规工作表不同,也不知道为什么会选择隐藏工作表。

在循环中使用
WBO.sheets
而不是
WBO.Worksheets

验证
WSO.Visible=xlSheetVisible
以过滤隐藏的工作表

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

当然,
ActiveWorkbook.Sheets
包括
ActiveWorkbook.Worksheets
ActiveWorkbook.Charts
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