Как запретить переименование листа в excel

В Excel вы можете изменить имя листа, быстро и легко дважды щелкнув имя вкладки, но иногда вы не позволяете другим изменять имя листа. В этом случае, как вы можете предотвратить изменение имени листа в книге?

Предотвратить изменение имени листа, защитив книгу

Запретить изменение имени листа с помощью кода VBA


стрелка синий правый пузырь Предотвратить изменение имени листа, защитив книгу

Если вы примените Защитить книгу функции, все имена листов не будут изменены, пожалуйста, сделайте следующее:

1. Нажмите Обзор > Защитить книгу, см. снимок экрана:

документ запретить изменение имени листа 1

2. В Защитить структуру и окна диалоговом окне введите пароль, установите флажок Структура под Защитить книгу для, а затем еще раз подтвердите пароль, см. снимок экрана:

документ запретить изменение имени листа 2

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

документ запретить изменение имени листа 3

Внимание: С помощью этой функции, кроме изменения имени листа, другие функции, такие как вставка листа, удаление листа, скрытие листа … также отключены.

документ запретить изменение имени листа 4


стрелка синий правый пузырь Запретить изменение имени листа с помощью кода 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

документ запретить изменение имени листа 5

Внимание: В приведенном выше коде Master — это имя листа, который вы хотите защитить от изменения.

2. Затем сохраните и закройте код, с этого момента, когда вы переименуете это конкретное имя листа, оно будет сразу восстановлено до исходного. Смотрите скриншот:

документ запретить изменение имени листа 6


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (3)


Оценок пока нет. Оцените первым!

 

r_kot

Пользователь

Сообщений: 139
Регистрация: 01.01.1970

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

 

Что-то rar не открывается попробую в zipe прикрепить

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

предлагаю изменить и кодовые имена листов(приравнять их пользовательским)  
а потом при любом действии проверять не изменились ли, если надо, переименовывать.

 

ytk5kyky

Пользователь

Сообщений: 2410
Регистрация: 01.01.1970

Я что-то не нашел события на переименование листа.  
Тут ZVI выкладывал файлик со всеми возможными событиями. Вот надо в нем глянуть какое событие возникает.  
Иначе действительно придется по каждому чиху проверять имена листов.

 

New

Пользователь

Сообщений: 4582
Регистрация: 06.01.2013

Никакого не возникает. См. файл

 

ytk5kyky

Пользователь

Сообщений: 2410
Регистрация: 01.01.1970

 

r_kot

Пользователь

Сообщений: 139
Регистрация: 01.01.1970

{quote}{login=Pavel55}{date=16.01.2009 01:31}{thema=}{post}Никакого не возникает. См. файл{/post}{/quote}  

  Уменя rar не открывается, Pavel55 не будете ли вы любезны, сжать в zip!  
За раннее спасибо!

 

New

Пользователь

Сообщений: 4582
Регистрация: 06.01.2013

Да я приложу, но боюсь этот файл вам не поможет.    
Мне кажется надо использовать то, что подсказал Слэн.    
При каком-нибудь действии, например, при открытии файла, проверять кодовые имена  листов и сравнивать с обычными именами листов, если изменились, что переименовывать лист обратно на нужное имя. Кодовые имена листов можете посмотреть через Alt+F11, затем Ctrl+R, кодовое имя листа будет до скобок.  

  Вот файл со всеми событиями.

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

да при всех событиях :) можно только не совсеми листами, а с активным или , если это в макросе, то тех листов, кот этот макрос касается

 

r_kot

Пользователь

Сообщений: 139
Регистрация: 01.01.1970

{quote}{login=Pavel55}{date=16.01.2009 03:22}{thema=}{post}Да я приложу, но боюсь этот файл вам не поможет.    
Мне кажется надо использовать то, что подсказал Слэн.    
При каком-нибудь действии, например, при открытии файла, проверять кодовые имена  листов и сравнивать с обычными именами листов, если изменились, что переименовывать лист обратно на нужное имя. Кодовые имена листов можете посмотреть через Alt+F11, затем Ctrl+R, кодовое имя листа будет до скобок.  

  Вот файл со всеми событиями.{/post}{/quote}  

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

 

