删除我无法访问的Excel中的工作表

时间:2017-04-21 15:15:22

标签: excel vba excel-vba

我正在尝试删除因某些原因无法访问的工作表。每次我想访问它时它都会崩溃。我正在使用以下宏来删除关闭时不需要的工作表(所有以“SHEET”开头的工作表)在关闭时被删除。所以我认为我可以使用相同的宏并将“SHEET”更改为“CHART”,但由于某种原因,宏无法识别我在工作簿中有名为“CHART1”的工作表,因此不需要的工作表会保留在那里。因为它每次都会使工作簿崩溃

有没有办法可以删除这张表,另一张宏呢?

这是我目前用来删除CHART表的宏:

Private Sub Workbook_Deactivate()

Dim sh As Worksheet
Dim flg As Boolean    

For Each sh In Worksheets
     If sh.Name Like "Chart*" Then flg = True: Exit For
Next
If flg = True Then
     Call Delete_NEW_Unwanted_CHART
End If        

If ThisWorkbook.Saved = False Then
     ThisWorkbook.Save
End If

End sub

在我的模块中:

Sub Delete_NEW_Unwanted_CHART()

Dim ws As Worksheet

For Each ws In ThisWorkbook.Charts
    If Left(ws.Name, 5) = "Chart" Then                
        Application.DisplayAlerts = False
        ws.Delete
        Application.DisplayAlerts = True
    End If        
Next ws

End Sub

当我使用断点运行时,它甚至不会识别出我有一个名为“CHART1”的工作表。就好像永远不会识别此图表工作表的标志一样。

3 个答案:

答案 0 :(得分:0)

您已将ws声明为工作表,然后通过一系列图表循环播放(有效地用于工作簿图表中的每个工作表 - 这没有意义)尝试For Each ws In ThisWorkbook.Sheets争论和Next

答案 1 :(得分:0)

我其实刚刚发现了它的错误。 如果将来有人遇到这个问题,这是正确的宏:

Private Sub Workbook_Deactivate()
For Each shC In Charts
 If shC.Name Like "Chart*" Then flg = True: Exit For
        Next
         If flg = True Then
    Call Delete_NEW_Unwanted_CHART
         End If


If ThisWorkbook.Saved = False Then
        ThisWorkbook.Save
End If
End sub

在模块中写:

Sub Delete_NEW_Unwanted_CHART()
Dim wsC As Chart

For Each wsC In ThisWorkbook.Charts
 If Left(wsC.Name, 5) = "Chart" Then

          Application.DisplayAlerts = False
            wsC.Delete
            Application.DisplayAlerts = True
            End If

     Next wsC


 End Sub

每个人都过得愉快: - )

答案 2 :(得分:0)

为什么不呢?

Private Sub Workbook_Deactivate()

Dim sh As Chart
Dim flg As Boolean

For Each sh In Charts
    If Left(sh.Name, 5) = "Chart" Then
        Application.DisplayAlerts = False
        sh.Delete
        Application.DisplayAlerts = True
    End If
Next

If ThisWorkbook.Saved = False Then
    ThisWorkbook.Save
End If

End Sub