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

Вход

Регистрация

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

 

= Мир MS Excel/Переименовать листы при открытии в соответствии с ячейками - Мир MS Excel

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

Excel 2003
Добрый день. Встал такой вопрос. Нужно что бы при открытии файла «1» все листы переименовывались в соответствии с ячейками В5:В20 файла «2»
К сообщению приложен файл: 2557521.rar (3.2 Kb)
 
Ответить
СообщениеДобрый день. Встал такой вопрос. Нужно что бы при открытии файла «1» все листы переименовывались в соответствии с ячейками В5:В20 файла «2»

Автор - Maksim156
Дата добавления - 17.10.2015 в 10:41
Roman777 Дата: Суббота, 17.10.2015, 12:31 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Maksim156, зачем же вам понадобилось переименовывать из другого файла...
Оба файла должны лежать в одной целевой папке:
К сообщению приложен файл: _____.rar (17.0 Kb)


Много чего не знаю!!!!
 
Ответить
СообщениеMaksim156, зачем же вам понадобилось переименовывать из другого файла...
Оба файла должны лежать в одной целевой папке:

Автор - Roman777
Дата добавления - 17.10.2015 в 12:31
Maksim156 Дата: Суббота, 17.10.2015, 12:57 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 56
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Roman777, спасибо, то что нужно, только у меня 200 листов и открытие файла будет занимать значительное время. А если на каждый лист сделать ссылку в ячейку В3 и лист называть этим значением, операция будет выполняться быстрее?
К сообщению приложен файл: 164361.rar (3.6 Kb)
 
Ответить
СообщениеRoman777, спасибо, то что нужно, только у меня 200 листов и открытие файла будет занимать значительное время. А если на каждый лист сделать ссылку в ячейку В3 и лист называть этим значением, операция будет выполняться быстрее?

Автор - Maksim156
Дата добавления - 17.10.2015 в 12:57
Roman777 Дата: Суббота, 17.10.2015, 13:11 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Maksim156, Добрый день!
В каком файле у Вас 200 листов? скорость открывания файла будет больше зависеть не в количества листов, а в от общего объёма файла... сколько информации в нём хранится...


Много чего не знаю!!!!
 
Ответить
СообщениеMaksim156, Добрый день!
В каком файле у Вас 200 листов? скорость открывания файла будет больше зависеть не в количества листов, а в от общего объёма файла... сколько информации в нём хранится...

Автор - Roman777
Дата добавления - 17.10.2015 в 13:11
Maksim156 Дата: Суббота, 17.10.2015, 14:49 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 56
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Roman777, файл подкрепить не могу (т.к. максимально разрешенной размер файла 100 Кб) он весит около 11,6 Мб, но макрос ведь проверяет и переименовывает каждый лист? Получается чем больше листов, тем он дольше их переименовывает?
 
Ответить
СообщениеRoman777, файл подкрепить не могу (т.к. максимально разрешенной размер файла 100 Кб) он весит около 11,6 Мб, но макрос ведь проверяет и переименовывает каждый лист? Получается чем больше листов, тем он дольше их переименовывает?

Автор - Maksim156
Дата добавления - 17.10.2015 в 14:49
Roman777 Дата: Суббота, 17.10.2015, 15:26 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Maksim156, Макрос вы запускаете из файла 1, если у Вас в файле 1 200 листов, а файл то всё-равно открыт, то макрос отработает быстро. Если у Вас в файле 2, где у Вас прописаны названия листов, 200 листов, то я Вам рекомендую всё же создать 2-й файл, где на 3-ем листе в ячейках B5:B20 будет писаться имя листов... просто не ясна вся картина, поэтому я не знаю, что Вам ответить.


Много чего не знаю!!!!
 
Ответить
СообщениеMaksim156, Макрос вы запускаете из файла 1, если у Вас в файле 1 200 листов, а файл то всё-равно открыт, то макрос отработает быстро. Если у Вас в файле 2, где у Вас прописаны названия листов, 200 листов, то я Вам рекомендую всё же создать 2-й файл, где на 3-ем листе в ячейках B5:B20 будет писаться имя листов... просто не ясна вся картина, поэтому я не знаю, что Вам ответить.

