我正在努力让这段代码正确。我需要为我的工作表A列中列出的每个城市创建一个名为" AllCities"的新工作表,但前提是该城市的名称不作为工作表存在。现在我的代码将运行,但它仍然会添加新的工作表到最后,而不是命名它们,当它应该只添加列中列出的最后几个城市。我目前的代码如下。
D:\cygwin64\bin\mintty.exe /bin/bash -l -c "cd ${workspace_loc}"
答案 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 语句。它将代码执行带回到抛出错误的行并继续从那里进行处理。