Apos, можно заблокировать лист так, чтобы на макросы эта блокировка не распространялась - то есть для пользователь ничего не сможет поменять, а у макроса будут права на изменение ячеек (даже заблокированных).
Включается эта блокировка макросом:
Код
Sheet1.Protect UserInterfaceOnly:=True
Соответственно, в макросе можно задать и другие параметры блокировки листа - например, разрешить пользователю форматировать ячейки или пользоваться автофильтром с сортировкой. При этом пользователь изменить заблокированные ячейки не сможет, а макрос не будет на этом спотыкаться и весьма успешно будет все менять ;-)
Пардон, конечно, но зачем вырезать гланды через.. кхм..? А если пользователь поменяет название листа, то Ваш макрос перестанет работать...
Заходите в VBA, там ищите окно Properties: если его нет - нажимаете F4. В дереве проекта выбираете тот лист, с которым работаете - в окно свойств загружаются все свойства листа, которые можно поменять во время разработки. Самое первое свойство - (Name) - это имя листа, которое может использоваться в коде (например, Sheet1 как в моем примере выше). Это имя можно изменить только во время разработки, во время выполнения у этого свойства включается атрибут read-only.
И, соответственно, по этому имени и можете обращаться к данному листу; после чего Вас уже не будет интересовать как этот лист называется и как переименовал его пользователь: Excel будет точно знать, что действия нужно выполнять именно с этим листом.