Make sure Contents is visible before you hide the others.
Option Explicit
Private Sub workbook_open()
dim sh as object
'hide sheets
Application.ScreenUpdating = False
me.Sheets("Contents").Visible = True
For Each sh In me.Sheets
if lcase(sh.name) = lcase("contents") then
'skip it
else
sh.Visible = False
end if
Next sh
application.screenupdating = true
End sub
(Untested, uncompiled. Watch for typos.
The Me keyword refers to the object that owns the code--in this case, it's the
workbook and is the same as ThisWorkbook.