将单元格从工作簿复制到工作簿结果"下标超出范围"

时间:2016-04-22 02:04:07

标签: excel vba excel-vba copy range

美好的一天。

我正在尝试编写一个基本上从" A - M"中选择单元格(从左到右)的代码。和(向下)直到最后一次使用的行 然后,一旦被选中,我就将它们复制到另一本工作簿中。

这是我尝试使用的代码:

 3 * ( ($i + $j * 2 ) % 3 > 0 ) - ( ( $i + $j * 2 ) % 3 )       $i  $j
 --------------------------------------------------------
 3 * ( ( 0 +  0 * 2 ) % 3 > 0 ) - ( (  0 +  0 * 2 ) % 3 )        0   0
 3 * ( (          0 ) % 3 > 0 ) - ( (           0 ) % 3 )      
 3 * (                      0 ) - (                   0 ) =  0

 3 * ( ( 0 +  1 * 2 ) % 3 > 0 ) - ( (  0 +  1 * 2 ) % 3 )        0   1
 3 * ( (          2 ) % 3 > 0 ) - ( (           2 ) % 3 )      
 3 * (                      1 ) - (                   2 ) =  1

 3 * ( ( 0 +  2 * 2 ) % 3 > 0 ) - ( (  0 +  2 * 2 ) % 3 )        0   2
 3 * ( (          4 ) % 3 > 0 ) - ( (           4 ) % 3 )      
 3 * (                      1 ) - (                   1 ) =  2
 --------------------------------------------------------
 3 * ( ( 1 +  0 * 2 ) % 3 > 0 ) - ( (  1 +  0 * 2 ) % 3 )        1   0
 3 * ( (          1 ) % 3 > 0 ) - ( (           1 ) % 3 )      
 3 * (                      1 ) - (                   1 ) =  2

 3 * ( ( 1 +  1 * 2 ) % 3 > 0 ) - ( (  1 +  1 * 2 ) % 3 )        1   1
 3 * ( (          3 ) % 3 > 0 ) - ( (           3 ) % 3 )      
 3 * (                      0 ) - (                   0 ) =  0

 3 * ( ( 1 +  2 * 2 ) % 3 > 0 ) - ( (  1 +  2 * 2 ) % 3 )        1   2
 3 * ( (          5 ) % 3 > 0 ) - ( (           5 ) % 3 )      
 3 * (                      1 ) - (                   2 ) =  1
 --------------------------------------------------------
 3 * ( ( 2 +  0 * 2 ) % 3 > 0 ) - ( (  2 +  0 * 2 ) % 3 )        2   0
 3 * ( (          2 ) % 3 > 0 ) - ( (           2 ) % 3 )      
 3 * (                      1 ) - (                   2 ) =  1

 3 * ( ( 2 +  1 * 2 ) % 3 > 0 ) - ( (  2 +  1 * 2 ) % 3 )        2   1
 3 * ( (          4 ) % 3 > 0 ) - ( (           4 ) % 3 )      
 3 * (                      1 ) - (                   1 ) =  2

 3 * ( ( 2 +  2 * 2 ) % 3 > 0 ) - ( (  2 +  2 * 2 ) % 3 )        2   2
 3 * ( (          6 ) % 3 > 0 ) - ( (           6 ) % 3 )      
 3 * (                      0 ) - (                   0 ) =  0
 --------------------------------------------------------
 3 * ( ( 3 +  0 * 2 ) % 3 > 0 ) - ( (  3 +  0 * 2 ) % 3 )        3   0
 3 * ( (          3 ) % 3 > 0 ) - ( (           3 ) % 3 )      
 3 * (                      0 ) - (                   0 ) =  0

 3 * ( ( 3 +  1 * 2 ) % 3 > 0 ) - ( (  3 +  1 * 2 ) % 3 )        3   1
 3 * ( (          5 ) % 3 > 0 ) - ( (           5 ) % 3 )      
 3 * (                      1 ) - (                   2 ) =  1

 3 * ( ( 3 +  2 * 2 ) % 3 > 0 ) - ( (  3 +  2 * 2 ) % 3 )        3   2
 3 * ( (          7 ) % 3 > 0 ) - ( (           7 ) % 3 )      
 3 * (                      1 ) - (                   1 ) =  2
 --------------------------------------------------------
 (...)

除此行外,代码中的其他所有内容都有效 结果如下:

ActiveWorkbook.Worksheets("Sheet1").Range("A1:M" & LastRow).Copy _
    Workbooks("Converter.xlsm").Worksheets("Sheet1").Range("A1").CurrentRegion

感谢。

PS。 " LastRow"我使用的变量,我只是从教程中提取出来的。这不是个人用户定义的变量,所以我不确定这是否真的来自VBA的文档。

2 个答案:

答案 0 :(得分:0)

您提到您没有LastRow的计算。

  1. 始终将Option Explicit放在模块的顶部。它会强制你声明你的变量,并且会帮助你识别你从另一个编码器得到的东西是否是内置的#34;或不。
  2. 有关确定范围中的最后一行的信息,请参阅this post
  3. 在该帖子中,您应该在代码行之前进行如下计算......

    LastRow = Sheets("Sheet1").Range("A" & Sheets("Sheet1").Rows.Count).End(xlUp).Row
    

答案 1 :(得分:0)

请关闭所有工作簿并重新打开,然后尝试使用以下代码

Sub test()
    Dim lastrow As Long
    lastrow = Range("A" & Rows.Count).End(xlUp).Row
    ActiveWorkbook.Worksheets("Sheet1").Range("A1:M" & lastrow).Copy Workbooks("Converter.xlsm").Worksheets("Sheet1").Range("A1")
End Sub