Roman777, спасибо, то что нужно, только у меня 200 листов и открытие файла будет занимать значительное время. А если на каждый лист сделать ссылку в ячейку В3 и лист называть этим значением, операция будет выполняться быстрее?
Roman777, спасибо, то что нужно, только у меня 200 листов и открытие файла будет занимать значительное время. А если на каждый лист сделать ссылку в ячейку В3 и лист называть этим значением, операция будет выполняться быстрее?Maksim156
Maksim156, Добрый день! В каком файле у Вас 200 листов? скорость открывания файла будет больше зависеть не в количества листов, а в от общего объёма файла... сколько информации в нём хранится...
Maksim156, Добрый день! В каком файле у Вас 200 листов? скорость открывания файла будет больше зависеть не в количества листов, а в от общего объёма файла... сколько информации в нём хранится...Roman777
Roman777, файл подкрепить не могу (т.к. максимально разрешенной размер файла 100 Кб) он весит около 11,6 Мб, но макрос ведь проверяет и переименовывает каждый лист? Получается чем больше листов, тем он дольше их переименовывает?
Roman777, файл подкрепить не могу (т.к. максимально разрешенной размер файла 100 Кб) он весит около 11,6 Мб, но макрос ведь проверяет и переименовывает каждый лист? Получается чем больше листов, тем он дольше их переименовывает?Maksim156
Maksim156, Макрос вы запускаете из файла 1, если у Вас в файле 1 200 листов, а файл то всё-равно открыт, то макрос отработает быстро. Если у Вас в файле 2, где у Вас прописаны названия листов, 200 листов, то я Вам рекомендую всё же создать 2-й файл, где на 3-ем листе в ячейках B5:B20 будет писаться имя листов... просто не ясна вся картина, поэтому я не знаю, что Вам ответить.
Maksim156, Макрос вы запускаете из файла 1, если у Вас в файле 1 200 листов, а файл то всё-равно открыт, то макрос отработает быстро. Если у Вас в файле 2, где у Вас прописаны названия листов, 200 листов, то я Вам рекомендую всё же создать 2-й файл, где на 3-ем листе в ячейках B5:B20 будет писаться имя листов... просто не ясна вся картина, поэтому я не знаю, что Вам ответить.Roman777
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]
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
Maksim156, а что Вы пытаетесь посчитать, количество листов? [vba]
Код
i_n = ActWB.Sheets.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 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]
Maksim156, а что Вы пытаетесь посчитать, количество листов? [vba]
Код
i_n = ActWB.Sheets.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 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