Страницы: 1
RSS
Если нет листа с нужным именем, копировать лист-образец и переименовать
 
Всем привет 👋, извините, но тупо не могу догнать, никак не построю конструкцию: нужно пробежаться по всем листам книги и если среди них нет листа с именем, допустим "имя_1" выполнить условие (скопировать лист "образец" и назвать его "имя_1"). Как скопировать и переименовать лист не проблема, а вот как не допустить задвоения листов 🤯. Делать через ошибку? А как? Или есть более изящный способ.
 
да, через ошибку. Присвойте переменной лист (Set Sht = Worksheets("имя_1") ) и если нет ошибки, то удаляйте этот лист

Я иногда делаю проверку на наличие листа так
Код
If SheetExist("Накладная") Then
..что-то делаю
End if

Function SheetExist(iName As String) As Boolean
    On Error Resume Next
    With Worksheets(iName): End With
    SheetExist = (Err = 0)
    Err.Clear
End Function
Изменено: New - 10.09.2020 18:13:50
 
А немного начал понимать, попробую.
Я вот ещё что сейчас задумался, не дай боже круглые тезки 😁
Изменено: Kulibinslovoru - 10.09.2020 18:50:37
 
Код
Sub test()
Dim Rng As Range, iCell As Variant
    
    Set Rng = Range("A1:A10") 'диапазон с фамилиями
    
    For Each iCell In Rng
        If Len(iCell) > 0 Then
            If Not SheetExist(iCell.Value) Then
                Worksheets.Add After:=Worksheets(Worksheets.Count)
                ActiveSheet.Name = iCell.Value
            End If
        End If
    Next iCell
    
    MsgBox "Листы созданы!", vbInformation, "Конец"
End Sub
 
Function SheetExist(iName As String) As Boolean
    On Error Resume Next
    With Worksheets(iName): End With
    SheetExist = (Err = 0)
    Err.Clear
End Function
 
Цитата
Kulibinslovoru написал:
не дай боже круглые тески
- сперва пробежаться и выловить тёзок.
Или в процессе. Но я бы пробежался сперва, сообщил, пускай юзер думает что делать.
Изменено: Hugo - 10.09.2020 18:40:39
 
New, спасибо за помощь, но все равно есть проблема, я работаю с двумя разными книгами.
Пытался так:
Код
Private Sub CBmultilistcreate_Click()
    Dim i As String, diapaz As Range, iCell As Variant, y As Long, _
    j As String, o As String, nStr As Long
    i = ThisWorkbook.Name
    Me.Hide
    Set diapaz = Application.InputBox("Выбирите ячейки!", Type:=8)
    For y = 1 To diapaz.Count
        For Each iCell In diapaz
            If Len(iCell) > 0 Then
                If Not SheetExist(iCell.Value, "рабочие листы.xlsx") Then
                    nStr = Mid(diapaz(y).Address, (InStr(2, diapaz(y).Address, "$") + 1))
                    j = ThisWorkbook.Sheets("Лист1").Cells(nStr, 4).Value & ThisWorkbook.Sheets("Лист1").Cells(nStr, 3).Value
                    o = ThisWorkbook.Sheets("Лист1").Cells(nStr, 7).Value
                    Call CreateList(diapaz(y), j, o)
                End If
            End If
        Next iCell
    Next
    Me.Show
End Sub

Sub CreateList(iName As String, j As String, o As String)
    Windows("рабочие листы.xlsx").Activate
    Sheets("образец листа").Select
    ActiveSheet.Copy after:=ActiveSheet
    ActiveSheet.Name = iName
    Cells(2, 3).Value = iName
    Cells(3, 3).Value = j
    Cells(4, 3).Value = o
End Sub

Function SheetExist(iName As String, iBook As String) As Boolean
    On Error Resume Next
    With Workbooks(iBook).Worksheets(iName): End With
    SheetExist = (Err = 0)
    Err.Clear
End Function

Расширил функцию, но все равно не.

А ещё, я использую несколько вариантов вызрва процедуры копирования листов: из выбранного диапазона, двойной клик по ячейке и из формы (переменные берутся из текст боксов), поэтому отдельная процедура.

Зы. Конечно код "индийский", но я не профессионал, а это больше хобби
 
я без вашего файла плохо понимаю, что вы делаете в своём коде, а так же не понял в чём сейчас у вас проблема. Вы вроде проверяете наличие листа в нужной вам книге. В чём сейчас ошибка?

И ещё вопрос - вы понимаете, что это 2 одинаковых цикла?
Код
    For y = 1 To diapaz.Count
        For Each iCell In diapaz

          'какой-то код
        Next iCell
    Next
 
Ан нет, переделал, спс.
 
)) ничего не понял. Ваш вопрос решён ?)
Изменено: New - 10.09.2020 22:08:36
 
Да, решено. и все как надо заработало
Страницы: 1
Наверх