функция создания нового листа с проверкой имени, при каждом вызове функция должна создать новый лист и присвоить ему имя со следующим доступным индексом
функция входит в состав макроса для обработки нижнего колонтитула Word документа. для выгрузки результата нужно каждый раз при вызове функции создавать новый лист с именем по образцу "Result_"+Index, где Index - следующий доступный номер. при первом вызове функции получаю лист с именем "Result_1"(это правильно), при последующих листы не переименовываются ("Tabelle3", "Tabelle4" etc.) Я новичок и с VBA пока очень на ВЫ. Помогите разобраться в чем моя ошибка.
Код
Function createNewSheetWithPrefix(workbookResult As Workbook) As Worksheet
Dim result As Worksheet
Dim Index As Integer
Index = 1
Worksheets("Tabelle2").Activate
On Error Resume Next
Set result = workbookResult.Worksheets("Result_" + Index)
If result Is Nothing Then workbookResult.Worksheets.Add(, Sheets(Sheets.Count)).Name = "Result_" + CStr(Index)
Index = Index + 1
Set createNewSheetWithPrefix = result
End Function
Function addSheet() As Worksheet
Dim sName As String
Dim i As Long
sName = "List"
i = 1
Set addSheet = ThisWorkbook.Worksheets.Add
Do While i < 100
On Error GoTo errX
addSheet.Name = sName & i
If addSheet.Name = sName & i Then
Exit Function
End If
i = i + 1
Loop
Exit Function
errX:
Resume Next
End Function
Какие косяки(особенности) вижу у себя: 1. Лист добавляется перед активным (может быть Вы хотите в конце). 2. Если создать листы 1-10, потом удалить лист №5 и запустить функцию, то она создаст лист №5, а не лист № 11
AnnaPff, отредактируйте своё сообщение - выделите код и нажмите кнопку:
Скрытый текст
Код
Function createNewSheetWithPrefix(workbookResult As Workbook) As Worksheet
Const sPREXIX As String = "Result_"
Dim Index As Integer
Index = 1
' Worksheets("Tabelle2").Activate
On Error Resume Next
With workbookResult
Do
Err.Clear
With .Worksheets(sPREXIX & Index): End With
If Err <> 0 Then
.Worksheets.Add(, .Sheets(.Sheets.Count)).Name = sPREXIX & Index
Set createNewSheetWithPrefix = .Worksheets(sPREXIX & Index)
Else
Index = Index + 1
End If
Loop Until Err <> 0
End With
End Function
Формула массива (ФМ) вводится Ctrl+Shift+Enter Memento mori