当ActiveWorksheet不是源工作表时意外的错误

我有一个带有列标题的工作表(在第1行),在每个标题下有一个介于1和255之间的值。 我有代码为每个标题创build一个新的工作表,并粘贴值(从第2行到第n行,每个标题不同),并重新命名为标题标题。 假设标题标题是有效的工作表名称。

下面的代码工作正常时,我的ActiveSheetData工作表。

但是,当我用不同的ActiveSheet (在同一工作簿内)运行代码时,出现此错误:

Run-time error 1004: Method Range' of object '_Worksheet failed

debugging器告诉我,错误发生在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 

发生此错误的原因是Cells(2,1)Cells(lastRow, i)未特别链接到代码中的表单,因此链接到ActiveSheet。 你给的命令应该在工作表上用单元格在工作表上创build一个范围。 这不可能。

将其更改为(在Cells(..)前添加ws.

 Set src = ws.Range(ws.Cells(2, i), ws.Cells(lastRow, i))