Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/запрет переименования листов - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
запрет переименования листов
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, а вот с этим фиксированным списком названий и переименовывалось обратно. понимание проблемы вроде есть, но вот реализовать всё вышеперечисленное только научным методом тыка и гуглом не получается, помогите пож-та
 
Ответить
СообщениеЗдравствуйте уважаемые форумчане, суть проблемы в смене названия листов на исходные при переименовании. Ввиду поверхностного знания средств 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, а вот с этим фиксированным списком названий и переименовывалось обратно. понимание проблемы вроде есть, но вот реализовать всё вышеперечисленное только научным методом тыка и гуглом не получается, помогите пож-та

Автор - Skynet
Дата добавления - 28.04.2014 в 18:51
RAN Дата: Понедельник, 28.04.2014, 19:24 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
помогите пож-та

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


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
помогите пож-та

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

Автор - RAN
Дата добавления - 28.04.2014 в 19:24
DJ_Marker_MC Дата: Понедельник, 28.04.2014, 21:50 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

Excel 2019
Солидарен с Ran, но исходя из прочитанного напрашивается сразу вопрос, а может совсем запретить их переименовывать через защиту структуры книги, без макросов?
Попробуйте переименовать листы в файле.
К сообщению приложен файл: 6176703.xlsx (8.3 Kb)


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

Автор - DJ_Marker_MC
Дата добавления - 28.04.2014 в 21:50
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)
 
Ответить
Сообщение
Солидарен с 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]

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

Автор - Skynet
Дата добавления - 29.04.2014 в 05:59
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
 
Ответить
Сообщение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
Доброе время суток.
Вариант, хотя защита структуры книги без условно правильнее. Упехов.
К сообщению приложен файл: unchangedNames.xls (34.0 Kb)
 
Ответить
СообщениеДоброе время суток.
Вариант, хотя защита структуры книги без условно правильнее. Упехов.

Автор - anvg
Дата добавления - 29.04.2014 в 08:23
Skynet Дата: Вторник, 29.04.2014, 09:40 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

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

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

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

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

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

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

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

Автор - Skynet
Дата добавления - 29.04.2014 в 09:40
RAN Дата: Вторник, 29.04.2014, 09:46 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[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
 
Ответить
Сообщение[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:46
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 и используется правильный регистр

после этого книга по-прежнему защищена но уже без пароля.
 
Ответить
Сообщение[vba]
Код
ActiveWorkbook.Unprotect
...
ActiveWorkbook.Protect Structure:=True, Windows:=False
[/vba]

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

run-time error '1004'

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

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

Автор - Skynet
Дата добавления - 29.04.2014 в 10:34
DJ_Marker_MC Дата: Вторник, 29.04.2014, 12:06 | Сообщение № 10
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

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


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

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


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

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

Автор - DJ_Marker_MC
Дата добавления - 29.04.2014 в 12:06
Skynet Дата: Вторник, 29.04.2014, 12:14 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

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

[vba]
Код
ActiveWorkbook.Unprotect "пароль"
...
ActiveWorkbook.Protect "пароль", Structure:=True, Windows:=False
[/vba]
 
Ответить
Сообщениепроблема решилась добавлением пароля, совпадающего с тем, что я задал вручную

[vba]
Код
ActiveWorkbook.Unprotect "пароль"
...
ActiveWorkbook.Protect "пароль", Structure:=True, Windows:=False
[/vba]

Автор - Skynet
Дата добавления - 29.04.2014 в 12:14
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]

в том, что это можно обойти через запрет макросов, а потом зайти и переименовать листы, и включить их обратно
 
Ответить
Сообщениепроблема решения 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]

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

Автор - Skynet
Дата добавления - 29.04.2014 в 12:17
DJ_Marker_MC Дата: Вторник, 29.04.2014, 14:58 | Сообщение № 13
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

Excel 2019
Skynet, Запрет запрета макросов тоже уже давно продуман через лист Warning
В гугле "лист Warning в Excel" первая же ссылка в списке... Где то и у нас на форуме было, но что то не нашел.
 
Ответить
СообщениеSkynet, Запрет запрета макросов тоже уже давно продуман через лист Warning
В гугле "лист Warning в Excel" первая же ссылка в списке... Где то и у нас на форуме было, но что то не нашел.

Автор - DJ_Marker_MC
Дата добавления - 29.04.2014 в 14:58
RAN Дата: Вторник, 29.04.2014, 15:34 | Сообщение № 14
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

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


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

Автор - RAN
Дата добавления - 29.04.2014 в 15:34
Skynet Дата: Вторник, 29.04.2014, 16:18 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

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


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


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

Автор - Skynet
Дата добавления - 29.04.2014 в 16:18
Skynet Дата: Вторник, 29.04.2014, 16:37 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

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

Автор - Skynet
Дата добавления - 29.04.2014 в 16:37
RAN Дата: Вторник, 29.04.2014, 17:12 | Сообщение № 17
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

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


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


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
если переименовывать листы, то возникают ошибки и не отображается необходимый набор листов


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

Автор - RAN
Дата добавления - 29.04.2014 в 17:12
Skynet Дата: Среда, 30.04.2014, 06:05 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

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

Автор - Skynet
Дата добавления - 30.04.2014 в 06:05
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]

ругается по всей видимости на синтаксис
 
Ответить
Сообщение
если переименовывать листы и использовать 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]

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

Автор - Skynet
Дата добавления - 30.04.2014 в 09:45
RAN Дата: Среда, 30.04.2014, 10:15 | Сообщение № 20
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
;)
К сообщению приложен файл: 9938860.xls (28.5 Kb)


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

Автор - RAN
Дата добавления - 30.04.2014 в 10:15
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!