首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel宏运行时错误'9':下标超出范围(在循环内复制)

Excel宏运行时错误'9':下标超出范围(在循环内复制)
EN

Stack Overflow用户
提问于 2017-01-03 11:41:21
回答 3查看 2.7K关注 0票数 3

这是一个简单的宏代码,可以将范围A2从一个工作簿复制到最后一行,然后粘贴到另一个工作簿中。我是个新手,在谷歌上搜索了很多页面,但都帮不上忙。密码贴在下面-

`

代码语言:javascript
复制
Sub TC_Creation_Sample()
Dim aPath As String, aFile As String, bFile As String
Dim FinalRow As Integer, x As Integer

With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
End With

aPath = "C:\temp\"
aFile = aPath & "Config"
bFile = aPath & "TC_Template"
Workbooks.Open (aFile)
Sheets("Config").Activate
'FinalRow = Cells(Rows.Count, "A").End(xlUp).Row
FinalRow = Worksheets("Config").Range("A2").End(xlDown)

For x = 2 To FinalRow
            Worksheets("Config").Range("A" & x).Select
            Selection.Copy
            Workbooks.Open (bFile)
            Worksheets("TestCases").Range("A" & x).Select
            ActiveSheet.Paste
Next x       
End Sub

`

调试结果发现,代码成功复制粘贴A2值.然而,它抛出运行时错误9:下标超出范围。当工作表(“Config”).Range(“A”& x).Select在下一个x之后第二次运行时会发生错误,我不知道是什么导致了这个错误。好心,建议。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-03 11:56:31

这样更好吗?我将您的workbooks分配给了workbook variables,并取出了selectcopy方法。我还添加了.Row,就像其他人建议的那样

代码语言:javascript
复制
Sub TC_Creation_Sample()
    Dim aPath As String, aFile As String, bFile As String
    Dim FinalRow As Long, x As Long
    Dim wbA As Workbook, wbB As Workbook

    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With

    aPath = "C:\temp\"
    aFile = aPath & "Config"
    bFile = aPath & "TC_Template"

    Set wbA = Workbook.Open(aFile)
    Set wbB = Workbooks.Open(bFile)

    FinalRow = wbA.Worksheets("Config").Range("A2").End(xlDown).Row
    'FinalRow = wbA.Worksheets("Config").Cells(Rows.Count, "A").End(xlUp).Row

    For x = 2 To FinalRow
        wbB.Worksheets("TestCases").Range("A" & x).Value = wbA.Worksheets("Config").Range("A" & x)
    Next x
End Sub
票数 1
EN

Stack Overflow用户

发布于 2017-01-03 11:49:58

您尚未将行号分配给FinalRow变量。尝试:

代码语言:javascript
复制
FinalRow = Worksheets("Config").Range("A2").End(xlDown).Row
票数 1
EN

Stack Overflow用户

发布于 2017-01-03 11:58:12

有几点要提。

首先,Excel工作簿可以包含数百万行,但您的代码仅限于32,768行,因为您同时将FinalRowX定义为整数。改用长整数(Dim表示长,FinalRow作为长),以防打开的工作簿中有超过32,000行。

现在讨论错误的原因。当您第二次通过For-Next循环运行代码时,系统会挂起,因为就其而言,活动工作簿是bFile,而且由于bFile上不存在Config选项卡(它在aFile上),它会与您收到的无用错误消息崩溃(因为它找不到正确的选项卡,因为它找错了位置)。

顺便说一句,每次bFile循环触发时,您的代码都会尝试打开( For..Next )。你每次都需要打开文件吗?当然,这只是一个把细节从一张纸复制到另一张纸的案例?

您还应该有一些错误处理。如果aFile不包含Config选项卡,或者bFile不包含TestCases选项卡,代码就会崩溃。我强烈建议您在处理这些实例时进行一些错误处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41442719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档