我有一个带有列标题的工作表(在第1行),在每个标题下面有一个介于1到255之间的值的数组。我有代码为每个标题创建一个新工作表并粘贴值(从第2行开始到第n行,每个标题不同)并将工作表重命名为标题标题。假设标题标题是有效的表格名称。
当我的ActiveSheet
是Data
工作表时,以下代码可以正常工作。
但是,当我使用不同的ActiveSheet
(在同一工作簿中)运行代码时,我收到此错误:
Run-time error 1004:
Method Range’ of object ‘_Worksheet failed
调试器告诉我错误发生在Set src = ws.Range(Cells(2, i), Cells(lastRow, i))
行上。为什么会出现此错误?
Sub MakeNewWorksheets()
Dim wb As Workbook
Dim ws As Worksheet
Dim target As Worksheet
Dim i As Long
Dim s As String
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Data")
For i = 1 To ws.UsedRange.Columns.Count
s = ws.Cells(1, i)
If Not SheetExists(s, wb) Then
Set target = wb.Sheets.Add(, wb.Worksheets(wb.Worksheets.Count))
target.Name = s
Else
Set target = wb.Worksheets(s)
End If
' Find data from front sheet
Dim src As Range
Dim lastRow As Long
lastRow = Cells(Rows.Count, i).End(xlUp).Row
Set src = ws.Range(Cells(2, i), Cells(lastRow, i))
'Debug.Print src.Address
' Set values in target sheet
target.Range("A1:A256").Value = src.Value
Next i
End Sub
答案 0 :(得分:3)
发生此错误是因为Cells(2,1)
和Cells(lastRow, i)
没有专门链接到代码中的工作表,因此链接到ActiveSheet。您提供的命令应在工作表ws
上创建一个范围,其中单元格位于工作表ActiveSheet
上。这是不可能的。
将其更改为ws.
前面的Cells(..)
:
Set src = ws.Range(ws.Cells(2, i), ws.Cells(lastRow, i))