New

Пользователь

Сообщений: 4582
Регистрация: 06.01.2013

 

r_kot

Пользователь

Сообщений: 139
Регистрация: 01.01.1970

{quote}{login=Pavel55}{date=16.01.2009 05:50}{thema=}{post}См. файл{/post}{/quote}  

  Спасибо, Pavel55, буду пробовать! И всем остальным спасибо за внимание. Всем доброго времени суток!

 

New

Пользователь

Сообщений: 4582
Регистрация: 06.01.2013

Вам остаётся лишь один раз как надо переименовать кодовые имена листов в редакторе VBE и всё, макрос всё остальное сделает за вас.

 

Marchuk

Пользователь

Сообщений: 1167
Регистрация: 01.01.1970

{quote}{login=Pavel55}{date=16.01.2009 06:45}{thema=}{post}Вам остаётся лишь один раз как надо переименовать кодовые имена листов в редакторе VBE и всё, макрос всё остальное сделает за вас.{/post}{/quote}  
.CodeName    
а я голову ломал как получить имя листа кодовое, в нем вся запарка и была.  
впятницу пример грохнул, который писал.    
1. при загружки книги все имна листов заношу в массив.  
2. Событие я ставил на потерю фокуса листа, что при потери фокуса листа проверяется его имя с кодовым именем в массиве и если не соответсвует то меняет назад.

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

правда в этом есть некоторые грабли — если будете открывать в другой локализации, то если не латиницей кодовые имена были прописаны, то они изменятся  
на локальные

 

Чтоб  с одной стороны не проверять всё, а с другой стороны, при попытке переименовать лист тут же мягко поравлять пользователя,  
можно  

  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

 

слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

кроме того, что формулу надо где-то поместить(а если ее поместить далеко за пределами основных данных, это может спутать применение таких средств как usedrange или lastcell) и защитить

 

Inter_E

Пользователь

Сообщений: 399
Регистрация: 01.01.1970

Добрый день!  
Как макросом дать Кодовое имя определенному листу?  
Не могу найти синтаксис  
вроде ActiveSheet.CodeName=»Лист20″

With my best regards,      Inter_E

 

Думаю, только руками. Т.к. свойство CodeName только для чтения (Read-only), а не для чтения и установки.

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

А никак. Read only property. Экс сам присваивает Codename.

Я сам — дурнее всякого примера! …

 

Ну, что же вы так сразу «никак» — руками! Alt+F11, Ctrl+R и вперёд

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

М-да… Век живи…

Я сам — дурнее всякого примера! …

 

Hugo

Пользователь

Сообщений: 23253
Регистрация: 22.12.2012

Кстати, только что случайно набрёл, не проверял:  

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
Регистрация: 22.12.2012

#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?

Community's user avatar

asked Dec 15, 2011 at 11:55

user1049518's user avatar

2

  1. Right click the sheet tab that you wish to protect
  2. View Code
  3. 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

protect sheet1

answered Dec 25, 2011 at 1:14

brettdj's user avatar

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

Juliusz's user avatar

JuliuszJuliusz

2,0972 gold badges27 silver badges32 bronze badges

Would this approach work?

  1. Select all cells in the sheet, then UN-lock all cells with «Lock
    Cells» (yellow background of padlock turns white).
  2. Write the name of the sheet in a (fixed or named) cell, then lock
    this cell ONLY («Lock Cells», padlock background turns yellow).
  3. 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).

  4. Now write a VBA to compare the actual sheetname with the data in the protected named cell (or fixed reference e.g. A1).

  5. Run this script either on every change (probably too much) or at least on close of
    the workbook.
  6. 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's user avatar

brettdj

54.6k16 gold badges113 silver badges176 bronze badges

