Как в экселе отловить переименование листа? Есть комбобокс на форме в нем список листов книги. При добавлении листа событие NewSheet При удалении листа событие SgeetBeforeDelete
А как синхронизировать список в комбике, если лист переименовали?
Как в экселе отловить переименование листа? Есть комбобокс на форме в нем список листов книги. При добавлении листа событие NewSheet При удалении листа событие SgeetBeforeDelete
А как синхронизировать список в комбике, если лист переименовали?Alex
При удалении листа в событии SHeetBeforeDelete выставляю флаг, а на событии SheetActivate вызываю процедуру обновления комбика так же флаг выставляю в NewSheet а в процедуре после обновления комбика сбрасываю флаг. Это все работает, но как отследить смену имени листа???
При удалении листа в событии SHeetBeforeDelete выставляю флаг, а на событии SheetActivate вызываю процедуру обновления комбика так же флаг выставляю в NewSheet а в процедуре после обновления комбика сбрасываю флаг. Это все работает, но как отследить смену имени листа???Alex
Это точно! Я тоже это часто использую для защиты от шаловливых ручонок шибко дюже грамотных пользователей. По умолчанию листы в книге создаются с кодовым именем = имени листа. А после переименования листа кодовое имя остаётся прежним. Это хорошо видно в Object Browser'e VBA-проекта. Там сначала написано кодовое имя листа, а потом в скобочках - имя листа. Этим удобно управлять в Properties Window (F4): кодовое имя отображается в самой верхней строчке свойств листа в строке (Name), а имя листа - ближе к концу списка свойств в строке Name Я в некоторых случаях чтобы не путаться у важных листов даже намеренно изменяю кодовое имя на такое, чтобы его ни с чем не спутать.
Это точно! Я тоже это часто использую для защиты от шаловливых ручонок шибко дюже грамотных пользователей. По умолчанию листы в книге создаются с кодовым именем = имени листа. А после переименования листа кодовое имя остаётся прежним. Это хорошо видно в Object Browser'e VBA-проекта. Там сначала написано кодовое имя листа, а потом в скобочках - имя листа. Этим удобно управлять в Properties Window (F4): кодовое имя отображается в самой верхней строчке свойств листа в строке (Name), а имя листа - ближе к концу списка свойств в строке Name Я в некоторых случаях чтобы не путаться у важных листов даже намеренно изменяю кодовое имя на такое, чтобы его ни с чем не спутать.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Пятница, 17.01.2014, 22:18
Дата: Воскресенье, 19.01.2014, 12:16 |
Сообщение № 5
Группа: Гости
Нет,Про CodeName я в курсе и тут это немного не в тему) Мне необходимо отловить именно смену имени(название на ярлычке)листа Что бы в комбике были имена листов книги. На данный момент все работает, но только при смене имени листа в комбике остается старое имя и как-то не много не суразно, хотя все работает даже при выборе "несуществующего листа" в комбо.
Вопрос - Можно ли вообще поймать событие переименование листа?
Нет,Про CodeName я в курсе и тут это немного не в тему) Мне необходимо отловить именно смену имени(название на ярлычке)листа Что бы в комбике были имена листов книги. На данный момент все работает, но только при смене имени листа в комбике остается старое имя и как-то не много не суразно, хотя все работает даже при выборе "несуществующего листа" в комбо.
Вопрос - Можно ли вообще поймать событие переименование листа?Alex
Можно пробегаться циклом по листам и брать новое название переименованного листа
Или вообще - брать список имен листов с листа, на котором этот список сделать формулами. Формулы-то пересчитываются сразу после переименования Serge_007
Дата: Воскресенье, 19.01.2014, 12:46 |
Сообщение № 10
Группа: Гости
[vba]
Код
Sub UpdateList(Ind As Integer) If Not NeededUpdateList Then GoTo Ind FrmRep.cbRep.Clear For N = 3 To ThisWorkbook.Sheets.Count FrmRep.cbRep.AddItem pvargitem:=ThisWorkbook.Sheets(N).Name Next N NeededUpdateList = False Ind: If Ind < FrmRep.cbRep.ListCount Then FrmRep.cbRep.ListIndex = Ind End Sub
[/vba]
При удалении листа в событии SHeetBeforeDelete выставляю флаг, а на событии SheetActivate вызываю процедуру обновления комбика так же флаг выставляю в NewSheet а в процедуре после обновления комбика сбрасываю флаг.
[vba]
Код
Sub UpdateList(Ind As Integer) If Not NeededUpdateList Then GoTo Ind FrmRep.cbRep.Clear For N = 3 To ThisWorkbook.Sheets.Count FrmRep.cbRep.AddItem pvargitem:=ThisWorkbook.Sheets(N).Name Next N NeededUpdateList = False Ind: If Ind < FrmRep.cbRep.ListCount Then FrmRep.cbRep.ListIndex = Ind End Sub
[/vba]
При удалении листа в событии SHeetBeforeDelete выставляю флаг, а на событии SheetActivate вызываю процедуру обновления комбика так же флаг выставляю в NewSheet а в процедуре после обновления комбика сбрасываю флаг.Alex
Эксель как-то определяет переименование? А пользователю (VBA) не говорит
Excel и VB - это два разных программных продукта, реализованные разными разработчиками и изначально не связанные друг с другом. С появлением VBA связь появилась, но не 100%-я. Естественно, что средства самого Excel намного более применимы при работе с Excel, чем средства стороннего (хоть и адаптированного) продукта
В перспективе видится VSTO - полностью адаптированный к офису (не только к Excel) язык программирования
Эксель как-то определяет переименование? А пользователю (VBA) не говорит
Excel и VB - это два разных программных продукта, реализованные разными разработчиками и изначально не связанные друг с другом. С появлением VBA связь появилась, но не 100%-я. Естественно, что средства самого Excel намного более применимы при работе с Excel, чем средства стороннего (хоть и адаптированного) продукта
В перспективе видится VSTO - полностью адаптированный к офису (не только к Excel) язык программированияSerge_007
Но ведь форма-то и так по умолчанию в модальном режиме открывается и пока она открыта никто листы переименовать не может. Значит топик-стартеру нужно либо не модальный режим, либо комбобокс не на форме, а прямо на листе... Иначе чего тогда было бы мудрить?
Но ведь форма-то и так по умолчанию в модальном режиме открывается и пока она открыта никто листы переименовать не может. Значит топик-стартеру нужно либо не модальный режим, либо комбобокс не на форме, а прямо на листе... Иначе чего тогда было бы мудрить?Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Воскресенье, 19.01.2014, 19:19