VBA请参阅工作表和图表

时间:2011-07-23 00:25:50

标签: vba charts 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

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

我不知道图表工作表的参考方式是否与普通工作表不同,或者为什么还会选择隐藏工作表。

2 个答案:

答案 0 :(得分:7)

在循环中使用WBO.Sheets代替WBO.Worksheets

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

答案 1 :(得分: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