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

Вход

Регистрация

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

 

= Мир MS Excel/Сменить название листа в зависимости от имени. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сменить название листа в зависимости от имени. (Макросы/Sub)
Сменить название листа в зависимости от имени.
Stormy Дата: Четверг, 11.09.2014, 10:04 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Доброго времени суток
Есть книга Excel, в ней листы создаются и заполняются путем экспорта из сторонней программы.
Названия Листов в Книге фиксированные. к примеру такие МТ_Р, МБ_МТ, МТ_МБ, МТ_С, С_МТ и т.д. ( всего около 20 возможных названий)
Каждый раз в зависимости от содержания заказа, в Книге могут содержаться разного набора и количества листы.
К примеру в заказе №1:
МБ_МТ, МБ_С
В заказе №2:
МТ_Р, МТ_МБ, МТ_С

То есть порядок и названия могут меняться. Прикрепление к самому листу тоже.
Допустим, в первом заказе Лист 1 = МБ_МТ , то во втором уже Лист 1 = МТ_Р.
Мне нужно, чтобы всегда было первый лист в вкладке ( если он соответствует названиям из списка) был = Подзаказ1 , второй лист в вкладке = Подзаказ2 и т.д.
Прикрепил примеры исходного и то что должно получится в результате.
Как это можно сделать? Пытался сделать перебором названий, но запутался и как-то коряво все это выглядит. Может есть более простой способ.
К сообщению приложен файл: 0002245.rar (28.4 Kb)


Место для рекламы.

Сообщение отредактировал Stormy - Четверг, 11.09.2014, 10:05
 
Ответить
СообщениеДоброго времени суток
Есть книга Excel, в ней листы создаются и заполняются путем экспорта из сторонней программы.
Названия Листов в Книге фиксированные. к примеру такие МТ_Р, МБ_МТ, МТ_МБ, МТ_С, С_МТ и т.д. ( всего около 20 возможных названий)
Каждый раз в зависимости от содержания заказа, в Книге могут содержаться разного набора и количества листы.
К примеру в заказе №1:
МБ_МТ, МБ_С
В заказе №2:
МТ_Р, МТ_МБ, МТ_С

То есть порядок и названия могут меняться. Прикрепление к самому листу тоже.
Допустим, в первом заказе Лист 1 = МБ_МТ , то во втором уже Лист 1 = МТ_Р.
Мне нужно, чтобы всегда было первый лист в вкладке ( если он соответствует названиям из списка) был = Подзаказ1 , второй лист в вкладке = Подзаказ2 и т.д.
Прикрепил примеры исходного и то что должно получится в результате.
Как это можно сделать? Пытался сделать перебором названий, но запутался и как-то коряво все это выглядит. Может есть более простой способ.

Автор - Stormy
Дата добавления - 11.09.2014 в 10:04
Rioran Дата: Четверг, 11.09.2014, 11:09 | Сообщение № 2
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Stormy, здравствуйте.

Предлагаю следующее решение.

Макрос предложит выбрать папку, в которой обработает все Excel файлы. Если в названии листа есть "_" - то лист будет переименован.

[vba]
Код
Sub Rio_SheetName_Reformer()

'Author:    Roman Rioran Voronov
'Date:      the 11-th of September, 2014
'Feedback:  voronov_rv@mail.ru

'     This subroutine allows user to pick a folder, where in every Excel file
'all worksheets with symbol "_" in their names will be renamed

Dim X As Integer 'To roll list names
Dim Y As Integer 'To roll file names on page
Dim Z As Integer 'As "Podzakaz" number
Dim shtX As Worksheet 'To roll lists
Dim sFiles As String 'To roll files
Dim sFolder As String 'To select a folder
Dim FileNumber As Integer 'To roll files

With Application.FileDialog(msoFileDialogFolderPicker)
     If .Show = False Then Exit Sub
     sFolder = .SelectedItems(1)
End With

Application.ScreenUpdating = False: ThisWorkbook.Worksheets("Data").Range("A:A").Clear
sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
sFiles = Dir(sFolder & "*.xls*")
FileNumber = 0

