VBA excel代码用于复制工作表错误

时间:2013-07-17 12:12:08

标签: excel vba excel-vba

我希望复印机多次复印一张纸。所以我已经计划了第一周的一周计划。 而现在我想要这张51更多次。因此,名称必须从2开始,以52结束。为了使这适用于x我做了以下代码:

   Sub Copier()
   Dim a As Integer
   Dim b As Integer

   a = InputBox("Enter begin number for making copy's")
   b = InputBox("Enter end number for making copy's")

   For x = a To b
      'Loop to make x number copies.
      ActiveWorkbook.ActiveSheet.Copy _
         Before:=ActiveWorkbook.Sheets("x")
         'The name of every copied sheet is a number.
   Next
End Sub

执行此操作时,会出现错误:“执行期间出错。下标超出范围。” (我翻译它是因为我有荷兰语Excel。)

我看不出有什么问题,因为此代码是从Microsoft页面复制的。 有人有想法吗?

5 个答案:

答案 0 :(得分:2)

Before:=ActiveWorkbook.Sheets("x")

这是寻找名为“x”的工作表。您可能打算Sheets(x),它的索引号是指工作表。但是,这不会命名工作表 - 您还没有此代码。

答案 1 :(得分:2)

Before:=ActiveWorkbook.Sheets("x")替换为Before:=ActiveWorkbook.Sheets(CStr(x))

Sheets("x")可以查找名为“x”的表格

Sheets(x),如果x不是字符串类型,则应查找索引为x

的工作表

Sheets(CStr(x)),确保您查找名为x的工作表。

答案 2 :(得分:1)

在您的代码中,您使用的是“x”,这是一个字符串。如果要将x用作索引,则需要使用它而不使用引号。

修改

使用x作为工作表索引:

ActiveWorkbook.ActiveSheet.Copy Before:=ActiveWorkbook.Sheets(x)

使用工作表的名称获取其索引:

ActiveWorkbook.ActiveSheet.Copy Before:=ActiveWorkbook.Sheets(Sheets("Sheet1").Index)

使用张数作为索引:

ActiveWorkbook.ActiveSheet.Copy Before:=ActiveWorkbook.Sheets(Sheets.Count)

如果您在复制后尝试更改工作表的名称,则需要添加执行此操作的代码。

示例:

ActiveWorkbook.ActiveSheet.Copy Before:=ActiveWorkbook.Sheets(Sheets.Count)
ActiveSheet.Name = x

答案 3 :(得分:0)

我想要完成的是:

Sub Copier()
   Dim a As Integer
   Dim b As Integer
   Dim c As String

   c = InputBox("Name of Sheet")
   a = InputBox("Enter begin number for making copy's")
   b = InputBox("Enter end number for making copy's")


   For x = a To b
      'Loop to make x number copies.
      ActiveWorkbook.ActiveSheet.Copy _
         Before:=ActiveWorkbook.Sheets(c)


   Next
End Sub

我现在唯一想要的是复制的表格的名称变为x。

答案 4 :(得分:0)

这个宏将表单“1”复制到表单“2”到任何....

Option Explicit

Sub MakeExtraWeeks()
Dim q As Long
Dim i As Long

q = InputBox("How Many extra weeks?")

For i = 2 To q
    Worksheets("1").Copy After:=Worksheets(Worksheets.Count)
    Worksheets(Worksheets.Count).Name = CStr(i)
Next i
End Sub

我复制了After:=最终的工作表,所以我确切知道在哪里找到工作表,所以我可以在下一行重命名它(请记住,工作表的数量会增加1,所以{{ 1}}将重命名最终的工作表)