我有一個單元格範圍(特別是D6:D34),其中單元格中的所有值都有一個相應的工作表。但是,由於我在添加新值(或更改單元格值)時只是手動添加工作表,因此我正考慮使用Private Sub Worksheet_Change(ByVal Target as Range)
來允許在單元更改時自動創建工作表。這是我試圖使用的,但現在我得到一個錯誤,「表名已經存在」,因爲它向下看整列。我嘗試過使用錯誤處理來跳過存在的錯誤處理,但它最終會移動到下一個檢查,但將「Sheet1」和「Sheet2」等離開。關於如何設置它的任何建議?使用Worksheet.Change事件來添加一個新工作表
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
感謝您的解釋,大衛!對此,我真的非常感激。我個人喜歡錯誤處理的利用,所以我絕對不會皺眉。 – dwirony