Do 'Gathering file names
     FileNumber = FileNumber + 1
     With ThisWorkbook.Worksheets("Data")
         .Cells(FileNumber, 1).Value = sFolder & sFiles
         sFiles = Dir
     End With
Loop While sFiles <> "" 'Observing files one by one

For Y = 1 To FileNumber 'Reforming books
     Workbooks.Open ThisWorkbook.Worksheets("Data").Cells(Y, 1).Value: Z = 0
     For Each shtX In ActiveWorkbook.Worksheets
         If shtX.Name Like "*_*" Then
             Z = Z + 1: shtX.Name = "Подзаказ" & Z
         End If
     Next shtX
     ActiveWorkbook.Close SaveChanges:=True
Next Y

Application.ScreenUpdating = True
MsgBox "Обработка книг в папке" & vbNewLine & vbNewLine & sFolder & vbNewLine & vbNewLine & "полностью завершена."

End Sub
[/vba]
К сообщению приложен файл: Rio_Renamer.xlsm (19.2 Kb)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеStormy, здравствуйте.

Предлагаю следующее решение.

Макрос предложит выбрать папку, в которой обработает все Excel файлы. Если в названии листа есть "_" - то лист будет переименован.

[vba]
Код
Sub Rio_SheetName_Reformer()

'Author:    Roman Rioran Voronov
'Date:      the 11-th of September, 2014
'Feedback:  voronov_rv@mail.ru

'     This subroutine allows user to pick a folder, where in every Excel file
'all worksheets with symbol "_" in their names will be renamed

Dim X As Integer 'To roll list names
Dim Y As Integer 'To roll file names on page
Dim Z As Integer 'As "Podzakaz" number
Dim shtX As Worksheet 'To roll lists
Dim sFiles As String 'To roll files
Dim sFolder As String 'To select a folder
Dim FileNumber As Integer 'To roll files

With Application.FileDialog(msoFileDialogFolderPicker)
     If .Show = False Then Exit Sub
     sFolder = .SelectedItems(1)
End With

Application.ScreenUpdating = False: ThisWorkbook.Worksheets("Data").Range("A:A").Clear
sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
sFiles = Dir(sFolder & "*.xls*")
FileNumber = 0

Do 'Gathering file names
     FileNumber = FileNumber + 1
     With ThisWorkbook.Worksheets("Data")
         .Cells(FileNumber, 1).Value = sFolder & sFiles
         sFiles = Dir
     End With
Loop While sFiles <> "" 'Observing files one by one

For Y = 1 To FileNumber 'Reforming books
     Workbooks.Open ThisWorkbook.Worksheets("Data").Cells(Y, 1).Value: Z = 0
     For Each shtX In ActiveWorkbook.Worksheets
         If shtX.Name Like "*_*" Then
             Z = Z + 1: shtX.Name = "Подзаказ" & Z
         End If
     Next shtX
     ActiveWorkbook.Close SaveChanges:=True
Next Y

Application.ScreenUpdating = True
MsgBox "Обработка книг в папке" & vbNewLine & vbNewLine & sFolder & vbNewLine & vbNewLine & "полностью завершена."

End Sub
[/vba]

Автор - Rioran
Дата добавления - 11.09.2014 в 11:09
Stormy Дата: Четверг, 11.09.2014, 11:23 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Rioran,
Выбор папки не подойдет, так как макрос будет висеть на Открытие книги, которая в свою очередь с ОЛЕ объекта запускается. Все должно происходить без участия пользователя.


Место для рекламы.
 
Ответить
СообщениеRioran,
Выбор папки не подойдет, так как макрос будет висеть на Открытие книги, которая в свою очередь с ОЛЕ объекта запускается. Все должно происходить без участия пользователя.

Автор - Stormy
Дата добавления - 11.09.2014 в 11:23
Rioran Дата: Четверг, 11.09.2014, 11:35 | Сообщение № 4
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Stormy, можете использовать для оптового переименования, если скопилось энное количество необработанных файлов =) С переделкой под NonUser формат сами справитесь или помочь?


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеStormy, можете использовать для оптового переименования, если скопилось энное количество необработанных файлов =) С переделкой под NonUser формат сами справитесь или помочь?

