Vba 在单元格(范围内)更改后创建新工作表
我有A2到A20单元 希望在该范围内的单元格值更改时生成新工作表 此外,生成的新工作表将重命名为已更改单元格的值 我让这段代码正常工作(对于单个单元格),直到用户请求范围为止Vba 在单元格(范围内)更改后创建新工作表,vba,excel,Vba,Excel,我有A2到A20单元 希望在该范围内的单元格值更改时生成新工作表 此外,生成的新工作表将重命名为已更改单元格的值 我让这段代码正常工作(对于单个单元格),直到用户请求范围为止 Private Sub Worksheet_Change(ByVal Target As Range) Dim KeyCells As Range Dim ws As Worksheet Dim lastrow As Long lastrow = ActiveSheet.Cells(Rows.Count, "D").End
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Dim ws As Worksheet
Dim lastrow As Long
lastrow = ActiveSheet.Cells(Rows.Count, "D").End(xlUp).Row + 1
Set KeyCells = Range("B5")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
For Each ws In Worksheets
With ActiveSheet
If .Range("B5").Value <> "" Then .Name = .Range("B5").Value
End With
Cells(lastrow, "D").Value = Range("B5").Value
End If
Private子工作表\u更改(ByVal目标作为范围)
暗淡的关键单元格作为范围
将ws设置为工作表
最后一排一样长
lastrow=ActiveSheet.Cells(Rows.Count,“D”).End(xlUp)。Row+1
设置关键单元=范围(“B5”)
如果不是应用程序.Intersect(关键单元格,范围(目标地址))_
那就什么都不是了
对于工作表中的每个ws
使用ActiveSheet
如果.Range(“B5”).Value“”,则.Name=.Range(“B5”).Value
以
单元格(最后一行,“D”)。值=范围(“B5”)。值
如果结束
End Sub下面的代码创建一个新的工作表,一旦
范围内的值(“A2:A20”)
发生更改,新工作表名称等于单元格值
该代码还验证不存在具有该名称的现有工作表(这将导致错误)
代码
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Dim ws As Worksheet
Dim lastrow As Long
' you are not doing anything currently with the last row
'lastrow = ActiveSheet.Cells(Rows.Count, "D").End(xlUp).Row + 1
' according to your post you are scanning Range A2:A20 (not B5)
Set KeyCells = Range("A2:A20")
If Not Intersect(KeyCells, Target) Is Nothing Then
For Each ws In Worksheets
' if sheet with that name already exists
If ws.Name = Target.Value Then
MsgBox "A Worksheet with Cell " & Target.Value & " already exists"
Exit Sub
End If
Next ws
Set ws = Worksheets.Add
ws.Name = Target.Value
End If
End Sub
完美的谢谢lastrow和A2:A20是其他请求的一部分。谢谢你的忽视。