【发布时间】: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,这确实改善了问题。工作表现在已删除,但前提是您将其保留一小段时间;我想有一些异步工作正在完成。如果你想把它写成答案,我会打勾。