2017-04-12 19 views
1

私はVBAとマクロに精通していないので、リストに基づいて追加のワークシートを作成する際に助けが必要です。だから私は最初の列、2列目の場所、8列目のトレーナーと11日の開始日のクラスリストを持つテーブルがあります。私はまた、クラスリストのデータを使用してコピーされたタブの名前を変更し、セルE6よく問題は私はどのように場所、トレーナーと各クラスの開始日を取得し、それらをコピーしたタブ(E5のトレーナー、E7のトレーナー、E8の場所)に入れることもできないのですか?vbaテーブル内のリストに基づいてワークシートにタブを追加

私はここにいますこれまでのところがあります。

Sub CreateCATtabs() 
     On Error GoTo GetOut 

     Dim cName As Range, cList As Range 

     Set cList = Sheets("Control").Range("ClassList2017") 

     For Each cName In cList 
      If cName.Value = "" Then GoTo GetOut 

      Sheets("Class Attendance").Copy After:=Sheets(Sheets.Count) 
      With ActiveSheet 
       .Name = cName.Value 
       .Range("E6").Value = cName.Value 

      End With 
     Next cName 
     GetOut: 

    End Sub 
+0

は 'ClassList2017'です。実際のExcelテーブル(Tableオブジェクト自体のように)、または名前付きの範囲だけです。ファッションのような表では? –

+0

迅速な対応に感謝します!テーブル内の名前付き範囲です。 –

+0

'cname.Offset(、1)'を使って、右側のセルを参照することができます。 – SJR

答えて

1

は私がGoToステートメントを避け、いくつかの明示的なオブジェクトを宣言するためにビットをリファクタリングこれが機能すると思います適切なエラーがトラップ常に後藤文を打つ

Option Explicit 

Sub CreateCATtabs() 

    Dim wsControl As Worksheet, wsAttendance As Worksheet 

    Set wsControl = Worksheets("Control") 
    Set wsAttendance = Worksheets("Class Attendance") 

    Dim cName As Range, cList As Range 

    Set cList = wsControl.Range("ClassList2017") 

    For Each cName In cList 

     If cName.Value <> "" Then 

      wsAttendance.Copy After:=Sheets(Sheets.Count) 

      Dim wsCopy As Worksheet 
      Set wsCopy = ActiveSheet 

      With wsCopy 

       .Name = cName.Value 
       .Range("E6").Value = cName.Value 
       .Range("E5").Value = cName.Offset(, 10).Value 'offset is 1 minus the column number 
       .Range("E7").Value = cName.Offset(, 7).Value 
       .Range("E8").Value = cName.Offset(, 1).Value 

      End With 


     Else 

      Exit For 

     End If 

    Next cName 

End Sub 
+0

ありがとう、スコット!どれくらい私がこれを感謝するか十分に表現することはできません。 –

関連する問題