При изменении названия листа в excel

Отловить переименование листа

Alex

Дата: Пятница, 17.01.2014, 16:30 |
Сообщение № 1

Как в экселе отловить переименование листа?
Есть комбобокс на форме в нем список листов книги.
При добавлении листа событие NewSheet
При удалении листа событие SgeetBeforeDelete

А как синхронизировать список в комбике, если лист переименовали?

 

Ответить

Alex

Дата: Пятница, 17.01.2014, 17:35 |
Сообщение № 2

При удалении листа в событии SHeetBeforeDelete выставляю флаг, а на событии SheetActivate вызываю процедуру обновления комбика
так же флаг выставляю в NewSheet
а в процедуре после обновления комбика сбрасываю флаг.
Это все работает, но как отследить смену имени листа???

 

Ответить

SkyPro

Дата: Пятница, 17.01.2014, 17:40 |
Сообщение № 3

Группа: Друзья

Ранг: Старожил

Сообщений: 1206


Репутация:

255

±

Замечаний:
0% ±


2010

Обращайтесь к листу по CodeName
[vba]

Код

sheets(1).codename
Лист1.[A1].address(1,1,1,1)

[/vba]
Тогда переименование листов не «испортит» вам макросы.


skypro1111@gmail.com

Сообщение отредактировал SkyProПятница, 17.01.2014, 17:40

 

Ответить

Alex_ST

Дата: Пятница, 17.01.2014, 22:17 |
Сообщение № 4

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Обращайтесь к листу по CodeName

Это точно!
Я тоже это часто использую для защиты от шаловливых ручонок шибко дюже грамотных пользователей.
По умолчанию листы в книге создаются с кодовым именем = имени листа. А после переименования листа кодовое имя остаётся прежним. Это хорошо видно в Object Browser’e VBA-проекта. Там сначала написано кодовое имя листа, а потом в скобочках — имя листа.
Этим удобно управлять в Properties Window (F4): кодовое имя отображается в самой верхней строчке свойств листа в строке (Name), а имя листа — ближе к концу списка свойств в строке Name
Я в некоторых случаях чтобы не путаться у важных листов даже намеренно изменяю кодовое имя на такое, чтобы его ни с чем не спутать.



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STПятница, 17.01.2014, 22:18

 

Ответить

Alex

Дата: Воскресенье, 19.01.2014, 12:16 |
Сообщение № 5

Нет,Про CodeName я в курсе и тут это немного не в тему)
Мне необходимо отловить именно смену имени(название на ярлычке)листа
Что бы в комбике были имена листов книги.
На данный момент все работает, но только при смене имени листа в комбике остается старое имя и как-то не много не суразно, хотя все работает даже при выборе «несуществующего листа» в комбо.

Вопрос — Можно ли вообще поймать событие переименование листа?

 

Ответить

Serge_007

Дата: Воскресенье, 19.01.2014, 12:18 |
Сообщение № 6

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Такого события не существует в эксель


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

nilem

Дата: Воскресенье, 19.01.2014, 12:21 |
Сообщение № 7

Группа: Авторы

Ранг: Старожил

Сообщений: 1612


Репутация:

563

±

Замечаний:
0% ±


Excel 2013, 2016

Есть комбобокс на форме в нем список листов книги.

а комбобокс у вас как заполняется?


Яндекс.Деньги 4100159601573

 

Ответить

Alex

Дата: Воскресенье, 19.01.2014, 12:35 |
Сообщение № 8

Цитата nilem

а комбобокс у вас как заполняется?

Forma.Combo.AddItem

Цитата Serge_007

Такого события не существует в эксель

Жаль :(
Ясно, дело — труба

 

Ответить

Serge_007

Дата: Воскресенье, 19.01.2014, 12:45 |
Сообщение № 9

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Не всё так печально :)

Можно пробегаться циклом по листам и брать новое название переименованного листа

Или вообще — брать список имен листов с листа, на котором этот список сделать формулами. Формулы-то пересчитываются сразу после переименования :)


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

Alex

Дата: Воскресенье, 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
а в процедуре после обновления комбика сбрасываю флаг.

 

Ответить

Alex

Дата: Воскресенье, 19.01.2014, 12:52 |
Сообщение № 11

[quote=Serge_007]Можно при выполнении AddItem пробегаться циклом по листам и брать новое название переименованного листа[/quote]

Комбо вновь синхронизируется, после смены имени листа, если удалить или добавить новый лист.

