繁体   English   中英

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

[英]VBA excel code for copying sheets error

我想让复印机多次复印一张纸。 因此,我已经为第1周制定了一个星期的计划。现在,我希望该工作表再增加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页面复制的。 有人知道吗?

Before:=ActiveWorkbook.Sheets("x")

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

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

Sheets("x")寻找确切命名为“ x”的工作表

Sheets(x) ,如果x不是字符串类型,谁将寻找索引为x的表

Sheets(CStr(x)) ,确保您寻找名为x的图纸。

在您的代码中,您使用了字符串“ 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

我想要完成的是:

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。

此宏会将工作表“ 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,因此.Name将重命名最后一张纸)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM