excel 将单元格中的数据复制到创建的工作表中

ecfdbz9o  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(149)

我的代码应该创建额外的工作表,并根据单元格中的数据相应地复制数据。

Sub create_category()

Dim cell As Range
Dim wsname As Worksheet
Dim test As Boolean

For Each cell In Sheets("Data").Range("d4", Range("d" & Rows.Count).End(xlUp))
    test = False

    For Each wsname In ThisWorkbook.Sheets
        If wsname.name = cell Then test = True
    Next wsname
    
    If test = False Then Sheets.Add after:=Sheets(Sheets.Count)
    ActiveSheet.name = cell
        
    Sheets(cell.name).Range("d3").End(xlDown).Offset(1, 0) = cell         
Next cell

Sheets("Data").Select

End Sub

程序一直执行,直到我在Next cell之前添加了一行代码。
错误1004显示在For Each cell IN Sheets("Data").Range.....上。
将使用与单元相同的名称创建图纸。我想复制与工作表同名的单元格到工作表中,因此我使用cell.name

ryevplcw

ryevplcw1#

当你写

Sheets("Data").Range("d4", Range("d" & Rows.Count).End(xlUp))

安装程序将尝试在您的工作表“数据”上创建一个范围。范围的开始是单元格D4。对于Range的末尾,您可以写Range("d" & Rows.Count).End(xlUp),但您不告诉Toshiba您希望从哪个工作表访问此单元格。虽然这对你来说似乎是显而易见的,但对你来说却不是。它将从活动工作表中读取单元格,这将导致无效的范围定义,并返回1004。

**每次 * 访问RangeCells时,始终指定要在哪个工作表上工作。

我建议使用中间变量,使其更容易调试。注意RangeRows前面的点(.)。

Dim lastCell as Range, dataRange as Range
With ThisWorkbook.Sheets("Data")
    Set lastCell = .Range("d" & .Rows.Count).End(xlUp)
    Set dataRange = .Range("D4", lastCell)
End With
For Each cell in dataRange
    ...
Next cell

更新您下面的代码也有问题。将循环更改为

For Each cell In dataRange
    Dim ws As Worksheet
    Set ws = getWorksheet(cell.Value)
    ws.Range("d3").End(xlDown).Offset(1, 0) = cell.Value
Next cell

并添加以下函数

Function getWorksheet(sheetname As String) As Worksheet
    On Error Resume Next
    Set getWorksheet = ThisWorkbook.Sheets(sheetname)
    On Error GoTo 0
    If getWorksheet Is Nothing Then
        Set getWorksheet = ThisWorkbook.Worksheets.Add
        getWorksheet.Name = sheetname
    End If
End Function

但我不确定逻辑:当前的代码将把工作表的名称(cell.Value)写入工作表-我怀疑这是您想要的。

相关问题