ActiveWorksheet不是源工作表时出现意外错误

时间:2013-05-01 11:23:41

标签: excel vba excel-vba

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

当我的ActiveSheetData工作表时,以下代码可以正常工作。

但是,当我使用不同的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

1 个答案:

答案 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))