answered Dec 15, 2011 at 19:27

Robert Ilbrink's user avatar

Robert IlbrinkRobert Ilbrink

7,6982 gold badges22 silver badges31 bronze badges

1

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

Skynet

Дата: Понедельник, 28.04.2014, 18:51 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

0

±

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


Excel 2010

Здравствуйте уважаемые форумчане, суть проблемы в смене названия листов на исходные при переименовании. Ввиду поверхностного знания средств VBA, для решения возникающих проблем всегда пользуюсь гуглом. Нагуглил из примера пользователя New с ресурса planetaexcel.ru (http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=8&TID=7135) следующий пример

[vba]

Код

Option Explicit

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
‘проверка будет срабатывать при изменении информации на листе
‘сейчас все кодовые имена листов равны названиям листов
‘т.е. кодовое имя Лист1 и название листа тоже Лист1
Dim iSht As Worksheet
For Each iSht In ThisWorkbook.Worksheets
If iSht.CodeName <> iSht.Name Then iSht.Name = iSht.CodeName
Next iSht
End Sub

[/vba]

данный подход мне не очень походит, напрашивается решение со сравнением не имен codename, а например с каким то заданным списком названий листов
например у меня фиксированное количество листов с фиксированными названиями: у codename лист1 имя (абв), у codename лист2 имя (где) и так далее. Затем зациклить всё это, чтобы при переименовании сравнивалось не с codename, а вот с этим фиксированным списком названий и переименовывалось обратно. понимание проблемы вроде есть, но вот реализовать всё вышеперечисленное только научным методом тыка и гуглом не получается, помогите пож-та

 

Ответить

RAN

Дата: Понедельник, 28.04.2014, 19:24 |
Сообщение № 2

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

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

Сообщений: 5645


Сразу, после прочтения правил, и удобоваримого изложения хотелки


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

 

Ответить

DJ_Marker_MC

Дата: Понедельник, 28.04.2014, 21:50 |
Сообщение № 3

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

Ранг: Ветеран

Сообщений: 991


Репутация:

213

±

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


Excel 2019

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

Сообщение отредактировал DJ_Marker_MCПонедельник, 28.04.2014, 21:53

 

Ответить

Skynet

Дата: Вторник, 29.04.2014, 05:59 |
Сообщение № 4

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

0

±

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


Excel 2010

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

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

на ум приходит заменить
[vba]

Код

If iSht.CodeName <> iSht.Name Then iSht.Name = iSht.CodeName

[/vba]
на сравнения кодовых имен с заданными именами листов
[vba]

Код

If Лист1.CodeName <> a.Name Then iSht.Name = «a»
If Лист2.CodeName <> b.Name Then iSht.Name = «b»
If Лист3.CodeName <> c.Name Then iSht.Name = «c»

[/vba]

выдает ошибку

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

152634.xls
(35.5 Kb)

 

Ответить

DJ_Marker_MC

Дата: Вторник, 29.04.2014, 07:46 |
Сообщение № 5

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

Ранг: Ветеран

Сообщений: 991


Репутация:

213

±

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


Excel 2019

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

[vba]

Код

ActiveWorkbook.Unprotect

ActiveWorkbook.Protect Structure:=True, Windows:=False

[/vba]

Сообщение отредактировал DJ_Marker_MCВторник, 29.04.2014, 07:46

 

Ответить

anvg

Дата: Вторник, 29.04.2014, 08:23 |
Сообщение № 6

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

Ранг: Ветеран

Сообщений: 581


Репутация:

271

±

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


2016, 365

Доброе время суток.
Вариант, хотя защита структуры книги без условно правильнее. Упехов.

 

Ответить

Skynet

Дата: Вторник, 29.04.2014, 09:40 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

0

±

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


Excel 2010

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

буду пробовать

Доброе время суток.
Вариант, хотя защита структуры книги без условно правильнее. Упехов.