Но хотелось бы еще и на момент переименования, ну т.е. сразу после переименования :)

 

Ответить

Alex

Дата: Воскресенье, 19.01.2014, 12:56 |
Сообщение № 12

[quote=Serge_007]Формулы-то пересчитываются сразу после переименования[/quote]

Т.е. Эксель как-то определяет переименование? А пользователю (VBA) не говорит. Засада)

Ладно, это обидно, но не критично.

А по поводу формул и списка листов на отдельном листе — подумаю, но врядли.

 

Ответить

Serge_007

Дата: Воскресенье, 19.01.2014, 13:05 |
Сообщение № 13

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Эксель как-то определяет переименование? А пользователю (VBA) не говорит

Excel и VB — это два разных программных продукта, реализованные разными разработчиками и изначально не связанные друг с другом. С появлением VBA связь появилась, но не 100%-я. Естественно, что средства самого Excel намного более применимы при работе с Excel, чем средства стороннего (хоть и адаптированного) продукта :)

В перспективе видится VSTO — полностью адаптированный к офису (не только к Excel) язык программирования


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

RAN

Дата: Воскресенье, 19.01.2014, 13:23 |
Сообщение № 14

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Сколько ни читал, так и не понял смысла всего этого геморроя.
Чем не нравится
[vba]

Код

Private Sub UserForm_Activate()

[/vba] ?


Быть или не быть, вот в чем загвоздка!

 

Ответить

Serge_007

Дата: Воскресенье, 19.01.2014, 13:25 |
Сообщение № 15

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

Если переименование листа произошло ПОСЛЕ активации формы?


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

RAN

Дата: Воскресенье, 19.01.2014, 14:42 |
Сообщение № 16

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

.

К сообщению приложен файл:

6412516.xls
(54.5 Kb)


Быть или не быть, вот в чем загвоздка!

 

Ответить

Serge_007

Дата: Воскресенье, 19.01.2014, 14:54 |
Сообщение № 17

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

:)

Опять-таки, события переименования листа не существует :)
Только костыли :)


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

alex77755

Дата: Воскресенье, 19.01.2014, 19:13 |
Сообщение № 18

Группа: Проверенные

Ранг: Обитатель

Сообщений: 362


Репутация:

64

±

Замечаний:
0% ±


[vba][/vba]
И никто не переименует лист пока форма открыта


Могу помочь в VB6, VBA
Alex77755@mail.ru

 

Ответить

Alex_ST

Дата: Воскресенье, 19.01.2014, 19:17 |
Сообщение № 19

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003


Но ведь форма-то и так по умолчанию в модальном режиме открывается и пока она открыта никто листы переименовать не может.
Значит топик-стартеру нужно либо не модальный режим, либо комбобокс не на форме, а прямо на листе…
Иначе чего тогда было бы мудрить?



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STВоскресенье, 19.01.2014, 19:19

 

Ответить

RAN

Дата: Воскресенье, 19.01.2014, 19:27 |
Сообщение № 20

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Дык я специально для Сержа не модальную сделал! Так сказать, по максимуму гемора. :D


Быть или не быть, вот в чем загвоздка!

 

Ответить

Excel для Microsoft 365 Excel 2021 Excel 2019 Excel 2016 Excel 2013 Excel 2010 Excel 2007 Еще…Меньше

По умолчанию в Excel листам присваиваются названия «Лист1», «Лист2», «Лист3» и т. д., но их можно легко переименовать.

Изображение ярлычков листа Excel

Три способа переименования листа

  1. Дважды щелкните ярлычок листа и введите новое имя.

  2. Щелкните ярлычок листа правой кнопкой мыши, выберите команду Переименовать и введите новое имя.

  3. Нажмите клавиши ALT+H, O, R и введите новое имя.

Важно: 
Имена листов не могут:

  • Пустое место .

  • Содержать более 31 знака.

  • Содержать следующие символы: / ? * : [ ]

    Например, 02/17/2016 нельзя использовать в качестве имени листа, а 02-17-2016 — можно.

  • Начинаться или заканчиваться апострофом (‘), при этом апострофы использоваться между символами.

  • Называться «History». Это зарезервированное слово, которое Excel использует для внутренних целей.

Переименование книги

Если вы хотите переименовать книгу, найдите ее в проводнике, нажмите клавишу F2 или щелкните ее правой кнопкой мыши и выберите «Переименовать», а затем введите новое имя.

Если книга уже открыта, щелкните Файл > Сохранить как, чтобы сохранить ее под другим именем. При этом будет создана копия существующей книги.

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

