Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
3 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 34
Excel

Переименовка листов по CodeName

05.06.2020, 14:25. Показов 3853. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Подскажите как сделать что бы листы переименовывались по CodeName?
List1 Исходник, данные с таблицы, ниже код который по порядку меняет и если передвинуть страницу, то и имя листа изменится.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh As Long
If Not Intersect(Range("M2:M32"), Target) Is Nothing Then
    For Each iCell In Target
        Select Case iCell.Address(0, 0)
            Case "M2": sh = 3
            Case "M3": sh = 4
            Case "M4": sh = 5
            Case "M5": sh = 6
            Case "M6": sh = 7
            Case "M7": sh = 8
            Case "M8": sh = 9
            Case "M9": sh = 10
            Case "M10": sh = 11
            Case "M11": sh = 12
            Case "M12": sh = 13
            Case "M13": sh = 14
            Case "M14": sh = 15
            Case "M15": sh = 16
            Case "M16": sh = 17
        End Select
        Sheets(sh).Name = IIf(iCell <> "", iCell.Value, WorksheetFunction.Rept(" ", sh))
    Next
End If
End Sub
Добавлено через 11 минут
Или может есть макрос для книги что бы запрещало двигать листы?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.06.2020, 14:25
Ответы с готовыми решениями:

Excel обращение к книге по codename
Даров, ребя. Можно ли напрямки обраться по коднейму к определённой книге из другой? А то название файла поменяют, и код не...

Определить, сколько можно купить тетрадей по 12 листов, по 48 листов и по 96 листов, зная цену
Определить, сколько можно купить тетрадей по 12 листов, по 48 листов и по 96 листов, если цена тетради с 96 листами 60 р., с 48 листами –...

переименовка файла
здраствуйте на форме 2 компонента edit и button нужно ввести в эдите слово и нажать батн чтоб файл переименовался с именем которое...

51
3 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 34
05.06.2020, 19:02  [ТС]
Студворк — интернет-сервис помощи студентам
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh As Long
If Not Intersect(Range("M2:M3"), Target) Is Nothing Then
    For Each iCell In Target
        Select Case iCell.Address(0, 0)
            Case "M2": sh = 3
            Case "M3": sh = 4
        
        End Select
        Sheets(sh).Name = IIf(iCell <> "", iCell.Value, WorksheetFunction.Rept(" ", sh))
    Next
End If
End Sub
МОжно как то сделать что бы Case "M2": sh = 3 не третий лист по порядку брал переименовывать, а конкретно List3 ?
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
05.06.2020, 19:09
Цитата Сообщение от FullFlashka Посмотреть сообщение
Саму книгу не защищаю, т.к. тогда по макросу не будут переименовываться листы. Или есть обход?
Есть и Вам он уже известен. И имею наглость утверждать, что при реализации моего совета, Вы получаете полный контроль над именами листов.
0
3 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 34
05.06.2020, 19:13  [ТС]
сформулировал вроде вопрос)
Нужно?
1. Из Ячейки А1 взять данные
Вставить данные в A1.name
И что бы A1.name всегда принадлежала List3(CodeName)
2. Из Ячейки А2 взять данные
Вставить данные в A2.name
И что бы A2.name всегда принадлежала List4(CodeName)

Добавлено через 47 секунд
pashulka, "Есть и Вам он уже известен. И имею наглость утверждать, что при реализации моего совета, Вы получаете полный контроль над именами листов. "
Как это реализовать?
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
05.06.2020, 19:21
Почему вообще важны имена листов, если в макросе используются кодовые имена? Да пусть переименовывают, если им это упёрлось...
0
3 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 34
05.06.2020, 19:25  [ТС]
Hugo121, в макросе не используются кодовые имена, а нужно что бы использовались кодовые имена.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh As Long
If Not Intersect(Range("M2:M32"), Target) Is Nothing Then
    For Each iCell In Target
        Select Case iCell.Address(0, 0)
            Case "M2": sh = 3
            Case "M3": sh = 4
            Case "M4": sh = 5
            Case "M5": sh = 6
            Case "M6": sh = 7
            Case "M7": sh = 8
            Case "M8": sh = 9
            Case "M9": sh = 10
            Case "M10": sh = 11
            Case "M11": sh = 12
            Case "M12": sh = 13
            Case "M13": sh = 14
            Case "M14": sh = 15
            Case "M15": sh = 16
            Case "M16": sh = 17
        End Select
        Sheets(sh).Name = IIf(iCell <> "", iCell.Value, WorksheetFunction.Rept(" ", sh))
    Next
