delete sheet

  • Thread starter Thread starter ranswrt
  • Start date Start date
R

ranswrt

I have a procedure to delete a sheet in a workbook. All the named cells in
that sheet gets deleted. When I use the 'F3' to paste the list of named
cells, the cells in the sheet that was deleted appear in it. Do I need to
delete the named cells before I delete the sheet?

Thanks
 
I can not think of a single reason why there would be a problem. The named
ranges no longer appear when you hit F5, the Goto Range Key and the F3 key
seems to be the only place that "keeps" them. So I don't think it is a
problem.
 
You could delete the names before or after you delete the worksheet--or you
could let those invalid names just stick around.

If you're working with names, get Jan Karel Pieterse's (with Charles
Williams and Matthew Henson) Name Manager:

You can find it at:
NameManager.Zip from http://www.oaltd.co.uk/mvp

You'll find it very valuable.
 
When you create a name in a worksheet, it creates it for the workbook. That
is why is is still
there after you delete the sheet. However if you want to get rid of it you
can go to the name manager
and select it and the delete icon will become active. Click on the delete
and it is gone.
Skinman
 
ps.

You may want to start using local/worksheet names instead of global/workbook
names.
 
You could use code like this to delete your worksheet and any Names
referencing it...

Sub DeleteSheetAndItsNames()
Dim N As Name
Dim WS As String
WS = "Sheet3"
For Each N In ThisWorkbook.Names
If Mid(Split(N.RefersTo, "!")(0), 2) = WS Then N.Delete
Next
Worksheets(WS).Delete
End Sub

Just change the worksheet name reference or, better still maybe, make it a
Variant argument to the subroutine (then you can specify the worksheet name
or number) so that your code can call it and specify the worksheet name or
number when doing so. You can then, of course, bolster it up with some error
checking.

Rick
 
Well, actually, if you changed it to a Variant argument, you would have to
adapt the If-Then statement to account for that. Something like this
maybe...

Sub DeleteSheetAndItsNames(WS As Variant)
Dim N As Name
Dim S As Worksheet
If WS Like String(Len(WS), "#") Then
If WS <= Worksheets.Count Then
WS = Worksheets(WS).Name
End If
End If
For Each S In Worksheets
If S.Name = WS Then
For Each N In ThisWorkbook.Names
If Mid(Split(N.RefersTo, "!")(0), 2) = WS Then N.Delete
Next
Worksheets(WS).Delete
Exit Sub
End If
Next
MsgBox "No such worksheet!", vbCritical, "No Such Worksheet"
Err.Raise 1111, , "No such worksheet!"
End Sub

I provided a trappable error that can be caught by your calling code. For
example...

Sub Test()
On Error GoTo Whoops
DeleteSheetAndItsNames "SheetX"
Exit Sub
Whoops:
Debug.Print Err.Number, Err.Description
End Sub

Rick
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Back
Top