См. также

Вставка и удаление листов

Видео: перемещение и копирование листов

Краткое руководство: печать листа

Группировка листов

Защита листа

Нужна дополнительная помощь?

How do I make it so my macro will work on a spreadsheet even if someone changes the name of the tab for Sheet1, Sheet2, etc.

For example this snippet from my code:

Set MyWorkbook = Workbooks.Open(DataDialog.SelectedItems(Counter))
Set MySheet = MyWorkbook.Worksheets("Sheet1")

Gets the Run-time error ‘9’:

Subscript out of range

The issue is I need this macro to able to be used on multiple different workbooks with different named tabs and in a lot of cases tabs will be hidden and what appears to be Sheet1 is really Sheet3.
Is there a way to have a macro work on the active sheet alone?

Community's user avatar

asked Oct 23, 2014 at 14:28

excelSU's user avatar

2

Yes, You dont have to hardcode «Sheet1». Instead you can do like following:

Method 1:
Declare variable

Dim sName as string
sName = Activesheet.Name

And then you can use name in the variable sName instead of hardcoding it.

Method 2:
You can use index of sheets

sName = Sheets(1).Name

Where 1 indicates index number of sheets in workbook.

So, You can use any of the above two methods to get name of sheet when sheet name changes.

answered Oct 23, 2014 at 14:51

Paresh J's user avatar

Paresh JParesh J

2,3933 gold badges24 silver badges31 bronze badges

2

Здравствуйте! Мне нужно чтобы лист сам автоматически переименовывался в название из ячейки. Например на листе1 есть ячейка A1. Там, в ячейке забито слово Колобок. Нужно чтобы лист1 сам переименовывался в название Колобок.


Через кнопку наверное так:
Sub Кнопка1_Щелкнуть()
    NewIm = Range(«A1»)
    Sheets(«Лист1»).Name = NewIm
End Sub

Может и я на что сгожусь … Если сгодился, можете меня по+благодарить+.


Wasilic спасибо, но как же автоматом сделать? ???


Цитата: ActionFace от 05.01.2010, 17:32
Wasilic спасибо, но как же автоматом сделать? ???

Что значит «АВТОМАТОМ»? Если не по нажатию кнопки, то при каких условиях? При включении комьютера или открытия книги? Или ….???
Может я и не смогу ответить.

Может и я на что сгожусь … Если сгодился, можете меня по+благодарить+.


Wasilic , впринципе и так хорошо! Спасибо! Но можно еще вопрос? У меня есть и второй лист который должен переименовываться :) Можно написать код для двух листов в пределах одного макроса? У листа2 есть свой A1 и там название предположим пчелка.


Sub Кнопка1_Щелкнуть()
    NewIm = Range(«A1»)
    Sheets(«Лист1»).Name = NewIm
    NewIm = Sheets(«Лист2»).Range(«A1»)
    Sheets(«Лист2»).Name = NewIm
End Sub

Не  понимаю смысла этой автоматизации. 
Если это одноразовая процедура, то почему не ручками — нажав правую кнопку на имени листа.
Но, если и новое имя листа будет переименовываться, то этот макрос не подойдет.

В общем то, это в тему о макросах VBA.
Внизу под сообщением есть выбор тем:
Выбери «Проекты VBA»
А много  разных ответов поищи здесь.
http://msoffice.nm.ru/faq/macros.htm

Может и я на что сгожусь … Если сгодился, можете меня по+благодарить+.


Если автоматически, то может быть так?
Меняйте ячейки А1 в разных  листах

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


_Boroda_ Круто! :D Спасибо! Но как вы это сделали? Я не вижу ни формулы, ни макроса в присланном файле. Можете написать пошаговую инструкцию? :'(


Нужно два раза кликнуть мышой по «Эта книга» в VBA. Там макрос и сидит.

Сам макрос:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address = "$A$1" Then
On Error Resume Next
Sh.Name = Sh.Range("a1")
If Not Err.Number = 0 Then MsgBox "Лист " & Sh.Name & " нельзя переименовать в " _
& Sh.Range("a1") & "," & Chr(10) & "лист " & Sh.Range("a1") & " уже есть в этой книге."
On Error GoTo 0
End If
End Sub

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


