2

我想要一台复印机多次复印一张纸。所以我为第一周做了一周计划。现在我想要这张纸51次。所以名称必须以 2 开头并以 52 结尾。为了使 x To y 可以正常工作,我编写了以下代码:

   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

当我执行这个时,它给出了一个错误:“执行期间错误 9。下标超出范围。” (我翻译它是因为我有荷兰语 Excel。)

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

4

5 回答 5

2

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

Sheets("x")谁会寻找完全命名为“x”的工作表

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

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

于 2013-07-17T13:08:25.897 回答
2
Before:=ActiveWorkbook.Sheets("x")

这是在寻找一张名为“x”的工作表。您可能已经打算Sheets(x)通过索引号引用工作表。但是,这不会为工作表命名 - 您还没有此代码。

于 2013-07-17T12:16:54.767 回答
1

在您的代码中,您使用了“x”,它是一个字符串。如果要使用 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
于 2013-07-17T12:15:34.047 回答
0

This macro will copy sheet "1" to sheets "2" to whatever....

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

I copy After:= the final sheet, so I know exactly where to find the sheet, so I can rename it in the next line (remember that the count of sheets will have increased by 1, so the .Name will rename the final sheet)

于 2013-07-17T12:56:27.867 回答
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。

于 2013-07-17T12:53:21.630 回答