添加以列中的值命名的新工作表,只有它们不存在

时间:2016-02-14 13:26:06

标签: excel vba excel-vba

我正在努力让这段代码正确。我需要为我的工作表A列中列出的每个城市创建一个名为" AllCities"的新工作表,但前提是该城市的名称不作为工作表存在。现在我的代码将运行,但它仍然会添加新的工作表到最后,而不是命名它们,当它应该只添加列中列出的最后几个城市。我目前的代码如下。

D:\cygwin64\bin\mintty.exe /bin/bash -l -c "cd ${workspace_loc}"

1 个答案:

答案 0 :(得分:1)

我发现只是开始处理工作表是否更容易。当在不存在的工作表上尝试时,明智的错误控制将暂停处理,并允许错误控制来创建一个。

Sub CreateSheetsFromAList()
    Dim myCell As Range, myRange As Range

    With Sheets("AllCities")
        Set myRange = Sheets("AllCities").Range("A2")
        Set myRange = .Range(.Cells(2, 1), .Cells(2, 1).End(xlDown))

        For Each myCell In myRange
            On Error GoTo bm_Need_Worksheet
            With Worksheets(myCell.Value)
                'work on the worksheet here
            End With
        Next myCell
    End With

    Exit Sub
bm_Need_Worksheet:
    With Worksheets.Add(after:=Sheets(Sheets.Count))
        'trap an error on bad worksheet name
        On Error GoTo 0
        .Name = myCell.Value
        'prep the worksheet
        .Cells(1, 1).Resize(1, 9).Formula = "=""fld ""&SUBSTITUTE(ADDRESS(1,COLUMN(), 4, 1), 1, """")"
        With ActiveWindow
            .Zoom = 80
            .SplitColumn = 0
            .SplitRow = 1
            .FreezePanes = True
        End With
    End With
    Resume
End Sub

这里的关键是关于陷阱错误的 Resume 语句。它将代码执行带回到抛出错误的行并继续从那里进行处理。