End If
End Sub
Как я понял из кода он берет с ячейки М2 и переименовывает (sh = 3 = 3 лист по порядку) в М2.name

Вот скрин
https://yadi.sk/i/p-eNa8p4xgIRbg
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
05.06.2020, 19:27
Лучше расскажите зачем Вы написали этот код. В чём смысл?
0
3 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 34
05.06.2020, 19:37  [ТС]
Hugo121, Если взять конкретно про мою книгу, то для того что бы:
1. Когда вводим Фамилию клиента в таблицу, следующий лист сразу переименовывался в эту Фамилию и т.д.
2. Если клиент сменил фамилию то просто в таблице меняем Фамилию и лист переименовывается.
Сейчас всё работает почти как надо, единственная проблема, если листы перетасовать, то получаются ошибки.

Дело в том что эту книгу я отдам и ей будут пользоваться те кто вообще в таблицах не шарит, я им покажу куда что вводить и всё.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
05.06.2020, 19:42
В какую таблицу, какой лист? Только не говорите что следующий - я спрошу следующий куда?
0
3 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 34
05.06.2020, 19:45  [ТС]
Hugo121, в таблицу на Листе "Главная")
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
05.06.2020, 19:46
Цитата Сообщение от FullFlashka Посмотреть сообщение
Как это реализовать?
я уже всё расписал
контекстное меню Application.CommandBars("Ply")
диалог Application.Dialogs(xlDialogWorkbookName ).Show

Цитата Сообщение от FullFlashka Посмотреть сообщение
Когда вводим Фамилию клиента в таблицу, следующий лист сразу переименовывался в эту Фамилию и т.д.
Перед вводом, обычно люди выделяют ячейку или диапазон, вот и запоминайте старые имена листов.

P.S. И, кстати, весь это select case изначально был не нужен, т.к. sh это всего лишь номер строки + 1, sh = iCell.Row +1
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
05.06.2020, 19:46
Ок. Остался второй вопрос.
0
3 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 34
05.06.2020, 19:55  [ТС]
pashulka, И тут я подвис) Как это контекстное меню вызвать?) И каков полный код?)
Hugo121, следующий идет List3(Пусто А), ему нуно имя с ячейки M3 Листа Главная
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
05.06.2020, 19:57
Контекстное меню появится, когда пользователь подведёт курсор мышки к ярлыку нужного листа и кликнет правой кнопкой мышки.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
05.06.2020, 19:59
Т.е. какой бы лист не стоял после Главного - его нужно переименовать, хоть бы там уже лист Иванова/Петрова/Сидорова?
А если фамилию удалили вообще?

Добавлено через 1 минуту
Если бы знать/понимать задачу, а так... толку нет.
0
3 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 34
05.06.2020, 20:03  [ТС]
Hugo121, нет, именно ячейка М3 отвечает за переименовку одного и того же листа(М3 просто первая строчка), если лист передвинуть, то всё равно ячейка М3 переименовывает его, а не следующий после главного.
В ячейке м3 формула =ЕСЛИОШИБКА(ЛЕВСИМВ(C3;НАЙТИ(" ";C3)-1);N3), а в С3 ФИО, N3 скрыта(в ней набор букв)
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
05.06.2020, 20:04
Цитата Сообщение от Hugo121 Посмотреть сообщение
А если фамилию удалили вообще?
Тогда автор генерирует кучу пробелов с помощью стандартной функции ПОВТОР/REPT, хотя есть более лаконичная String(sh, " "), String(sh, 32) или просто Space(sh)
0
3 / 0 / 0
Регистрация: 14.04.2015
Сообщений: 34
05.06.2020, 20:13  [ТС]
В данный момент Если внести в ячейку С3 на листе "Главная" к примеру Иванов И.И. , и нажать на кнопку справа "Обновить ФИО" Следующий лист пере именуется в "Иванов", если этот лист передвинуть( к примеру в право) и снова в С3 на листе "Главная" изменить ФИО на Петров И.И. и нажать кнопку "Обновить ФИО", то пере именуется Следующий лист на "Петров", а надо что бы уже переименованный лист "Иванов" пере именовался в "Петров" )
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
05.06.2020, 20:23
1. Этот код (что в модуле листа) не срабатывает на пересчёт формулы в столбце М, а изменений там в М не происходит. Т.е. код ни к чему.
2. Код нужно привязывать или к пересчёту в М, или к изменению в столбце С.
3. Вполне реально прописать переименования листа с известным кодовым имененм, но как Вы планируете бороться например с однофамильцами, ну или с ошибками ввода (вот есть уже ИвановИИ, и тут опять вводят ИванивИИ...)
4. А как перейти по линку на этот конкретный лист независимо где он расположен и как назван - я уже код дал.

