根据单元格值删除工作表

时间:2016-02-04 17:11:55

标签: excel vba excel-vba

我想根据单元格值删除工作表。

例如,我想要细胞" T3"获取我要删除的工作表的值。有50多张纸,所有数字都是4位数(1234)。

Sub Rectangle2_Click()
'deactivate alerts - stop 'are you sure you want to delete pop up'
Application.DisplayAlerts = False

'set worksheet you want to delete
sheettodelete = Range("T3").Value

'deletes sheet
Worksheets(sheettodelete).Delete

're-enable alerts
Application.DisplayAlerts = True
End Sub

上面的代码是我发现应该运行宏的代码,然而,它在" Worksheets(sheettodelete).delete"运行错误' 9':下标超出范围。我检查并确认工作簿上确实存在该工作表。

2 个答案:

答案 0 :(得分:4)

它在这里执行正常,但是,在第二次尝试时它显然会失败,因为该对象将不再存在。此外,如果T3中有拼写错误,您将收到此错误。

这是一个小小的改进,不会产生错误:

Sub test()
Dim sheetToDelete as String
Dim ws as Worksheet
Application.DisplayAlerts = False

sheetToDelete = Worksheets("SheetThatHoldsTheCell").Range("T3").value

On Error Resume Next 'To avoid the subscript out of range error
Set ws = Worksheets(sheetToDelete)
On Error Goto 0 

If not ws is nothing then ws.delete 'Test if the sheet exists.

Set ws = Nothing

Application.DisplayAlerts = True
End Sub

答案 1 :(得分:1)

另一个有效的解决方案是循环工作表并删除具有匹配名称的工作表。

Sub RemoveSheet()
    Dim ws As Worksheet

    Application.DisplayAlerts = False

    For Each ws In Worksheets 'Checks each worksheet
        If ws.Name = Range("T3").Value Then Worksheets(ws.Name).Delete
    Next

    Application.DisplayAlerts = True
End Sub