_Boroda_ Спасибо Большое все заработало! Не сочтите за наглость, а можно вас еще кое о чем спросить? Проблема такая. Мне нужно с экспортить с листа1 данные в текстовом файле с разделителем табуляции(.txt) Но вот незадача. В моих данных имеются точка с запятой ; . И при создании txt в экспортируемом тексте у меня появляются кавычки » ! Кавычки мне не нужны! Как можно от них избавиться? Я конечно могу не экспортировать, а просто скопировать и вставить, но проблема в том что у меня данные в разных ячейках и при копировании txt понимает что это разные ячейки и ставит между ними невидимую палку |. Как от нее можно избавиться?


Мне это нужно для одной управляющей програмки, которая кушает только txt.
1.Вообщем я на листе1 в ячейке A1 пишу допустим Kolobok.
2.Потом там же в A1 дописываю точку с запятой(;). 
3.Далее в ячейке B1 пишу цифру 1.
4.Затем в ячейке C1 пишу точку с запятой(;). 
5.Потом делаю экспорт в формате txt с раздел табуляции.
6.В файле txt должно получиться: Kolobok;1;
Но этот Excel делает между словом Kolobok и знаком ; невидимый промежуток в виде знака | и самое страшное, между знаком ; excel пишет кавычки!
То есть TXT файл получается: «Kolobok;»   1   «;»
Приложил пример.


Если я правильно понял, необходимо сохранить значения из ячеек разделив их знаком точка с запятой «;». Попробуйте сохранить в формате *.csv. У меня на 2003 как раз такой результат получается. Формат .csv можно просто переименовать в .txt или же напрямую открыть текстовым редактором.


Еще один вариант автонаименования листа по ячейке. Используются свойства листа:

1. В случае изменения ячейки вручную на активном листе
Private Sub Worksheet_Change(ByVal Target As Range)
    Me.Name = Me.Cells(1, 1)
End Sub

2. В случае измениния ячейки в неактивном листе посредством формулы-ссылки (в приложении третий лист)
Private Sub Worksheet_Calculate()
    Me.Name = Me.Cells(1, 1)
End Sub


Цитата: ActionFace от 13.01.2010, 23:46
Мне это нужно для одной управляющей програмки, которая кушает только txt.
1.Вообщем я на листе1 в ячейке A1 пишу допустим Kolobok.
2.Потом там же в A1 дописываю точку с запятой(;).  
3.Далее в ячейке B1 пишу цифру 1.
4.Затем в ячейке C1 пишу точку с запятой(;).  
5.Потом делаю экспорт в формате txt с раздел табуляции.

Извратиться, как написал boroda, наверное можно через дополнительный лист  формулой  «=Лист1!A1 & Лист1!B1 & Лист1!C1»  

Может и я на что сгожусь … Если сгодился, можете меня по+благодарить+.


Цитата: ActionFace от 13.01.2010, 23:46
Мне это нужно для одной управляющей програмки, которая кушает только txt.
1.Вообщем я на листе1 в ячейке A1 пишу допустим Kolobok.
2.Потом там же в A1 дописываю точку с запятой(;). 
3.Далее в ячейке B1 пишу цифру 1.
4.Затем в ячейке C1 пишу точку с запятой(;). 
5.Потом делаю экспорт в формате txt с раздел табуляции.
6.В файле txt должно получиться: Kolobok;1;

Посмотри файлик. Выкрутишся наверняка.

Может и я на что сгожусь … Если сгодился, можете меня по+благодарить+.


Содержание

  • Процесс переименования
    • Способ 1: контекстное меню ярлыка
    • Способ 2: двойной щелчок по ярлыку
    • Способ 3: кнопка на ленте
    • Способ 4: использование надстроек и макросов
  • Вопросы и ответы

Лист в Microsoft Excel

Как известно, программа Excel предоставляет возможность пользователю работать в одном документе сразу на нескольких листах. Название каждому новому элементу приложение присваивает автоматически: «Лист 1», «Лист 2» и т.д. Это не просто слишком сухо, с чем ещё можно смириться, работая с документацией, но еще и малоинформативно. Пользователь по одному наименованию не сможет определить, какие данные размещены в конкретном вложении. Поэтому актуальным становится вопрос переименования листов. Давайте разберемся, как это делается в Экселе.

Процесс переименования

Процедура переименования листов в Экселе в целом интуитивно понятна. Тем не менее, у некоторых пользователей, которые только начинают освоение программы, возникают определенные трудности.

