Страницы: 1
RSS
Запретить переименовывание листов
 
Доброго всем времени суток, подскажите пожалуйста, как запретить изменение названий листов в книге, не защищая книгу. Листы в книге защищены, в VBA виден пароль.
 
Что-то rar не открывается попробую в zipe прикрепить
 
предлагаю изменить и кодовые имена листов(приравнять их пользовательским)  
а потом при любом действии проверять не изменились ли, если надо, переименовывать.
Живи и дай жить..
 
Я что-то не нашел события на переименование листа.  
Тут ZVI выкладывал файлик со всеми возможными событиями. Вот надо в нем глянуть какое событие возникает.  
Иначе действительно придется по каждому чиху проверять имена листов.
Bite my shiny metal ass!      
 
Никакого не возникает. См. файл
 
Значит не судьба.
Bite my shiny metal ass!      
 
{quote}{login=Pavel55}{date=16.01.2009 01:31}{thema=}{post}Никакого не возникает. См. файл{/post}{/quote}  
 
Уменя rar не открывается, Pavel55 не будете ли вы любезны, сжать в zip!  
За раннее спасибо!
 
Да я приложу, но боюсь этот файл вам не поможет.    
Мне кажется надо использовать то, что подсказал Слэн.    
При каком-нибудь действии, например, при открытии файла, проверять кодовые имена  листов и сравнивать с обычными именами листов, если изменились, что переименовывать лист обратно на нужное имя. Кодовые имена листов можете посмотреть через Alt+F11, затем Ctrl+R, кодовое имя листа будет до скобок.  
 
Вот файл со всеми событиями.
 
да при всех событиях :) можно только не совсеми листами, а с активным или , если это в макросе, то тех листов, кот этот макрос касается
Живи и дай жить..
 
{quote}{login=Pavel55}{date=16.01.2009 03:22}{thema=}{post}Да я приложу, но боюсь этот файл вам не поможет.    
Мне кажется надо использовать то, что подсказал Слэн.    
При каком-нибудь действии, например, при открытии файла, проверять кодовые имена  листов и сравнивать с обычными именами листов, если изменились, что переименовывать лист обратно на нужное имя. Кодовые имена листов можете посмотреть через Alt+F11, затем Ctrl+R, кодовое имя листа будет до скобок.  
 
Вот файл со всеми событиями.{/post}{/quote}  
 
Дааа! в Вашем файле я долго не разберусь. Не могли бы Вы прописать в примере, как это проверить, сравнить и исправить, хотя бы для пару листов на событие -выделение какойнибудь ячейки, а я размножу!!!
 
См. файл
 
{quote}{login=Pavel55}{date=16.01.2009 05:50}{thema=}{post}См. файл{/post}{/quote}  
 
Спасибо, Pavel55, буду пробовать! И всем остальным спасибо за внимание. Всем доброго времени суток!
 
Вам остаётся лишь один раз как надо переименовать кодовые имена листов в редакторе VBE и всё, макрос всё остальное сделает за вас.
 
{quote}{login=Pavel55}{date=16.01.2009 06:45}{thema=}{post}Вам остаётся лишь один раз как надо переименовать кодовые имена листов в редакторе VBE и всё, макрос всё остальное сделает за вас.{/post}{/quote}  
.CodeName    
а я голову ломал как получить имя листа кодовое, в нем вся запарка и была.  
впятницу пример грохнул, который писал.    
1. при загружки книги все имна листов заношу в массив.  
2. Событие я ставил на потерю фокуса листа, что при потери фокуса листа проверяется его имя с кодовым именем в массиве и если не соответсвует то меняет назад.
 
правда в этом есть некоторые грабли - если будете открывать в другой локализации, то если не латиницей кодовые имена были прописаны, то они изменятся  
на локальные
Живи и дай жить..
 
Чтоб  с одной стороны не проверять всё, а с другой стороны, при попытке переименовать лист тут же мягко поравлять пользователя,  
можно  
 
1) вносим на лист формулу =ДВССЫЛ("'мойлист'!G8") //в k1  
2) в модуль листа  
Private Sub Worksheet_Calculate()  
If IsError(Range("K1").Value) Then Range("K1").Parent.Name = "мойлист"  
End Sub
 
{quote}{login=dl@kartoshka.ru}{date=20.01.2009 08:39}{thema=Если нет события надо его прицепить}{post}Чтоб  с одной стороны не проверять всё, а с другой стороны, при попытке переименовать лист тут же мягко поравлять пользователя,  
можно  
 
1) вносим на лист формулу =ДВССЫЛ("'мойлист'!G8") //в k1  
2) в модуль листа  
Private Sub Worksheet_Calculate()  
If IsError(Range("K1").Value) Then Range("K1").Parent.Name = "мойлист"  
End Sub{/post}{/quote}  
 
это ничем не отличается от предложенного выше, только там было бы:  
if sheets().name<>sheets().codename
 
кроме того, что формулу надо где-то поместить(а если ее поместить далеко за пределами основных данных, это может спутать применение таких средств как usedrange или lastcell) и защитить
Живи и дай жить..
 
Добрый день!  
Как макросом дать Кодовое имя определенному листу?  
Не могу найти синтаксис  
вроде ActiveSheet.CodeName="Лист20"
With my best regards,      Inter_E
 
Думаю, только руками. Т.к. свойство CodeName только для чтения (Read-only), а не для чтения и установки.
 
А никак. Read only property. Экс сам присваивает Codename.
Я сам - дурнее всякого примера! ...
 
Ну, что же вы так сразу "никак" - руками! Alt+F11, Ctrl+R и вперёд
 
М-да... Век живи...
Я сам - дурнее всякого примера! ...
 
Кстати, только что случайно набрёл, не проверял:  
 
http://www.msoffice.nm.ru/faq/macros/module.htm  
 
Несмотря на то, что свойство CodeName доступно только для чтения, программное имя рабочего листа можно изменять, если не забывать, что модуль входит в семейство VBComponents.    
   
iCodeName = ActiveSheet.CodeName    
 
Application.VBE.ActiveVBProject.VBComponents(iCodeName).Name = "CodeName" ' Вариант I.  
 
ActiveWorkbook.VBProject.VBComponents(iCodeName).Name = "CodeName" ' Вариант II.
 
Проверил Вариант1 - работает!
Страницы: 1
Читают тему
Наверх