当前位置: 首页 > 知识库问答 >
问题:

表数组下标超出范围

寿伟
2023-03-14

我正在创建一个宏,它将从一个更大的工作簿中选择工作表,移动和保存这些工作表作为一个新的工作簿,然后移动到下一个集。

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

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

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
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

循环

共有1个答案

海鸣
2023-03-14

这里需要三样东西:

  1. 在加载每个工作表索引之前重新划分数组,因为现在的方法只是在每个循环上构建,因此从第二个循环开始就会出现下标超出范围错误--因为例如,数组基本上有1 3 5从第一个循环开始,然后有1 3 5从第一个循环开始,然后有1 3 5从第二个循环开始,然后有3 7从第二个循环开始。
  2. 每次设置数组的值。您只设置数组的元素
  3. 限定从哪个工作簿复制工作表,因为每次复制工作表都会将活动工作簿设置为新复制的工作簿。

构建do循环块,如下所示:

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
 类似资料:
  • 问题内容: 我已经开始处理我的第一个Java程序,它是一个简单的计算器,但是我得到一个错误,声称我的数组超出范围。我尝试对其进行调试,以了解这样做的原因和原因,并遵循纸上的代码,两者均显示了我期望和期望的结果。因此,我看不到问题出在哪里。代码不完整。 根据调试器,此行出现错误: 这是我当前拥有的代码的主要部分: 这是我收到的错误消息: 问题答案: 当等于中的最后一个元素索引时,则将大于最后一个元素

  • 非常感谢。最好的问候。

  • 你好,stackoverflow的好人们!我有一个奇怪的问题,我不明白。我要发布我的两个有问题的方法: 另一个: 所以,我正在根据我在网上找到的一些代码制作一个数独解算器。现在,当我试着调试程序时,我可以很好地检查一些行(并且它按照预期工作),但是一旦程序第一次在方法“resi”中调用“next”方法,它就会崩溃,出现数组索引越界异常。如果我只是尝试在不进行调试的情况下运行该程序,那么在同一方法调

  • 问题内容: 我已经声明了我的数组 然后我初始化它的值像 在运行时,它给出错误“数组索引超出范围” 问题答案: 正如评论员@C_X和@MartinR所说,您的数组为空。这是根据需要初始化的方法… …当然,如果您只想零,那么循环现在是多余的!

  • 我正试图从另一个excel文件复制工作表到其中一个工作表,但我得到了一个下标超出范围的错误。此错误来自行'.worksheet(1).usedrange.copy thisworkbook.worksheets(“sheet1”).range(“a1”)‘。

  • 问题内容: 我有一列设置为尝试插入诸如的数字时,它表示超出范围。为什么? 问题答案: 在 MySQL中,An 存储在4个字节上,因此只能包含和之间的值。 大于; 因此它不适合-看起来您将不得不使用 。 有关此信息,请参见MySQL手册的“ 数据类型- 数值类型” 部分 。