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

时间:2017-01-03 11:41:22

标签: excel-vba macros vba excel

这是一个简单的宏代码,用于将范围A2复制到一个工作簿的最后一行,并将其粘贴到另一个工作簿中。我是一个新手,谷歌搜索了许多页面,但没有帮助自己。代码粘贴在下面 -

`

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:下标超出范围。当工作表(“配置”)。范围(“A”和& x).Select在Next x之后第二次运行时,会发生错误。我不确定是什么导致了这个错误。请保佑。

3 个答案:

答案 0 :(得分:1)

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

FinalRow = Worksheets("Config").Range("A2").End(xlDown).Row

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

要提到的一些要点。

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

现在找出错误的原因。当您通过For-Next循环第二次运行代码时,系统会挂起,因为就其而言,活动工作簿是bFile,并且因为bFile上不存在配置选项卡(它出现在aFile上,它会因你收到的无用错误消息而崩溃(因为它无法找到正确的标签,因为它看错了地方)。

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

您还应该有一些错误处理。如果aFile不包含配置选项卡,或者bFile不包含TestCases选项卡,则代码将崩溃。我强烈建议您使用一些错误处理来处理这些实例。