2017-04-12 64 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!無法表達它足夠多的我欣賞這一點。 –

相關問題