2017-04-12 38 views
1

我不熟悉vba和宏,我需要帮助创建基于列表的其他工作表。所以我有一个表,第一列的列表,第二列的位置,第8列的Trainer和第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表格(如表格对象本身)或者它只是一个有名称的范围在一个像时尚表一样的表? –

+0

感谢您的迅速响应!它只是表 –

+0

中的一个命名范围。您可以使用'cname.Offset(,1)'将单元格向右移一位。 – SJR

回答

1

我认为这会工作,我重构了一下,以避免GoTo语句,并宣布一些明确的对象适当的错误总是捕捉击败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

非常感谢Scott!无法表达它足够多的我欣赏这一点。 –

相关问题