2015-04-16 2 views
0

Я могу создавать листы, включая его имя, на основе выбранного списка «имен» со следующим кодом (ниже), НО когда это ячейки с повторным именем, это создаст лист без имени и общий «лист ##». Я хочу, чтобы, если имя ячейки повторяется или есть лист уже с этим именем (то же самое), НЕ создайте новый лист.Macro excel для создания новых листов с именами на основе списка, но если повторные не создают

Sub AddSheets() 
Dim cell As Excel.Range 
Dim wbToAddSheetsTo As Excel.Workbook 

Set wbToAddSheetsTo = ActiveWorkbook 
For Each cell In Selection 
With wbToAddSheetsTo 
    .Sheets.Add after:=.Sheets(.Sheets.Count) 
    On Error Resume Next 
    ActiveSheet.Name = cell.Value 
    If Err.Number = 1004 Then 
     Debug.Print cell.Value & " already used as a sheet name" 
    End If 
    On Error GoTo 0 
End With 

End Sub 

ответ

1

Проверьте, чтобы увидеть, если таблица существует до его создания:

Public Function WorkSheetExists(SheetName As String, wrkbk As Workbook) As Boolean 
    Dim wrkSht As Worksheet 
    On Error Resume Next 
     Set wrkSht = wrkbk.Worksheets(SheetName) 'Attempt to set reference to worksheet. 
     WorkSheetExists = (Err.Number = 0) 'Was an error generated - True or False? 
     Set wrkSht = Nothing 
    On Error GoTo 0 
End Function 

Затем в коде просто проверить, если он существует до его создания:

Sub AddSheets() 
    Dim cell As Excel.Range 
    Dim wbToAddSheetsTo As Excel.Workbook 

    Set wbToAddSheetsTo = ActiveWorkbook 
    For Each cell In Selection 
     **If Not (WorkSheetExists(cell.Value, wbToAddSheetsTo)) Then** 
      With wbToAddSheetsTo 
       .Sheets.Add after:=.Sheets(.Sheets.Count) 
       On Error Resume Next 
       ActiveSheet.Name = cell.Value 
       If Err.Number = 1004 Then 
        Debug.Print cell.Value & " already used as a sheet name" 
       End If 
       On Error GoTo 0 
      End With 
     **End If** 
    Next cell 

End Sub 
+0

Спасибо! для вашего ответа ... листы раньше не существовали, проблема заключается в том, когда они создают их, потому что в выборе ячеек повторяются «имена», он будет создавать первый тонкий, но следующий (если повторяется) создаст лист "лист ##", который мне не нужен. Принимая во внимание, что я не могу принимать повторяющиеся из выбора, потому что это будет источником для других частей кода, который я создаю ... Должен ли я добавлять рабочие листы в код? – MemeExcelGeeK

+0

Да, добавьте функцию WorkSheetExists либо в отдельный модуль, либо в свой собственный модуль (а не рабочий лист или модуль ThisWorkbook). Затем добавьте две строки (с * на обоих концах) в свой код. Затем он будет работать через ваш список - с первым «именем» он проверяет, существует ли он, что не позволяет ему создать лист. Когда он дойдет до двойного имени, он проверяет, существует ли он снова - на этот раз он не позволит создать лист - ошибка 1004 никогда не произойдет, поскольку она проверяет заранее. –

+0

Отлично! Я работаю над этим. (я новичок в этом) спасибо! – MemeExcelGeeK

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