2017-04-19 12 views
0

最初のものが最初です - 私は完全なVBAの初心者です。私がまとめたコードは完全な試行錯誤でした。Excel vbaは水平リストに基づいて既存のワークシートをコピーします

「統計」ワークシートの行6の部門名の水平リストに基づいて、既存のワークシート(「テンプレート」という名前の)のコピーを作成できるようにするコードを作成しようとしています(セルF6)。ドキュメントに含める必要のある新しい部門については、ユーザーは次のセル(G6、H6など)に新しいタイトルを追加するだけで、ボタンを押してvbaを実行すると、新しいタイトルが表示された新しいワークシートが表示されますワークシートのタイトル。

私がこれを行うために必要な理由は、部門データに基づいてパーセンテージを計算するためにINDIRECT関数を使用していて、今後何かを変更する方法を知っているブックを使用する人には頼りたくはありません。 Excel(つまり、既存のワークシートをコピーして貼り付け、名前を変更してリストを適切に更新する)。

私が一緒に置かれているコードは、このです:

Sub New_worksheet() 

Dim j As Integer 
Dim ws As Worksheet 
Dim sh As Worksheet 
Set ws = Sheets("Template") 
Set sh = Sheets("Statistics") 
Set Rng = Cells(6, Columns.Count).End(xlToLeft) 

Application.ScreenUpdating = 0 

For j = 5 To Rng.Column 
Sheets("Template").Copy Before:=sh 
ActiveSheet.Name = sh.Range("6" & j).Value 
Next j 

End Sub 

しかし、私はActiveSheet.Name = sh.Range( "6" & J).Valueの一部の問題を取得します。私はコードの残りの部分で問題を整理したと思いますが、デバッグを続けるので、わかりません。

誰でも助けてください。

+0

マクロレコーダをすばやく使用すると、「範囲」は列の形式である必要があります。 'Range(" A1 ")'となります。 'Range'ではなく' Cells'を使用して既存の処方を維持することができます。 – SJR

答えて

0

範囲では、列と行を定義する必要があります。範囲の代わりにセルを使用できます。 ActiveSheet.Name = sh.Cells(6, j).Value

関連する問題