VBA代码会删除它自己的工作表,留下一个" ghost"表格背后

时间:2014-10-09 12:07:24

标签: excel vba

我有一张带有VBA代码的excel表来调用userform。当我运行该userform时,其中一条指令是删除工作表(但是因为它首先调用了userform,我怀疑该工作表上的代码仍然在运行)。最终会留下一个"鬼"在VBA Microsoft Excel对象列表中后面的工作表。当选项显示为灰色时,您无法删除这些工作表。结果我积累了大量的幽灵"片材。

screenshot

表格上的代码:

Private Sub CommandButton1_Click()
    Call Show_UserForm
End Sub

非常感谢有关此问题的任何建议或帮助。

2 个答案:

答案 0 :(得分:0)

留下的“鬼”表只是对象的代码。

由于您要删除调用例程的工作表,我不确定会产生什么效果,但您可以使用ThisWorkbook.VBProject.VBComponents("XXX").Delete方法删除这些工作表,其中XXX是{对象的{1}}。

答案 1 :(得分:0)

我遇到了类似的问题;因此我想我会发帖,以防万一。我从excel中删除的工作表作为对象存在,我无法手动删除工作表。当我检查属性时,我看到属性'Visible'设置为2(xlSheetVeryHidden)。我将它们更改为-1然后我能够删除所有这些。我使用以下代码删除了工作表。

但是,我不确定是什么原因导致床单不可见。我的excel的第一张表中有一个引用链接到已删除的页面,这可能导致了这一点。

Sub deleteGhosts()

    Dim wb As Workbook
    Dim tabname As String

    Set wb = ThisWorkbook

    For Each Sheet In wb.Worksheets
        tabname = Sheet.Name
        If wb.Worksheets(tabname).Visible = 2 Then
            MsgBox "Deleting " + tabname
            wb.Worksheets(tabname).Visible = -1
            wb.Worksheets(tabname).Delete
        End If
    Next Sheet

End Sub