2017-06-20 75 views
0

我的目标是创建一段代码,为数组中的每个字符串创建一个模板表的副本 - 重命名复制的表以匹配字符串。Excel Visual Basic复制工作表

这是我第一次使用Microsoft Visual Basic for Applications。我在“ThisWorkbook”下添加了我的代码。然而,当我运行的代码,我收到了

下标越界

错误。

Sub generateStationTabs() 
     Dim stringNames() As Variant 
     Dim currentString As String 
     Dim previousSheet As String 

     previousSheet = "Template     " 

     stringNames() = Array("String 1", "String 2", "String 3", "String 4", "String 5", "String 6", "String 7", "String 8", "String 9", "String 10", "String 11", "String 12", "String 13", "String 14", "String 15", "String 16", "String 17", "String 18", "String 19", "String 20", "String 21", "String 22", "String 23", "String 24", "String 25", "String 26", "String 27", "String 28", "String 29", "String 30") 
     For indexVariable = 0 To UBound(stringNames) 
      ' Pad String Name to 20 Characters Length  currentString = Left(stringNames(indexVariable) & Space(8), 20) 
      ' Copy the Template worksheet to after the Previous Sheet 
      ActiveWorkbook.Sheets("Template     ").Copy after:=ActiveWorkbook.Sheets(previousSheet)   
      ' Rename the copied worksheet 
      ActiveWorkbook.ActiveSheet.Name = currentString   
      ' Update the previous sheet 
      previousSheet = currentString 
     Next 

    End Sub 

回答

1

您还没有定义ActiveWorkbook.Sheets(previousSheet)所以它找不到它。实际上,您正在要求Excel查找尚未创建的工作表,因此无法找到。

相反,你可以尝试...

ActiveWorkbook.Sheets("Template ").Copy after:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)

...然后,你认为合适重命名表。

1

代码会是这样的。

Sub generateStationTabs() 
    Dim stringNames() As Variant 
    Dim currentString As String 
    Dim previousSheet As String 

    previousSheet = "Template" 

    stringNames() = Array("String 1", "String 2", "String 3", "String 4", "String 5", "String 6", "String 7", "String 8", "String 9", "String 10", "String 11", "String 12", "String 13", "String 14", "String 15", "String 16", "String 17", "String 18", "String 19", "String 20", "String 21", "String 22", "String 23", "String 24", "String 25", "String 26", "String 27", "String 28", "String 29", "String 30") 
    For i = 0 To UBound(stringNames) 
     ' Pad String Name to 20 Characters Length  currentString = Left(stringNames(indexVariable) & Space(8), 20) 
     ' Copy the Template worksheet to after the Previous Sheet 
     ActiveWorkbook.Sheets("Template").Copy after:=ActiveWorkbook.Sheets(Sheets.Count) 
     ' Rename the copied worksheet 
     ActiveWorkbook.ActiveSheet.Name = stringNames(i) 
     ' Update the previous sheet 
     'previousSheet = currentString 
    Next 

End Sub