2015-10-26 78 views
3

我正在创建一个宏,它将从较大的工作簿中选择工作表,将这些工作表移动并保存为新工作簿,然后移至下一组。数组下标超出范围

我创建了一个具有开始和结束值(由图纸索引号指定)的伪“数组”。

在完成保存文件的部分之后,但在拉动下一组工作表的循环之前,我遇到“下标超出范围”错误。

以下是我的代码。任何帮助这个错误,将不胜感激。

Dim Start As Integer 
Dim Finish As Integer 
Dim SR As Integer 
Dim SC As Integer 
Dim ER As Integer 
Dim EC As Integer 
SR = 2 
SC = 5 
ER = 2 
EC = 6 
Start = Sheets("REF").Cells(SR, SC).Value 
Finish = Sheets("REF").Cells(ER, EC).Value 
Dim sheetArray() As Double 
Dim i As Integer 
Dim c As Integer 
i = 0 
c = Start 
lastrow = Cells(100, SC).End(xlUp).Row 

Do Until SR = lastrow 

    Do Until c > Finish 
     ReDim Preserve sheetarray (0 to i) 
     i = i + 1 
     c = c + 1 
    Loop 

    Sheets(sheetarray).Copy 
    ActiveWorkbook.SaveAs Filename:= _ XXXXXXXXXXXXXXXXXX 

    C = Start 
    i = 0 
    SR = SR + 1 
    ER = ER + 1 
Loop 

编辑:16:35美国中部

目前,相关的代码块匹配的是上面,通过线lastrow = Cells(100, SC).End(xlUp).Row

做,直到SR = LASTROW

ReDim sheetArray(i) 

Do Until c > Finish 
    ReDim Preserve sheetArray(i) 
    sheetArray(i) = c 
    i = i + 1 
    c = c + 1 

Loop 



Sheets(sheetArray).Copy 
ActiveWorkbook.SaveAs Filename:= _ 
    XXXXXXXXXXXXX 

c = Start 
i = 0 
SR = SR + 1 
ER = ER + 1 

Loop

+1

表索引从1开始 – Sorceri

+0

什么行会给你一个错误? – Yaegz

+0

我在“Sheets(sheetarray).copy”行获取错误,但是在循环运行一次后,创建第一个工作簿。 –

回答

0

这里需要三件事:

  1. 使用ReDim数组加载每个表的索引之前,因为你拥有了它,现在它只会保留建筑在每次循环的方式和这样你会得到Subscript out of range错误开始第二循环 - 因为数组主要有作为示例,从1 3 5开始,然后从1 3 5 3 7开始,从1 3 5开始,然后从3 7开始。
  2. 每次设置数组的值。您只设置阵列的元素
  3. 限定要从哪个工作簿复制工作表,因为每次复制工作表时都会将活动工作簿设置为新复制的工作簿。

建立你的Do Loop块这样的:

Do Until SR = lastrow 

    ReDim sheetArray(0) 'or you can put i here since you set it to zero at the bottom 

    Do Until c > Finish 

     ReDim Preserve sheetArray(i) 
     sheetArray(i) = c 

     i = i + 1 
     c = c + 1 

    Loop 

    Workbooks("myWkb").Sheets(sheetArray).Copy 'where myWkb is the workbook name you need ... you can also use ThisWorkbook (meaning the workbook where the code is running) but this is not best practice 
    ActiveWorkbook.SaveAs Filename:="XXXXXXXXXXXXXXXXXX" 

    c = Start 
    i = 0 
    SR = SR + 1 
    ER = ER + 1 

Loop 
+0

我相信我仍然收到相同的错误。我在“lastrow = Cells ....(xlUp).Row”之后更改了我的代码,以匹配您发布的内容,并且在同一行上得到相同的错误。 此外,它现在不会首次创建我之前获得的一个文件。 –

+0

确保你的变量类型匹配(双精度对整数等) –

+0

我相信我的变量类型匹配,除非我的'sheetArray'不应该是双精度?我试图更改为整数,并将'i'和'c'更改为与数组匹配,并且仍然在同一行上遇到相同的错误。 –

0

,因为我可以看到它,问题是,你只是调整你sheetArray的尺寸,但你不能把任何东西里面。所以基本上,数组内的值都是零。然后你问Excel中复制表(0),这超出了范围,因为张数在1

开始你可以通过你的数组里面写解决这个问题的张指数要复制:

Do Until c > Finish 
    ReDim Preserve sheetarray (0 to i) 
    sheetarray(i) = c ' <~~~~ or something else, according to your goal 
    i = i + 1 
    c = c + 1 
Loop 

ps:最好将sheetArray设置为Integer(不是Double)的数组,因为它的元素是表的索引......但是,即使有双精度,它也应该在数组内容设置正确的情况下工作。

+0

我再次在同一行遇到同样的问题,未能生成我之前使用“破解”代码获得的第一本书。 –

+0

@ A.Hayes您可以请发布调整后的代码吗?我不确定你要放入或放入数组的内容。然而,如果你把它放在它的一些现有的指数,我相信它应该工作,因为我测试了它:) –

+0

看到我原来的调整后的代码 –