【问题标题】:Excel Visual Basic Copy SheetExcel Visual Basic 复印表
【发布时间】:2017-06-20 17:26:02
【问题描述】:

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

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

【问题讨论】:

    标签: vba excel


    【解决方案1】:

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

    你可以试试……

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

    ...然后根据需要重命名工作表。

    【讨论】:

      【解决方案2】:

      代码应该是这样的。

      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
      

      【讨论】:

        猜你喜欢
        • 2015-10-30
        • 1970-01-01
        • 2013-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-09
        • 1970-01-01
        相关资源
        最近更新 更多