【问题标题】:VBA Refer to worksheet vs chart sheetVBA 参考工作表和图表表
【发布时间】:2011-10-11 11:08:06
【问题描述】:

我正在尝试编写一个小函数,该函数接受文件路径(工作簿的保存位置)、目标路径(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”。此外,它会抓取隐藏的工作表,因此当我尝试选择所有工作表时会出现越界错误。

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

【问题讨论】:

    标签: vba charts worksheet refer


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      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.WorksheetsActiveWorkbook.Charts
      猜你喜欢
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多