всё работает, но понять как пока не могу, если не сложно напишите в личку рекомендуемую литературу по VBA, очень хочется начать разбираться самому

 

Ответить

RAN

Дата: Вторник, 29.04.2014, 09:46 |
Сообщение № 8

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

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

Сообщений: 5645

[vba]

Код

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim iSht As Worksheet
      For Each iSht In ThisWorkbook.Worksheets
      iSht.Name = Switch(iSht.CodeName = «Лист1», «a», _
      iSht.CodeName = «Лист2», «b», iSht.CodeName = «Лист3», «c»)
      Next iSht
End Sub

[/vba]

PS Одна беда — при использовании этих макросов с событием Workbook_SheetSelectionChange практически любая отмена изменений в книге станет невозможной.


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

Сообщение отредактировал RANВторник, 29.04.2014, 09:56

 

Ответить

Skynet

Дата: Вторник, 29.04.2014, 10:34 |
Сообщение № 9

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

0

±

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


Excel 2010

[vba]

Код

ActiveWorkbook.Unprotect

ActiveWorkbook.Protect Structure:=True, Windows:=False

[/vba]

вроде работает, но с изьяном, ставлю защиту книги с паролем, всё работает, как только срабатывает макрос скрытия листов по событию закрытия книги, выдает ошибку

run-time error ‘1004’

Неверный пароль.Убедитесь что выключен caps и используется правильный регистр

после этого книга по-прежнему защищена но уже без пароля.

 

Ответить

DJ_Marker_MC

Дата: Вторник, 29.04.2014, 12:06 |
Сообщение № 10

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

Ранг: Ветеран

Сообщений: 991


Репутация:

213

±

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


Excel 2019

Цитата

как только срабатывает макрос скрытия листов по событию закрытия книги, выдает ошибку

А вы вначале этого макроса снимаете защиту?
Также проверьте пароли чтоб совпадали когда ставите и когда снимаете… попробуйте поставить числовой пароль чтоб избежать проблем с регистром и rus/eng алфавитом.

Перед закрытие снимайте защиту, а при входе ставьте.

 

Ответить

Skynet

Дата: Вторник, 29.04.2014, 12:14 |
Сообщение № 11

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

0

±

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


Excel 2010

проблема решилась добавлением пароля, совпадающего с тем, что я задал вручную

[vba]

Код

ActiveWorkbook.Unprotect «пароль»

ActiveWorkbook.Protect «пароль», Structure:=True, Windows:=False

[/vba]

 

Ответить

Skynet

Дата: Вторник, 29.04.2014, 12:17 |
Сообщение № 12

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

0

±

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


Excel 2010

проблема решения anvq
и RAN

[vba]

Код

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim iSht As Worksheet
     For Each iSht In ThisWorkbook.Worksheets
     iSht.Name = Switch(iSht.CodeName = «Лист1», «a», _
     iSht.CodeName = «Лист2», «b», iSht.CodeName = «Лист3», «c»)
     Next iSht
End Sub

[/vba]

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

 

Ответить

DJ_Marker_MC

Дата: Вторник, 29.04.2014, 14:58 |
Сообщение № 13

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

Ранг: Ветеран

Сообщений: 991


Репутация:

213

±

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


Excel 2019

Skynet, Запрет запрета макросов тоже уже давно продуман через лист Warning
В гугле «лист Warning в Excel» первая же ссылка в списке… Где то и у нас на форуме было, но что то не нашел.

 

Ответить

RAN

Дата: Вторник, 29.04.2014, 15:34 |
Сообщение № 14

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

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

Сообщений: 5645

А зачем вообще запрещать переименование листов? В чем великий смысл сего действа?


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

 

Ответить

Skynet

Дата: Вторник, 29.04.2014, 16:18 |
Сообщение № 15

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

0

±

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


Excel 2010

А зачем вообще запрещать переименование листов? В чем великий смысл сего действа?

