2015-10-26 42 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

看到我原來的調整後的代碼 –