Страницы: 1
RSS
Почему при выполнении макроса вылетает ошибка?
 
Здравствуйте!  
Подскажите, пожалуйста, что у меня не так написано. Весь макрос о-о-о-о-очень длинный, но там все работает хорошо. Сегодня добавила вот эту часть (завершение):  
 
For Each sh In ActiveWorkbook.Worksheets  
sh.Name = sh.Range("F1").Value  
Range("F1").Select  
   Application.CutCopyMode = False  
   Selection.ClearContents  
   Range("A1").Select  
Next  
End Sub  
 
Цель: переименовать каждый лист открытой книги (листов всегда разное количество) в значение ячейки F1 на этом же листе.  
Макрос работает, листы переименовывает, но выдает ошибку на    
sh.Name = sh.Range("F1").Value  
 
Почему так происходит? Где ошибка?
 
Забыла дописать, после переименования макрос удаляет значение в ячейках F1 :)
 
Причин множество, когда этот код может выдать ошибку.  
 
Например:  
1) ячейка F1 пустая  
2) ячейка F1 содержит текст длиннее 31 символа  
3) ячейка F1 содержит символы, недопустимые в имени листа  
 
перед строкой For Each sh In ActiveWorkbook.Worksheets  
добавьте строку  
On Error Resume Next    
 
и посмотрите, какие из листов не переименуются (временно убрав очистку ячейки F1)  
 
 
Ну или так сделайте:  
 
 
Sub test()  
   On Error Resume Next  
   For Each sh In ActiveWorkbook.Worksheets  
       Err.Clear: sh.Name = sh.Range("F1").Value  
       If Err = 0 Then  
           sh.Range("F1") = ""    ' очистка ячейки (обратите внимание: sh.Range("F1") а не Range("F1"))  
       Else  
           MsgBox "Не удалось присвоить имя «" & sh.Range("F1") & "» листу «" & sh.Name & "»", vbExclamation  
       End If  
   Next  
End Sub
 
Спасибо большое, EducatedFool!  
Сначала я добавила эту строчку, но лист вообще стал удаляться. А потом попробовала ваш макрос, и он мне выдал, что у меня 3 листа не переименовываются! Там просто в ячейках такое же название стояло, как лист называется. Оказалось, что 2 строки скрыто, и я в F3 вставила нужное название, а в F1 было пусто ))  
Огромное вам СПАСИБО!!!
Страницы: 1
Читают тему
Наверх
Loading...