2017-12-07 4 views
0

ワークシート "ProjList"のリストに基づいて可変数のワークシートを作成するためのマクロを作成しました。各シートは作成時に名前が付けられます。私はいくつかのセル(列A〜D)の値を "ProjList"から新しいシートにコピーしようとしています。私はペーストコマンドを使って正常に処理しましたが、データを転置します。PasteSpecial Transposeに関する問題

私が書いた:

Sub AddWorkSheets() 
    Dim RowNumb As Long 
    Dim LastRow As Integer 
    LastRow = Worksheets("ProjList").Cells(Worksheets("ProjList").Rows.Count, "D").End(xlUp).Row 

    For RowNumb = 2 To LastRow 
     Sheets("ProjList").Activate 
     Worksheets("ProjList").Range("A" & RowNumb, "D" & RowNumb).Copy 
     Sheets.Add 
     ActiveSheet.Name = Worksheets("ProjList").Cells(RowNumb, 4).Value 
     ActiveSheet.Move After:=Sheets(ActiveWorkbook.Sheets.Count) 
     ActiveSheet.Range("D1").PasteSpecial Paste:=xlPasteValues, transpose:=True 
    Next RowNumb 
End Sub 

を私は

を取得

RunTime Error 1004: PasteSpecial method of range class failed.

最初のワークシートが作成されますが、マクロはPasteSpecialラインで失敗します。

ご迷惑をおかけして申し訳ありません。
ありがとうございます!

+0

だけ注意を:あなたがする必要があるなぜあなたが知っている限り、私は 'Integer'を使用することを決してお勧めしません。代わりに(特に 'Long'を使用してください)(https://stackoverflow.com/a/26409520/3219613)、行数に特に注意してください。 Excelは 'Integer'よりも多くの行を扱えます! –

答えて

0

これを試してみてください。

ActiveSheet.Range("D1").Resize(, 4).PasteSpecial Paste:=xlPasteValues, transpose:=True 

が怒鳴る、このコードを試してみてください。

Sub AddWorkSheets() 
    Dim RowNumb As Long 
    Dim LastRow As Integer 
    LastRow = Worksheets("ProjList").Cells(Worksheets("ProjList").Rows.Count, "D").End(xlUp).Row 

    For RowNumb = 2 To LastRow 
     Sheets("ProjList").Activate 
     Sheets.Add 
     ActiveSheet.Name = Worksheets("ProjList").Cells(RowNumb, 4).Value 
     ActiveSheet.Move After:=Sheets(ActiveWorkbook.Sheets.Count) 
     ActiveSheet.Range("D1").Resize(, 4) = Application.WorksheetFunction.Transpose(Worksheets("ProjList").Range("A" & RowNumb, "D" & RowNumb)) 
    Next RowNumb 
End Sub 
+0

こんにちはAtik、私はそれを試みたが、同じエラーが発生しました:RangeクラスのPasteSpecialメソッドが失敗しました。 – smRed

+0

ワークシートを作成し、4つのセル(D1:G1)の範囲を選択しましたが、何も貼り付けられませんでした。 – smRed

+0

上記の私の答えの編集された部分を参照してください – Atik