"Private Sub Worksheet_Change(ByVal Target As Range) If Target.CountLarge > 1 Then Exit Sub If Intersect(Target, Range("A2:N" & Rows.Count)) Is Nothing Then Exit Sub If Target.Row < 3 Then Exit Sub Dim key As String key = Cells(Target.Row, 4).Value If key = "" Then Exit Sub Dim ws As Worksheet On Error Resume Next Set ws = Worksheets(key) On Error GoTo 0 If ws Is Nothing Then Set ws = Worksheets.Add(after:=Sheets(Sheets.Count)) ws.Name = key ' 避免复制合并单元格,只复制第一个单元格 Sheets("汇总表").Range("$A2:$A2,$B2:$N2").Copy ws.Range("A1") Else Dim i As Long i = Application.Match(key, Sheets("汇总表").Range("D:D"), 0) ' 避免复制合并单元格,只复制第一个单元格 Sheets("汇总表").Range("$A2:$A2,$B2:$N2").Offset(i - 1).Resize(1).Copy ws.Range("A1") End If End Sub"运行时错误 "1004" 运行后提示应用程序定义或对象定义错误,修改代码
时间: 2023-12-10 10:42:22 浏览: 217
这个代码中可能存在以下问题:
1. Range("A2:N" & Rows.Count) 中的双引号未被转义,需要改为 Range("A2:N" & Rows.Count).Address。
2. Sheets("汇总表") 中的汇总表名称可能不正确,需要确认名称是否正确。
3. Cells(Target.Row, 4).Value 中的 4 可能不正确,需要确认目标单元格所在列的列号是否正确。
可以尝试修改为以下代码:
```
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.CountLarge > 1 Then Exit Sub
If Intersect(Target, Range("A2:N" & Rows.Count).Address) Is Nothing Then Exit Sub
If Target.Row < 3 Then Exit Sub
Dim key As String
key = Cells(Target.Row, 4).Value
If key = "" Then Exit Sub
Dim ws As Worksheet
On Error Resume Next
Set ws = Worksheets(key)
On Error GoTo 0
If ws Is Nothing Then
Set ws = Worksheets.Add(after:=Sheets(Sheets.Count))
ws.Name = key
' 避免复制合并单元格,只复制第一个单元格
Sheets("汇总表").Range("$A2,$B2:$N2").Copy ws.Range("A1")
Else
Dim i As Long
i = Application.Match(key, Sheets("汇总表").Range("D:D"), 0)
' 避免复制合并单元格,只复制第一个单元格
Sheets("汇总表").Range("$A2,$B2:$N2").Offset(i - 1).Resize(1).Copy ws.Range("A1")
End If
End Sub
```
如果问题仍然存在,请提供更多错误信息和代码上下文。
阅读全文