макросы на энном количестве листов оперируют скрытием/раскрытием этих самых листов по различным условиям в ячейках, если переименовывать листы, то возникают ошибки и не отображается необходимый набор листов. Сделал небольшое расчетное приложение мега на 1,5. На работе подчиненные пользуются, но они настолько далекие от экселевских тонкостей, что дальше функции сумм ничего не знают. Сей факт приводит к некоторому ступору малограмотных юзеров и косякам дальнейших ручных расчетах.

 

Ответить

Skynet

Дата: Вторник, 29.04.2014, 16:37 |
Сообщение № 16

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

0

±

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


Excel 2010

еще не совсем отошел от мозгового штурма реализации базы данных в гугл таблицах, чтобы перед открытием файла xlsm копировало через интернет от туда на лист массив данных, а перед закрытием удалялось, тем самым добивается что база всегда последней версии и проверенная мной лично.

 

Ответить

RAN

Дата: Вторник, 29.04.2014, 17:12 |
Сообщение № 17

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

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

Сообщений: 5645

если переименовывать листы, то возникают ошибки и не отображается необходимый набор листов

если переименовывать листы и использовать CodeName , то НЕ возникают ошибки и отображается необходимый набор листов


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

 

Ответить

Skynet

Дата: Среда, 30.04.2014, 06:05 |
Сообщение № 18

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

0

±

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


Excel 2010

Я понял что правильнее было бы работать с codename, но в самом начале еще не знал таких тонкостей, теперь видимо придется переделывать.

 

Ответить

Skynet

Дата: Среда, 30.04.2014, 09:45 |
Сообщение № 19

Группа: Пользователи

Ранг: Новичок

Сообщений: 21


Репутация:

0

±

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


Excel 2010

если переименовывать листы и использовать CodeName , то НЕ возникают ошибки и отображается необходимый набор листов

было
[vba]

Код

If Target.Address = [V19].Address Then
         Select Case Target
         Case 0
             Sheets(«Лист1»).Visible = xlSheetVeryHidden
         Case 1
             Sheets(«Лист1»).Visible = True
             End Select
      End If

[/vba]

ставлю

[vba]

Код

[vba][code]If Target.Address = [V19].Address Then
         Select Case Target
         Case 0
             Sheets(«Лист1»).codename.Visible = xlSheetVeryHidden
         Case 1
             Sheets(«Лист1»).codename.Visible = True
             End Select
      End If

[/vba][/code][/vba]

ругается по всей видимости на синтаксис

 

Ответить

RAN

Дата: Среда, 30.04.2014, 10:15 |
Сообщение № 20

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

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

Сообщений: 5645

;)

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

9938860.xls
(28.5 Kb)


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

 

Ответить

Есть ли способ запретить пользователям 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 — удаление листа из книги
Прошу помощи.
Имеется файл kat.xlsx (книга Excel)
нужно из него удалить несколько первых листов,…

Удаление листа из книги без сообщения о безвозвратности данного действия
В макросе копируется лист из одной книги в другую. Т.к. можно копировать только After или Before,…

Как запретить удаление и переименование файла на севрере, и как объединить 2 жестких диска в один?
windows server 2003

1) один жеский диск почти полон, а второй пустой, чем можно объединить или…

Копирование, переименование, перемещение и удаление файла
Разработать программу, которая выполняет копирование, переименование,
перемещение и удаление…

2

Сумрак

05.08.2011, 16:56

2

dim WS as WorkSeet
set WS=ActiveSheet
WS.protect ‘пароль’
лист защищен
КНИГУ тоже моэжно защитить

0 / 0 / 0

Регистрация: 10.04.2011

Сообщений: 18

07.08.2011, 13:17

 [ТС]

3

Большое спасибо!
Всё оказалось проще, чем я думал.
В начале процедуры, где программно добавляются, удаляются, перемещаются или переименовываются листы, надо добавить:
ActiveWorkbook.Unprotect
, а в конце:
ActiveWorkbook.Protect Structure:=True, Windows:=False



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

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