Автор - Roman777
Дата добавления - 17.10.2015 в 15:26
Maksim156 Дата: Пятница, 23.10.2015, 12:16 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 56
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Roman777, когда пытаюсь с сделать что бы названия брал с данного файла выделяет ошибку в фразе
[vba]
Код
i_n = ActWB.Count
[/vba]
что еще нужно изменить в коде?
[vba]
Код
Private Sub Workbook_Open()
Dim WB As Workbook
Dim ActWB As Workbook
Dim sht As Worksheet
Dim path1 As String, name1 As String
Dim namesWS()
Dim i_n As Long, i As Long

Set ActWB = ThisWorkbook
path1 = ActWB.Path
name1 = "План.xls"
Workbooks.Open path1 & "/" & name1
Set WB = ActiveWorkbook
namesWS = WB.Worksheets(1).[B5:B20].Value2
WB.Close False
If ActWB.Worksheets.Count > UBound(namesWS, 1) Then
   i_n = ActWB.Count
Else
   i_n = UBound(namesWS, 1)
End If
For i = 1 To i_n
If Len(namesWS(i, 1)) >= 31 Then
    MsgBox ("Имя листа не может иметь более 31 символа")
    Exit For
End If
ActWB.Worksheets(i).Name = ActWB.Worksheets(i).Name & "_"
ActWB.Worksheets(i).Name = namesWS(i, 1)
Next i

End Sub
[/vba]
К сообщению приложен файл: 8798402.rar (11.2 Kb)
 
Ответить
СообщениеRoman777, когда пытаюсь с сделать что бы названия брал с данного файла выделяет ошибку в фразе
[vba]
Код
i_n = ActWB.Count
[/vba]
что еще нужно изменить в коде?
[vba]
Код
Private Sub Workbook_Open()
Dim WB As Workbook
Dim ActWB As Workbook
Dim sht As Worksheet
Dim path1 As String, name1 As String
Dim namesWS()
Dim i_n As Long, i As Long

Set ActWB = ThisWorkbook
path1 = ActWB.Path
name1 = "План.xls"
Workbooks.Open path1 & "/" & name1
Set WB = ActiveWorkbook
namesWS = WB.Worksheets(1).[B5:B20].Value2
WB.Close False
If ActWB.Worksheets.Count > UBound(namesWS, 1) Then
   i_n = ActWB.Count
Else
   i_n = UBound(namesWS, 1)
End If
For i = 1 To i_n
If Len(namesWS(i, 1)) >= 31 Then
    MsgBox ("Имя листа не может иметь более 31 символа")
    Exit For
End If
ActWB.Worksheets(i).Name = ActWB.Worksheets(i).Name & "_"
ActWB.Worksheets(i).Name = namesWS(i, 1)
Next i

End Sub
[/vba]

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

2010
[vba]
Код
Set ActWB = ThisWorkbook
.....
i_n = ActWB.Count
[/vba]
Количество ThisWorkbook всегда 1, и подсчету не подлежит.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Set ActWB = ThisWorkbook
.....
i_n = ActWB.Count
[/vba]
Количество ThisWorkbook всегда 1, и подсчету не подлежит.

Автор - RAN
Дата добавления - 23.10.2015 в 12:21
Maksim156 Дата: Пятница, 23.10.2015, 12:55 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 56
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
RAN, а что прописать нужно что бы заработало?
 
Ответить
СообщениеRAN, а что прописать нужно что бы заработало?

Автор - Maksim156
Дата добавления - 23.10.2015 в 12:55
Roman777 Дата: Пятница, 23.10.2015, 13:22 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Maksim156,
[vba]
Код
ActWB.Worksheets.Count
[/vba]
вместо
[vba]
Код
ActWB.Count
[/vba]


Много чего не знаю!!!!
 
