В Excel вы можете изменить имя листа, быстро и легко дважды щелкнув имя вкладки, но иногда вы не позволяете другим изменять имя листа. В этом случае, как вы можете предотвратить изменение имени листа в книге?
Предотвратить изменение имени листа, защитив книгу
Запретить изменение имени листа с помощью кода VBA
Предотвратить изменение имени листа, защитив книгу
Если вы примените Защитить книгу функции, все имена листов не будут изменены, пожалуйста, сделайте следующее:
1. Нажмите Обзор > Защитить книгу, см. снимок экрана:
2. В Защитить структуру и окна диалоговом окне введите пароль, установите флажок Структура под Защитить книгу для, а затем еще раз подтвердите пароль, см. снимок экрана:
3. Затем нажмите OK Теперь, когда вы дважды щелкните, чтобы изменить имя листа, появится предупреждающее сообщение, чтобы напомнить вам, что имя листа не может быть изменено, см. снимок экрана:
Внимание: С помощью этой функции, кроме изменения имени листа, другие функции, такие как вставка листа, удаление листа, скрытие листа … также отключены.
Запретить изменение имени листа с помощью кода VBA
Вот код VBA, который также может помочь вам предотвратить изменение определенного имени листа. Пожалуйста, сделайте так:
1. Щелкните правой кнопкой мыши вкладку листа, которую вы хотите защитить, имя листа не должно быть изменено, а затем выберите Просмотреть код из контекстного меню во всплывающем Microsoft Visual Basic для приложений окна, скопируйте и вставьте следующий код в пустое Модули:
Код VBA: запретить изменение имени листа:
Private Sub worksheet_SelectionChange(ByVal Target As Excel.Range)
'Updateby Extendoffice
If ActiveSheet.Name <> "Master" Then
ActiveSheet.Name = "Master"
End If
End Sub
Внимание: В приведенном выше коде Master — это имя листа, который вы хотите защитить от изменения.
2. Затем сохраните и закройте код, с этого момента, когда вы переименуете это конкретное имя листа, оно будет сразу восстановлено до исходного. Смотрите скриншот:
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (3)
Оценок пока нет. Оцените первым!
r_kot Пользователь Сообщений: 139 |
Доброго всем времени суток, подскажите пожалуйста, как запретить изменение названий листов в книге, не защищая книгу. Листы в книге защищены, в VBA виден пароль. |
Что-то rar не открывается попробую в zipe прикрепить |
|
слэн Пользователь Сообщений: 5192 |
предлагаю изменить и кодовые имена листов(приравнять их пользовательским) |
ytk5kyky Пользователь Сообщений: 2410 |
Я что-то не нашел события на переименование листа. |
New Пользователь Сообщений: 4582 |
Никакого не возникает. См. файл |
ytk5kyky Пользователь Сообщений: 2410 |
|
r_kot Пользователь Сообщений: 139 |
{quote}{login=Pavel55}{date=16.01.2009 01:31}{thema=}{post}Никакого не возникает. См. файл{/post}{/quote} Уменя rar не открывается, Pavel55 не будете ли вы любезны, сжать в zip! |
New Пользователь Сообщений: 4582 |
Да я приложу, но боюсь этот файл вам не поможет. Вот файл со всеми событиями. |
слэн Пользователь Сообщений: 5192 |
да при всех событиях |
r_kot Пользователь Сообщений: 139 |
{quote}{login=Pavel55}{date=16.01.2009 03:22}{thema=}{post}Да я приложу, но боюсь этот файл вам не поможет. Вот файл со всеми событиями.{/post}{/quote} Дааа! в Вашем файле я долго не разберусь. Не могли бы Вы прописать в примере, как это проверить, сравнить и исправить, хотя бы для пару листов на событие -выделение какойнибудь ячейки, а я размножу!!! |
New Пользователь Сообщений: 4582 |
|
r_kot Пользователь Сообщений: 139 |
{quote}{login=Pavel55}{date=16.01.2009 05:50}{thema=}{post}См. файл{/post}{/quote} Спасибо, Pavel55, буду пробовать! И всем остальным спасибо за внимание. Всем доброго времени суток! |
New Пользователь Сообщений: 4582 |
Вам остаётся лишь один раз как надо переименовать кодовые имена листов в редакторе VBE и всё, макрос всё остальное сделает за вас. |
Marchuk Пользователь Сообщений: 1167 |
{quote}{login=Pavel55}{date=16.01.2009 06:45}{thema=}{post}Вам остаётся лишь один раз как надо переименовать кодовые имена листов в редакторе VBE и всё, макрос всё остальное сделает за вас.{/post}{/quote} |
слэн Пользователь Сообщений: 5192 |
правда в этом есть некоторые грабли — если будете открывать в другой локализации, то если не латиницей кодовые имена были прописаны, то они изменятся |
Чтоб с одной стороны не проверять всё, а с другой стороны, при попытке переименовать лист тут же мягко поравлять пользователя, 1) вносим на лист формулу =ДВССЫЛ(«‘мойлист’!G8») //в k1 |
|
{quote}{login=dl@kartoshka.ru}{date=20.01.2009 08:39}{thema=Если нет события надо его прицепить}{post}Чтоб с одной стороны не проверять всё, а с другой стороны, при попытке переименовать лист тут же мягко поравлять пользователя, 1) вносим на лист формулу =ДВССЫЛ(«‘мойлист’!G8») //в k1 это ничем не отличается от предложенного выше, только там было бы: |
|
слэн Пользователь Сообщений: 5192 |
кроме того, что формулу надо где-то поместить(а если ее поместить далеко за пределами основных данных, это может спутать применение таких средств как usedrange или lastcell) и защитить |
Inter_E Пользователь Сообщений: 399 |
Добрый день! With my best regards, Inter_E |
Думаю, только руками. Т.к. свойство CodeName только для чтения (Read-only), а не для чтения и установки. |
|
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
А никак. Read only property. Экс сам присваивает Codename. Я сам — дурнее всякого примера! … |
Ну, что же вы так сразу «никак» — руками! Alt+F11, Ctrl+R и вперёд |
|
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
М-да… Век живи… Я сам — дурнее всякого примера! … |
Hugo Пользователь Сообщений: 23253 |
Кстати, только что случайно набрёл, не проверял: 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. |
Hugo Пользователь Сообщений: 23253 |
#25 30.08.2010 16:36:47 Проверил Вариант1 — работает! |
I need to protect the sheet name by preventing
- any change to the sheet name, or
- the sheet being deleted.
This must be done without protecting the entire sheet using the Protect Sheet
or Protect Workbook
options.
Is there any way to do this with VBA?
asked Dec 15, 2011 at 11:55
2
- Right click the sheet tab that you wish to protect
- View Code
- Copy and paste in the code below
This code disables the delete control on the sheet (but not right click on cell) menu when the sheet is activated. The control is enabled when the sheet is de-activated
The code will also name the sheet «NameOfSheet» when the sheet is de-activated. This is a workaround to prevent the sheet being renamed
Private Sub Worksheet_Activate()
Application.CommandBars.FindControl(ID:=847).Enabled = False
End Sub
Private Sub Worksheet_Deactivate()
Application.CommandBars.FindControl(ID:=847).Enabled = True
Me.Name = "NameOfSheet"
End Sub
answered Dec 25, 2011 at 1:14
brettdjbrettdj
54.6k16 gold badges113 silver badges176 bronze badges
1
I don’t think you can. What you can do, you can make a worksheet a very hidden one (accessible only from VBA) and in case of the deleted sheet, you can copy it and make a copy visible.
answered Dec 15, 2011 at 17:28
JuliuszJuliusz
2,0972 gold badges27 silver badges32 bronze badges
Would this approach work?
- Select all cells in the sheet, then UN-lock all cells with «Lock
Cells» (yellow background of padlock turns white). - Write the name of the sheet in a (fixed or named) cell, then lock
this cell ONLY («Lock Cells», padlock background turns yellow). -
Then Protect workbook, but allow every action, except the first one
«Select Locked Cells».The user can do everything except selecting the cell with the sheetname (and delete rows/columns).
-
Now write a VBA to compare the actual sheetname with the data in the protected named cell (or fixed reference e.g. A1).
- Run this script either on every change (probably too much) or at least on close of
the workbook. - As long as the sheetname is always in the same cell (e.g. A1), you can then loop through all sheets, compare their name with the data in cell A1 and correct the sheet name if required.
brettdj
54.6k16 gold badges113 silver badges176 bronze badges
answered Dec 15, 2011 at 19:27
Robert IlbrinkRobert Ilbrink
7,6982 gold badges22 silver badges31 bronze badges
1
запрет переименования листов |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Есть ли способ запретить пользователям Excel изменять имя листа и порядок листа, сохраняя имя файла как .xls или .xlsx вместо того, чтобы менять его на .xlsm?
Пожалуйста, порекомендуйте.
Как указано в моем комментарии, вы можете защитить книгу для достижения этой цели.
Затем вы можете защитить рабочую книгу паролем, чтобы полностью предотвратить изменения, или оставить пароль пустым, чтобы просто «напомнить» пользователям об ограничении.
В появившемся диалоговом окне установите флажок структуры .
изменён Pieter Geerkens127
ответ дан Pieter Geerkens127
0 / 0 / 0 Регистрация: 10.04.2011 Сообщений: 18 |
|
1 |
|
Как запретить переименование, перемещение и удаление листа(ов) книги01.08.2011, 00:42. Показов 7781. Ответов 2
Как запретить переименование, перемещение и удаление листа(ов) книги
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
01.08.2011, 00:42 |
Ответы с готовыми решениями: Visual Basic + Excel — удаление листа из книги Удаление листа из книги без сообщения о безвозвратности данного действия Как запретить удаление и переименование файла на севрере, и как объединить 2 жестких диска в один? 1) один жеский диск почти полон, а второй пустой, чем можно объединить или…
2 |
Сумрак |
|
05.08.2011, 16:56 |
2 |
dim WS as WorkSeet |
0 / 0 / 0 Регистрация: 10.04.2011 Сообщений: 18 |
|
07.08.2011, 13:17 [ТС] |
3 |
Большое спасибо!
0 |
Дважды щелкните вкладку листа Excel, чтобы изменить имя. Если формулы в других книгах используют внешние ссылки на этот лист, то после изменения имени листа эти внешние ссылки станут недействительными. Используйте имя листа для ссылки на объект в коде VBA Это тоже пойдет не так. Использование кодов событий объекта VBA может предотвратить изменение имени листа Excel в определенной степени.
Предполагая, что имя рабочего листа в файле примера — «DEMO», добавьте следующие коды событий в модуль рабочего листа.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Me.Name <> "DEMO" Then Me.Name = "DEMO"
End Sub
Private Sub Worksheet_Deactivate()
If Me.Name <> "DEMO" Then Me.Name = "DEMO"
End Sub
[Анализ кода]
Код в строках 1–3 — это рабочий листSelectionChange
Код события: когда пользователь выбирает ячейку или область на листе, это событие активируется для выполнения соответствующего кода.
Вторая строка кода определяет, было ли изменено имя рабочего листа. Если оно было изменено, оно автоматически вернется к «DEMO».Me
Используется для ссылки на объект, в котором расположен модуль кода, вот рабочий лист с именем «DEMO».
Если пользователь изменяет имя рабочего листа и напрямую переключает рабочий лист, он не будет активированSelectionChange
Событие, для этого сценария вам необходимоDeactivate
Тот же код добавляется к событию для восстановления имени рабочего листа.
Решит ли эту проблему использование двух событий рабочего листа? На самом деле это не так. Если пользователь напрямую сохраняет и закрывает файл книги после изменения имени листа, имя листа больше не должно быть «ДЕМО». Чтобы справиться с этим сценарием, вам нужно использовать код события книги.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If shtDEMO.Name <> "DEMO" Then
shtDEMO.Name = "DEMO"
ThisWorkbook.Save
End If
End Sub
[Анализ кода]
Код события книги сохраняется вThisWorkbook
В модуле его нельзя использовать напрямую, как два вышеуказанных кода событий рабочего листа.Me.Name
Получите имя рабочего листа. Здесь вы можете использовать рабочий листCodeName
В качестве идентификации объекта рабочего листа в этом примере рабочий лист с именем «DEMO»CodeName
дляshtDEMO
,Как показано ниже.
Третья строка кода восстанавливает имя рабочего листа.
Четвертая строка кода сохраняет файл.
Метод, описанный в этой статье, только «в основном» предотвращает изменение имени листа Excel и не гарантирует всех сценариев. Если вы хотите полностью реализовать запрет на переименование рабочего листа, вам следует использовать функцию «Защитить книгу». Функция переименования рабочего листа отключена, но следует отметить, что некоторые другие операции, связанные с рабочим листом, также отключены, как показано на рисунке ниже.
Как запретить пользователям переименовывать имя листа
Есть ли API для этого? Я не могу найти API, но это действительно важная функция для меня, поэтому хочу сделать подтверждение.
ht tps://s tackru.com/images/d3fb215045f466a2a285785f54cbe5e65a81d19c.png
листы могут быть переименованы после установки защиты
Версия Excel: 16.16.4
MacOs: 10.13.6
0
excel
macos
office-js
Источник
user4004884
03 дек ’18 в 09:53
2018-12-03 09:53
2018-12-03 09:53
1
ответ
Этот код предотвращает переименование любого из листов:
await Excel.run(async (context) => {
const workbook = context.workbook;
workbook.protection.protect("myPassword");
await context.sync();
});
1
Источник
user6190031
05 дек ’18 в 00:51
2018-12-05 00:51
2018-12-05 00:51
Другие вопросы по тегам
excel
macos
office-js