【问题标题】:VBA Excel Sheet Method doesn't work after Office updatesOffice 更新后 VBA Excel 工作表方法不起作用
【发布时间】:2016-10-26 19:16:32
【问题描述】:

我有一个脚本,它从 CSV 文件中获取数据,然后生成图形。在多次 Office 更新后,此脚本已完成工作。 Office 版本无法返回。

这是代码:

Dim sheet
    For Each sheet In ActiveWorkbook.Sheets
        Select Case sheet.Name
            Case "Archive": Sheets(sheet.Name).Delete
            Case "Trend":  Sheets(sheet.Name).Delete
            Case "PivotTable": Sheets(sheet.Name).Delete
        End Select
Next

我收到以下错误:“应用程序定义或对象定义错误”。此错误出现在 Select Case 上,因为我的对象“工作表”没有方法“名称”。

我尝试将“工作表”声明为工作表

Dim sheet as Worksheet
    For Each sheet In ActiveWorkbook.Sheets
        Select Case sheet.Name
            Case "Archive": Sheets(sheet.Name).Delete
            Case "Trend":  Sheets(sheet.Name).Delete
            Case "PivotTable": Sheets(sheet.Name).Delete
        End Select
    Next

在脚本的第一个 cicle 我没有任何问题,从第二个 cicle 我有错误:“类型不匹配”

我该如何解决?

谢谢

【问题讨论】:

  • ActiveWorkbook.WorkSheets 和 `worksheets(sheet.name)' 有效吗?
  • 您是否尝试在调试模式下运行代码,在For each... 之后设置断点并检查sheet 的值?您现在使用的是哪个版本的 Office?

标签: vba excel


【解决方案1】:

注意:这不一定是答案,但写下来作为评论太长了。

您可以使您的编码更简洁:我不喜欢使用sheet,因为它与Sheet 非常相似。 另外,最好避免使用ActiveWorkbook

Dim Sht             As Worksheet

For Each Sht In ActiveWorkbook.Sheets
    Select Case Sht.Name

        Case "Archive", "Trend", "PivotTable"
            Sht.Delete

    End Select

Next Sht

【讨论】:

    【解决方案2】:

    Sheets 可以包含ChartWorksheets 对象

    然后

    如果您只想删除Worksheets

    Dim sheet As Worksheet
    For Each sheet In ActiveWorkbook.Worksheets '<-- loop through Worksheets collection
        Select Case sheet.Name
            Case "Archive": Sheets(sheet.Name).Delete
            Case "Trend":  Sheets(sheet.Name).Delete
            Case "PivotTable": Sheets(sheet.Name).Delete
        End Select
    Next
    

    如果您想同时删除 WorksheetsCharts,则:

    Dim sheet As variant '<-- a Variant variable can be assigned both a Worksheet and a Chart object
    For Each sheet In ActiveWorkbook.Sheets '<-- loop through Worksheets and Charts collections
        Select Case sheet.Name
            Case "Archive": Sheets(sheet.Name).Delete
            Case "Trend":  Sheets(sheet.Name).Delete
            Case "PivotTable": Sheets(sheet.Name).Delete
        End Select
    Next
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多