2017-08-25 44 views
0

根据用户的表单显示,我正在开发一个小工具来删除特定工作表。用户选择他想要保留在列表框中的表格。代码然后遍历列表框中的所有图纸并删除未选中的图纸。 但是,运行该窗体,然后点击我得到了一个自动化错误按钮时:删除工作表时出现自动化错误

执行错误“-2147417848(80010108): 自动化错误调用 对象已断开

Private Sub Button_Export_Click() 
    Application.DisplayAlerts = False 
    For i = 0 To PSV_Case_List.listCount - 1 
     If Not PSV_Case_List.Selected(i) Then 
      Worksheets(PSV_Case_List.List(i)).Delete 

     End If 
    Next i 
    Application.DisplayAlerts = True 
End Sub 

在此消息之后,Excel冻结,我必须杀死该进程。

有什么想法?

谢谢!

回答

1

当你这样删除时,你应该总是从最高的索引开始,然后顺着工作的方向走,因为一旦表(0)被删除,sheet(1)就变成sheet(0)等等。所以试试这个:

For i = PSV_Case_List.listCount - 1 to 0 step -1 
+0

我试过了,它不起作用。实际上,由于PSV_Case_List.List(i)包含表单的名称,并且在删除表单时不受影响,因为它是列表框的内容。感谢您的帮助 – Rowin

+0

您是否尝试将其保存在数组中,然后在表单关闭后将其删除?只需打开表格,选择superstite表格,单击确定,关闭表格,删除数组列表中的每个工作表。也许在打开的窗体中删除它会导致窗体消失,然后“对象将被断开”。任何情况下,您都可以通过调试来查看宏何时失败。 – exSnake