Excel Visual Basic复印表

我的目标是创build一段代码,为数组中的每个string创build一个模板表的副本 – 重命名复制的表以匹配string。

这是我第一次使用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 

您尚未定义ActiveWorkbook.Sheets(previousSheet)因此无法find它。 从本质上讲,您正在要求Excel查找尚未创build的工作表,因此无法find。

相反,你可以尝试…

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

…然后重新命名该表,如您所见。

代码将是这样的。

 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