2016-07-06 5 views
0

Создал следующий код, чтобы создать несколько листов на основе ввода и переименовать их. При открытии документа будут два таблички с надписью «General» и «P-1», где «P-1» служит в качестве шаблона.Создайте ряд рабочих листов и переименуйте их

Проблема заключается в том, что всякий раз, когда я запускаю макрос и вводим число, я получаю сообщение об ошибке, сообщающее мне, что имя уже назначено.

Sub KlickME() 
Dim Rng As Range 
Dim WorkRng As Range 
Dim newName As String 
Dim convert As Integer 
Dim i As Integer 
Dim b As Integer 


newName = "P-" 


howMany = Application.InputBox("Many", "How Many", "", Type:=2) 
convert = CInt(howMany - 1) 



For i = 1 To convert 
    Sheets("P-1").Copy After:=Sheets("P-1") 

    For b = 1 To Application.Sheets.Count 
     Application.Sheets(b).name = newName & b 
    Next b 
Next i 


End Sub 

Всякий раз, когда я запускаю макрос без листа «Общие» и только «Р-1» рабочего листа настоящее время она работает без каких-либо проблем.

+1

Шаг через код и увидеть ошибки путей ваших. С каждым добавленным листом вы просматриваете все листы и назначаете им имена, которые уже используются. Проверьте свой внутренний цикл и переместите его за пределы цикла, который создает листы. – teylyn

+0

Какая глупая ошибка, спасибо! –

ответ

0

Хорошо, поэтому для всех заинтересованных, я решил проблему. Может быть, немного нетрадиционным, но он делает то, что он должен делать. Пожалуйста, смотрите код ниже:

Sub KlickME() 
Dim Rng As Range 
Dim WorkRng As Range 
Dim newName As String 
Dim convert As Integer 
Dim i As Integer 
Dim b As Integer 

newName = "P-" 


howMany = Application.InputBox("Many", "How Many", "", Type:=2) 
convert = CInt(howMany - 1) 



For i = 1 To convert 
    Sheets("P-1").Copy After:=Sheets("P-1") 
Next i 

For b = 2 To Application.Sheets.Count 
     Set Sheet = ActiveWorkbook.Worksheets(b) 
     If Sheet.name <> "P-1" Then 
      Application.Sheets(b).name = newName & b - 1 
     End If 
Next b 

End Sub 
1

Я взял новый код и сделал его немного короче:

Sub KlickME() 

Dim howmany As Integer 
Dim i As Integer 

howmany = Application.InputBox("Many", "How Many", "", Type:=2) 

For i = 1 To howmany 

    Sheets("P-1").Copy After:=Sheets(Sheets.Count) 'Inserts sheet on last position 

    Sheets(Sheets.Count).Name = "P-" & i + 1 'renames sheet on last position 
Next i 
End Sub 
+1

приятно :) спасибо! –

Смежные вопросы