【问题标题】:Delete Worksheet from Excel doesn't appear to be working从 Excel 中删除工作表似乎不起作用
【发布时间】:2013-05-13 11:02:24
【问题描述】:

我正在尝试使用 VB6 替换 Excel 电子表格中的最后一个工作表。由于不允许删除最后一个工作表,我一直在尝试添加一个临时工作表,删除我不想要的,替换旧的,然后删除临时工作表,如下所示:-

Set temporary_sheet = mwbkBook.Worksheets.Add
temporary_sheet.Name = "NameThatIsUnlikelyToExist"    ' Error Here.

For Each lSheet In mwbkBook.Worksheets
    Select Case lSheet.Name
        Case "SheetToReplace"
            Application.DisplayAlerts = False
            lSheet.Delete
    End Select
Next lSheet

Set mwshSheet = mwbkBook.Worksheets.Add
mwshSheet.Name = "SheetToReplace"
' Fill in mwshSheet

For Each lSheet In mwbkBook.Worksheets
    Select Case lSheet.Name
        Case "Sheet1", "Sheet2", "Sheet3", "NameThatIsUnlikelyToExist"
            Application.DisplayAlerts = False
            lSheet.Delete
    End Select
Next lSheet

此代码的第一次调用为我提供了一个电子表格,其中包含一个工作表 "SheetToReplace",我通过显示电子表格进行验证。

第二次调用在指示的行出现错误:-

Cannot rename a sheet to the same name as another sheet, a referenced object library or a workbook referenced by Visual Basic.

(编号 1004)。

有谁知道我怎样才能摆脱这个看不见的工作表,或者更好的方法来达到预期的结果?

【问题讨论】:

  • 你的逻辑似乎没问题。如果您真的只需要在最后一个循环更改 conditional statement 后将 SheetToReplace 保留在最后一个循环中以相反的逻辑(而不是 Select Case 使用 if...end if: If lSheet.Name <> "SheetToReplace" then .... End if
  • 你说工作表是隐藏的?您需要先使其可见,然后再将其删除。
  • @glh,这确实改善了问题。工作表现在已删除,但前提是您将其保留一小段时间;我想有一些异步工作正在完成。如果你想把它写成答案,我会打勾。

标签: excel vb6


【解决方案1】:

你说工作表是隐藏的?您需要先使其可见,然后再将其删除。

试试:

lSheet.Visible = TRUE
lSheet.Delete

【讨论】:

    【解决方案2】:

    由于不允许删除最后一个工作表..

    如果你只想删除最后一张,你可以这样做

    mwbkBook.Sheets(mwbkBook.Sheets.Count).Delete
    

    【讨论】:

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