2017-10-30 5 views
-2

私はVBAと非常によくないんだけど、私は次のことを達成しようとしている:クローンシート、名前を付け、明確な細胞 - エクセルVBA

  • 私はテーブルとシート(50週)を持っています特定の情報と。
  • が同じテーブルを持つ新しいシート(51週目)を作成するボタン(マクロ)が必要な場合は、コンテンツのみをクリアする必要があります(特定の セル範囲)。
  • テーブルの最初の列は前週の数式に基づいている必要があります。これはどのように毎週新しい仕事に適応することができますか?

前の週に基づいてシートをコピーして名前を決定するにはどうすればよいですか?そして、同じマクロでこの新しいシートの特定のセルをクリアするにはどうすればよいですか?

これまでのところ、私はちょうど持っている:そう

Sub New_Week() 
    Worksheets(ActiveSheet.Name).Copy After:=Worksheets(ActiveSheet.Name) 
End Sub 
+1

消去したい内容の範囲はどのくらいですか? –

答えて

0

このコードでは、年間に変化を考慮していないので、あなたは、ワークブックで、すでに52週でそれを実行した場合、それは喜んで週53を作成し、54とに。

現在の週を選択する必要はありません。コードは、Week xxという名前のシートに基づいて最も高い週番号を検索します。
D2:G2とH5:K8の範囲をクリアします。 'Week xx'!へのシート上の参照は、キーボードのCtrl+Hと同じ方法で前週に更新されます。

Sub CreateNewSheet() 

    Dim wrkSht As Worksheet 
    Dim lWkNum As Long 
    Dim lCurNum As Long 
    Dim sht_LastWeek As Worksheet 
    Dim sht_NewWeek As Worksheet 

    'Find previous week and set reference to it. 
    For Each wrkSht In ThisWorkbook.Worksheets 
     If IsNumeric(Replace(wrkSht.Name, "Week ", "")) Then 
      lCurNum = CLng(Replace(wrkSht.Name, "Week ", "")) 
      If lCurNum > lWkNum Then lWkNum = lCurNum 
     End If 
    Next wrkSht 
    Set sht_LastWeek = ThisWorkbook.Worksheets("Week " & lWkNum) 

    'Create new sheet, set reference to it and rename. 
    sht_LastWeek.Copy After:=Sheets(sht_LastWeek.Index) 
    Set sht_NewWeek = Sheets(sht_LastWeek.Index + 1) 
    sht_NewWeek.Name = "Week " & lCurNum + 1 

    'Clear the cells and relink formula to previous sheet. 
    With sht_NewWeek 
     .Range("D2:G2,H5:K8").ClearContents 
     .Cells.Replace What:="'Week " & lCurNum - 1 & "'!", _ 
         Replacement:="'Week " & lCurNum & "'!", _ 
         LookAt:=xlPart 
    End With 

End Sub