Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于复制图纸的VBA excel代码错误_Vba_Excel - Fatal编程技术网

用于复制图纸的VBA excel代码错误

用于复制图纸的VBA excel代码错误,vba,excel,Vba,Excel,我想要一台复印机把一张纸复印多次。所以我为第一周做了一周的计划。 现在我想要这张纸51次。因此,名称必须以2开头,以52结尾。为了使x到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")

我想要一台复印机把一张纸复印多次。所以我为第一周做了一周的计划。 现在我想要这张纸51次。因此,名称必须以2开头,以52结尾。为了使x到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页面复制的。 有人有想法吗?

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

这是在查找名为“x”的工作表。您可能打算使用
工作表(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

我在:=之后复制最后一张工作表,这样我就知道在哪里可以找到工作表,这样我就可以在下一行对它进行重命名(请记住,工作表的数量将增加1,因此,
.Name
将重命名最后一张工作表)

之前的:=ActiveWorkbook.sheets(“x”)
替换为
之前的:=ActiveWorkbook.sheets(CStr(x))

Sheets(“x”)
whoull查找名为“x”的工作表

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


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

谢谢,我不明白他们指的是他们要复制的工作表的名称。您知道如何获取工作表的索引,并将其作为输入名称吗?Ripster这不起作用。因为Sheets(x)如Andy G所说,引用工作表的索引。这些索引必须是我要复制的工作表的索引。我以前考虑过更多:=ActiveWorkbook.Sheets(1)ActiveSheet.Name=“x”但是thsi不起作用你想做什么还不清楚。Andy G和我说了完全相同的话。我会更新我的代码,尝试解释我认为你在问什么,但我还是不清楚。
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