Прежде, чем перейти непосредственно к описанию способов переименования, выясним, какие названия давать можно, а присвоение каких будет некорректным. Имя может быть присвоено на любом языке. При его написании можно использовать пробелы. Что же касается основных ограничений, то следует выделить следующие:

  • В наименовании не должны присутствовать такие символы: «?», «/», «», «:», «*», «[]»;
  • Название не может быть пустым;
  • Общая длина наименования не должна превышать 31 знак.

При составлении имени листа нужно учитывать вышеуказанные правила. В обратном случае программа не даст завершить данную процедуру.

Способ 1: контекстное меню ярлыка

Наиболее интуитивно понятный способ переименования – это воспользоваться возможностями, которые предоставляет контекстное меню ярлыков листов, расположенных в левой нижней части окна приложения сразу над строкой состояния.

  1. Кликаем правой кнопкой по ярлыку, над которым хотим произвести манипуляцию. В контекстном меню выбираем пункт «Переименовать».
  2. Переход к переименованию листа в Microsoft Excel

  3. Как видим, после этого действия поле с названием ярлыка стало активным. Просто набираем туда с клавиатуры любое подходящее по контексту наименование.
  4. Поле свтало активным в Microsoft Excel

  5. Жмем на клавишу Enter. После этого листу будет присвоено новое имя.

Лист переименован в Microsoft Excel

Способ 2: двойной щелчок по ярлыку

Существует и более простой способ переименования. Нужно просто кликнуть двойным щелчком по нужному ярлыку, правда, в отличие от предыдущего варианта, не правой кнопкой мыши, а левой. При использовании данного способа никакого меню вызывать не нужно. Наименование ярлыка станет активным и готовым к переименованию. Вам останется только набрать нужное название с клавиатуры.

Ярлык готов к переименованию в Microsoft Excel

Способ 3: кнопка на ленте

Переименование можно также совершить с помощью специальной кнопки на ленте.

  1. Кликнув по ярлыку, переходим на лист, который нужно переименовать. Перемещаемся во вкладку «Главная». Жмем на кнопку «Формат», которая размещена на ленте в блоке инструментов «Ячейка». Открывается список. В нём в группе параметров «Упорядочить листы» нужно кликнуть по пункту «Переименовать лист».
  2. Переход к переименованию листа через ленту в Microsoft Excel

  3. После этого наименование на ярлыке текущего листа, как и при использовании предыдущих способов, становится активным. Достаточно изменить его на нужное пользователю название.

Данный способ является не столь интуитивно понятным и простым, как предыдущие. Тем не менее, его тоже используют некоторые пользователи.

Способ 4: использование надстроек и макросов

Кроме того, существуют специальные настройки и макросы, написанные для Эксель сторонними разработчиками. Они позволяют производить массовое переименование листов, а не делать это с каждым ярлыком вручную.

Lumpics.ru

Нюансы работы с различными настройками данного типа отличаются в зависимости от конкретного разработчика, но принцип действий один и тот же.

  1. Нужно в таблице Excel составить два списка: в одном перечень старых названий листов, а во втором – список наименований на которые вы хотите их заменить.
  2. Два списка в Microsoft Excel

  3. Запускаем надстройки или макрос. Вводим в отдельное поле окна надстройки координаты диапазона ячеек со старыми наименованиями, а в другое поле – с новыми. Жмем на кнопку, которая активирует переименование.
  4. Запуск группового переименования в Microsoft Excel

  5. После этого, произойдет групповое переименование листов.

Результаты группового переименования в Microsoft Excel

При наличии большего количества элементов, нуждающихся в переименовании, использование данного варианта будет способствовать значительной экономии времени пользователя.

Внимание! Перед установкой макросов и расширений сторонних разработчиков убедитесь, что они загружены из проверенного источника и не содержат вредоносных элементов. Ведь они могут послужить причиной заражения системы вирусами.

Как видим, переименовать листы в программе Excel можно с помощью нескольких вариантов действий. Одни из них интуитивно понятны (контекстное меню ярлыков), другие – несколько более сложные, но тоже не содержат особенных проблем в освоении. Последнее, в первую очередь, относится к переименованию с помощью кнопки «Формат» на ленте. Кроме того, для массового переименования можно также применять макросы и надстройки сторонних разработчиков.

Еще статьи по данной теме:

Помогла ли Вам статья?

Понравилась статья? Поделить с друзьями:
  • При изменении значения в ячейке excel
  • При запуске excel автоматически открывается
  • При изменении данных в каких либо ячейках ms excel происходит пересчета
  • При запуске excel 2010 начинается установка
  • При изменении данных в ms excel формулы