Ответить
СообщениеMaksim156,
[vba]
Код
ActWB.Worksheets.Count
[/vba]
вместо
[vba]
Код
ActWB.Count
[/vba]

Автор - Roman777
Дата добавления - 23.10.2015 в 13:22
Manyasha Дата: Пятница, 23.10.2015, 13:22 | Сообщение № 11
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Maksim156, а что Вы пытаетесь посчитать, количество листов?
[vba]
Код
i_n = ActWB.Sheets.Count
[/vba]
И проверка на количество листов у Вас некорректна, больше листов, чем есть не переименуете :D
[vba]
Код
Private Sub Workbook_Open()
    Dim WB As Workbook
    Dim ActWB As Workbook
    Dim sht As Worksheet
    Dim path1 As String, name1 As String
    Dim namesWS()
    Dim i_n As Long, i As Long
    Set ActWB = ThisWorkbook
    path1 = ActWB.Path
    name1 = "План.xls"
    Workbooks.Open path1 & "/" & name1
    Set WB = ActiveWorkbook
    namesWS = WB.Worksheets(1).[B5:B20].Value2
    WB.Close False
    i_n = WorksheetFunction.Min(ActWB.Sheets.Count, UBound(namesWS, 1))
    For i = 1 To i_n
        If Len(namesWS(i, 1)) >= 31 Then
            MsgBox ("Имя листа не может иметь более 31 символа")
            Exit For
        End If
        ActWB.Worksheets(i).Name = ActWB.Worksheets(i).Name & "_"
        ActWB.Worksheets(i).Name = namesWS(i, 1)
    Next i
End Sub
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеMaksim156, а что Вы пытаетесь посчитать, количество листов?
[vba]
Код
i_n = ActWB.Sheets.Count
[/vba]
И проверка на количество листов у Вас некорректна, больше листов, чем есть не переименуете :D
[vba]
Код
Private Sub Workbook_Open()
    Dim WB As Workbook
    Dim ActWB As Workbook
    Dim sht As Worksheet
    Dim path1 As String, name1 As String
    Dim namesWS()
    Dim i_n As Long, i As Long
    Set ActWB = ThisWorkbook
    path1 = ActWB.Path
    name1 = "План.xls"
    Workbooks.Open path1 & "/" & name1
    Set WB = ActiveWorkbook
    namesWS = WB.Worksheets(1).[B5:B20].Value2
    WB.Close False
    i_n = WorksheetFunction.Min(ActWB.Sheets.Count, UBound(namesWS, 1))
    For i = 1 To i_n
        If Len(namesWS(i, 1)) >= 31 Then
            MsgBox ("Имя листа не может иметь более 31 символа")
            Exit For
        End If
        ActWB.Worksheets(i).Name = ActWB.Worksheets(i).Name & "_"
        ActWB.Worksheets(i).Name = namesWS(i, 1)
    Next i
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 23.10.2015 в 13:22
Roman777 Дата: Пятница, 23.10.2015, 13:27 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Manyasha, Эт я лоханулся. Приношу свои извинения, Maksim156. Мои косяки =(.


Много чего не знаю!!!!
 
Ответить
СообщениеManyasha, Эт я лоханулся. Приношу свои извинения, Maksim156. Мои косяки =(.

Автор - Roman777
Дата добавления - 23.10.2015 в 13:27
SLAVICK Дата: Пятница, 23.10.2015, 13:28 | Сообщение № 13
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
[vba]
Код
i_n = ActWB.Sheets.Count
' Или
i_n = ActWB.Worksheets.Count
[/vba]
Что - то я сплю - тут уже три ответа перед моим появилось %)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Пятница, 23.10.2015, 13:35
 
Ответить
Сообщение[vba]
Код
i_n = ActWB.Sheets.Count
' Или
i_n = ActWB.Worksheets.Count
[/vba]
Что - то я сплю - тут уже три ответа перед моим появилось %)

Автор - SLAVICK
Дата добавления - 23.10.2015 в 13:28
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Переименовать листы при открытии в соответствии с ячейками (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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