Автор - Rioran
Дата добавления - 11.09.2014 в 11:35
Stormy Дата: Четверг, 11.09.2014, 12:01 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Rioran,
Роман, спасибо за участие в вопросе.
Не совсем все так. Вот вкратце, что происходит и почему нужно менять названия листов, возможно у кого-то возникнет принципиально иное решение.

Есть чертеж в Автокаде, на нем расположены ОЛЕ объекты Экзеля( Назовем А_ОЛЕ). Есть Книга Экзеля полученный путем экспорта из сторонней программы ( назовем ее Книга_База ).
1) Макрос в Автокаде открывает ОЛЕ объекты.
2) При открытие А_ОЛЕ срабатывает макрос открытия Книга_База
3) Открывшийся лист А_ОЛЕ уже содержит привязку к Книга_База . То бишь по структуре таблиц они одинаковы. А_ОЛЕ ссылается на Книга_База.
Ячейка А1 в А_ОЛЕ содержит такую запись =
Код
=[Книга_База.xls]DS_MT!A1
.
4) Если в Книга_База присутствует Лист с названием DS_MT , то все нормально, но вот если он отсутствует , то естественное будет
Код
=[Книга_База.xls]#ССЫЛКА!A1

Чтобы не плодить в Автокаде всех возможных вариантов для листов, хотел переименовывать их Стандартные названия, тогда связка не будет выдавать ошибки и можно обойтись 4-мя шаблонами.

Как-то так все.


Место для рекламы.
 
Ответить
СообщениеRioran,
Роман, спасибо за участие в вопросе.
Не совсем все так. Вот вкратце, что происходит и почему нужно менять названия листов, возможно у кого-то возникнет принципиально иное решение.

Есть чертеж в Автокаде, на нем расположены ОЛЕ объекты Экзеля( Назовем А_ОЛЕ). Есть Книга Экзеля полученный путем экспорта из сторонней программы ( назовем ее Книга_База ).
1) Макрос в Автокаде открывает ОЛЕ объекты.
2) При открытие А_ОЛЕ срабатывает макрос открытия Книга_База
3) Открывшийся лист А_ОЛЕ уже содержит привязку к Книга_База . То бишь по структуре таблиц они одинаковы. А_ОЛЕ ссылается на Книга_База.
Ячейка А1 в А_ОЛЕ содержит такую запись =
Код
=[Книга_База.xls]DS_MT!A1
.
4) Если в Книга_База присутствует Лист с названием DS_MT , то все нормально, но вот если он отсутствует , то естественное будет
Код
=[Книга_База.xls]#ССЫЛКА!A1

Чтобы не плодить в Автокаде всех возможных вариантов для листов, хотел переименовывать их Стандартные названия, тогда связка не будет выдавать ошибки и можно обойтись 4-мя шаблонами.

Как-то так все.

Автор - Stormy
Дата добавления - 11.09.2014 в 12:01
Stormy Дата: Четверг, 11.09.2014, 12:07 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Одна мысль крутится в голове, но ухватиться за нее не могу.
1) Создать список названий , которые нужно переименовать.
(МТ1, МТ2, МПБ3, ПМР, КМН)
2) Сделать проверку по названиям листов.
3) Если встречается название из списка, то присвоить этому листу название ПодЗак1 , дальше проверяем. Если встречается еще какое-то название из списка, то присвоить название ПодЗак2 и так до конца листов ( не больше 20 листов всего может быть)

Только вот как это сделать пока недодумкаю


Место для рекламы.
 
Ответить
СообщениеОдна мысль крутится в голове, но ухватиться за нее не могу.
1) Создать список названий , которые нужно переименовать.
(МТ1, МТ2, МПБ3, ПМР, КМН)
2) Сделать проверку по названиям листов.
3) Если встречается название из списка, то присвоить этому листу название ПодЗак1 , дальше проверяем. Если встречается еще какое-то название из списка, то присвоить название ПодЗак2 и так до конца листов ( не больше 20 листов всего может быть)

Только вот как это сделать пока недодумкаю

Автор - Stormy
Дата добавления - 11.09.2014 в 12:07
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сменить название листа в зависимости от имени. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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