Добавлено через 3 минуты
Цитата Сообщение от FullFlashka Посмотреть сообщение
и нажать на кнопку справа "Обновить ФИО"
- какой код срабатывает?

Добавлено через 1 минуту
Всё, понял, вспомнил пароль. Как-то через одно место, зачем так сложно всё?...

Добавлено через 4 минуты
Переименовывать можно по такому принципу (изменить/дополнить то что уже есть):
Visual Basic
1
2
3
4
5
6
Sub tst()
    Dim arr, sh&
    arr = Array(List1, List10, List11)
    sh = 1
    arr(sh).Activate 'или arr(sh).Name=....
End Sub
0
 Аватар для pashulka
4139 / 2243 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
06.06.2020, 00:11
FullFlashka, Вот второй вариант. Хотя там всё равно, без ввода пароля, никто не сможете перемещать листы, так что можно было обращаться и по индексу. Но такая "сложность" для того, чтобы можно было отменять неправильные имена листов, если их несколько.
Вложения
Тип файла: zip Sample_for_FullFlashka2.zip (22.1 Кб, 6 просмотров)
1
349 / 190 / 108
Регистрация: 01.04.2020
Сообщений: 538
06.06.2020, 05:22
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
'   FullFlashka, попробуйте этот код. _
 _
    Я его уже добавил в ваш файл (в приложении). _
    Попробуйте выделить ячейку с данными в столбце "G" _
    на листе Главная
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 
If Not Intersect(Range("G2:G" & Cells(Rows.Count, "G").End(xlUp).Row), _
        Target) Is Nothing And Target.Cells.Count = 1 Then
    
If Target.Value <> "" Then
    For i = 1 To Worksheets.Count
        With Worksheets(i)
            
            ' вариант 1: _
                МОЖНО СДЕЛАТЬ ДАЖЕ так, когда и названия листов не важны, _
                и не важно где они находятся. _
                Важно только, чтобы: _
                    - точно совпадали названия номеров договоров, и _
                    - чтобы № договора сидел в одинаковой ячейке, _
                      у вас она, кажется, всегда будет [D4] _
                Вариант рабочий, пробуйте, но _
                если случайно будут в книге договора с одинаковыми номерами, _
                этот код найдёт всегда только первый попавшийся договор. _
                Но не трагедия, всё можно (почти) ...
            
            If .Range("D4").Value = Target.Value Then
                .Activate
                .Range("B2").Activate
                Exit Sub
            
            ' вариант 2: _
                через .Name, но чтобы это работало, _
                вы должны обеспечивать правильные названия листов при их создании ... _
                вариант рабочий (на тех листах, что я переименовал), можно попробовать
            
''                If .Name = Replace(Target.Value, "/", "-") Then
''                    .Activate
''                    .Range("B2").Activate
''                    Exit Sub
            
            ' вариант 3: _
                через .CodeName, и тоже, чтобы это работало, _
                вы прежде должны обеспечивать правильные названия .CodeName листов при их создании ... _
                что немножко сложнее второго варианта. Если хотите, дорабатывайте.
                
            'If .CodeName = Replace(Target.Value, "/", "_") Then        ' например
            '    .Activate  ...
                            
 
            Else
                If i = Worksheets.Count Then
                    MsgBox "Договора № " & "'" & Target.Value & "'" & " в книге не найдено."
                End If
            End If
        End With
    Next i
End If
End If
 
End Sub
Вложения
Тип файла: zip отчет май1_.zip (217.5 Кб, 3 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.06.2020, 05:22

Переименовка файлов
Добрый день, давно не обращался за помощью ) в прошлый раз очень помогли.( за это отдельное спасибо) и так к сути. Есть 100+ папок . В...

Переименовка dpr
Привет=) Я очень торопился и сохранил проект не изменив имя. Вопрос: как можно изменить имя проекта? Запускаю &quot;Диспетчер...

Codename: n/a
Всем привет! При попытке установить phalcon на сервер и выполнении вот этой команды:curl -s...

Как конверт jar (codename one) в .apk, xapp . формат ?
Как конверт jar (codename one) в .apk, xapp .... формат ????

Работа со StringGrid. Выдать список листов за дату, список листов с протяженностью более заданной...
Здравствуйте! Помогите доработать. Программа должна выдавать список листов за дату, список листов с протяженностью более заданной,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru