2017-02-08 7 views
-1

Я попытался создать макрос, который находится на листе overview. Этот лист должен быть скопирован и переименован в Test 1. Если я вернусь к обзорному листу и снова запустил макрос, новое имя ws должно быть Test 2 и так далее.Excel VBA Macro для копирования рабочего листа и подсчета + 1

Я уже пробовал решения с Count, и если тогда, но он не работает. В настоящее время он работает один раз, а затем он говорит ws уже существует:

Sub CopyWs() 

Dim NewName As String 

ActiveSheet.Copy Before:=ActiveSheet 

NewName = "Test " & WsNo + 1 

WsNo = WsNo + 1 

ActiveSheet.Name = NewName 

End Sub 

ответ

0

Я не уверен, если это то, что вы ищете, но у меня была аналогичная проблема в прошлом, и я использовал следующие методология его решения.

Dim worksheetName As String 
    worksheetName = "Test 1" 
    worksheetNumber = 2 
    CheckName: 
     For Each ws in Sheets 
      ' If the desired worksheet name exists 
      If ws.name = worksheetName Then 
       ' Change the worksheetName to be Test x+1 and increment worksheetNumber 
       worksheetName = "Test " & worksheetNumber 
       worksheetNumber = worksheetNumber + 1 
       GoTo CheckName ' return to the CheckName label and start again 
      End If 
     Next ws 

По сути, то, что мы делаем цикл по каждому листа в текущей книге, и проверки, если любой из них имеют такое же имя, как и тот, который мы хотим вставить. Если они это сделают, мы изменим имя на новое и снова проверим; если нет, у нас есть новое имя.

EDIT: Кроме того, я хотел бы предложить поставить выше код внутри функции, которая принимает имя листа в качестве аргумента, так что вы можете изменить желаемое имя легко, например, так:

Function worksheetName(desiredName As String) As String 
     Dim worksheetName As String 
     worksheetName = desiredName 
     ' rest of code follows ... 
    End Function 

И тогда он может можно назвать так:

NewName = worksheetName("Test") 
Смежные вопросы