Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 在单元格(范围内)更改后创建新工作表_Vba_Excel - Fatal编程技术网

Vba 在单元格(范围内)更改后创建新工作表

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

我有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(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是其他请求的一部分。谢谢你的忽视。