Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 当ActiveWorksheet不是源工作表时出现意外错误_Vba_Excel - Fatal编程技术网

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

Vba 当ActiveWorksheet不是源工作表时出现意外错误,vba,excel,Vba,Excel,我有一个带有列标题(第1行)的工作表,每个标题下都有一个1到255个值的数组。我有代码为每个标题创建一个新的工作表,粘贴值(从第2行到第n行,每个标题不同),并将工作表重命名为标题。假设标题标题是有效的图纸名称 当myActiveSheet是Data工作表时,下面的代码工作正常 但是,当我使用不同的ActiveSheet(在同一工作簿中)运行代码时,我会遇到以下错误: 运行时错误1004: 对象的方法范围\u工作表失败 调试器告诉我错误发生在Set src=ws.Range(单元格(2,i),单

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

当my
ActiveSheet
Data
工作表时,下面的代码工作正常

但是,当我使用不同的
ActiveSheet
(在同一工作簿中)运行代码时,我会遇到以下错误:

运行时错误1004: 对象的方法范围\u工作表失败

调试器告诉我错误发生在
Set src=ws.Range(单元格(2,i),单元格(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

发生此错误的原因是
单元格(2,1)
单元格(lastRow,i)
未专门链接到代码中的工作表,因此链接到ActiveSheet。您发出的命令应该在工作表
ws
上创建一个范围,工作表
ActiveSheet
上有单元格。这是不可能的

将其更改为(在
单元格(..)前面添加
ws.

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