【问题标题】:Macro excel to create new sheets with names based on a list BUT if repeated do not create宏 excel 以基于列表创建名称的新工作表,但如果重复则不创建
【发布时间】:2015-06-23 02:02:37
【问题描述】:

我可以使用以下代码(如下)根据选定的“名称”列表创建包含其名称的工作表,但是当有重复名称的单元格时,它将创建一个没有名称的工作表和通用的“工作表##”。我希望如果单元格名称重复或者已经有一个具有该名称的工作表(相同的东西)不要创建一个新工作表。

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

【问题讨论】:

    标签: list excel conditional createprocess vba


    【解决方案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
    

    【讨论】:

    • 谢谢!对于您的答案,...以前不存在工作表,问题是当它创建它们时,因为在单元格选择中有重复的“名称”,它将创建第一个罚款,但下一个(如果重复)将创建我不需要的工作表“工作表##”。考虑到我不能从选择中取出重复的部分,因为这将是我正在创建的代码的其他部分的来源......我应该在代码中添加工作表吗?
    • 是的,在单独的模块或它自己的模块(不是工作表或 ThisWorkbook 模块)中添加 WorkSheetExists 函数。然后将这两行(两端带有 *)添加到您的代码中。然后它将通过您的列表工作 - 使用第一个“名称”它将检查它是否存在,它不存在因此它将允许创建工作表。当它得到一个重复的名称时,它将检查它是否再次存在 - 这次它这样做是因为它不允许创建工作表 - 错误 1004 永远不会发生,因为它会预先检查。
    • 太棒了!我正在做。 (我是新手)谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    相关资源
    最近更新 更多