【发布时间】:2017-05-15 22:07:27
【问题描述】:
我有一系列单元格(特别是 D6:D34),其中单元格中的所有值都有相应的工作表。但是,由于我只是在添加新值(或更改单元格值)时手动添加工作表,因此我正在考虑使用Private Sub Worksheet_Change(ByVal Target as Range) 允许在单元格更改时自动创建工作表。这是我尝试使用的,但现在我收到一个错误,即“工作表名称已经存在”,因为它向下查看整个列。我尝试使用错误处理来跳过存在的错误处理,但它最终会移至下一个进行检查,但留下“Sheet1”和“Sheet2”等。关于如何设置它有什么建议吗?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim hlValue As Range
For Each hlValue In Sheets(1).Range("D6:D34")
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = hlValue
Next
End Sub
我还应该说,如果一个单元格值被删除,工作表也应该被删除。某种If CellValue <> Exist, Delete?除了花哨的功能之外,我找不到任何东西可以用来检查它是否存在。我应该使用其中之一吗?
编辑:好的,我现在知道了。这应该足够了。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.DisplayStatusBar = True
Application.ScreenUpdating = False 'Run faster
Application.DisplayAlerts = False 'Just in case
Dim shtName As Variant
For Each shtName In Sheets(1).Range("D6:D34")
If WorksheetExists((shtName)) Then
'do nothing
Else
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = shtName
Application.StatusBar = "Creating new sheet for " & shtName 'Just in case it's running slowly
Sheets("Admin").Select
End If
Next
Application.StatusBar = "READY"
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Function WorksheetExists(sName As String) As Boolean
WorksheetExists = Evaluate("ISREF('" & sName & "'!A1)")
End Function
【问题讨论】: