1

列ヘッダー (行 1) を含むワークシートがあり、各ヘッダーの下に 1 ~ 255 の値の配列があります。見出しごとに新しいシートを作成し、値を貼り付けて (行 2 から行 n まで、ヘッダーごとに異なります)、シートの名前を見出しのタイトルに変更するコードがあります。見出しのタイトルが有効なシート名であると仮定します。

ActiveSheetmyが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
4

1 に答える 1

3

このエラーは、 と がコード内のシートに明確にリンクされておらず、ActiveSheet にリンクされているために発生Cells(2,1)Cells(lastRow, i)ています。あなたが与えるコマンドは、シートws上のセルでシート上の範囲を作成する必要がありますActiveSheet。これは不可能です。

ws.に変更します(の前に追加Cells(..)

Set src = ws.Range(ws.Cells(2, i), ws.Cells(lastRow, i))
于 2013-05-01T11:30:11.083 に答える