Excel – macros,复制到新的工作簿不工作的8行的倍数

我试图使用macros代码将.xlsm格式的工作簿中的特定数量的行复制到.csv文件中。 代码工作正常,如果我必须复制7行。 这是7行被复制到.csv文件的屏幕截图。 截图1

当我尝试复制8的倍数的行时,问题就出现了。8行被无限拷贝到工作表的最后,如下所示: 截图2

这是我正在使用的代码。 (7或8行代码保持不变)

For I = Col1 To Last_col - 1 ws.Range(Cells(1, I), Cells(LastRow, I)).Copy Destination:=wsNew.Columns(k1) k1 = k1 + 1 Next I 

*这里k1被初始化为值为1的Long, LastRowvariables的值为7(或8)。 请注意,Col1是要复制的第一列。

我是新的Excelmacros,任何帮助,将不胜感激。

Excel将尝试使用复制的范围填充整个目标范围。

如果源中的行数不是目标行的因子,则确定不可能均匀地执行此操作,只是将源复制一次。

如果源中的行数目标行的因子,那么Excel只是重复来源以填充整个目标区域。

在你的情况下,7不是1048576的因素,所以只有一个副本。 8是1048576的因子,所以制成了131072份。 在1行,2行,4行,16行,32行等的源范围中将出现相同的“重复”。

您的代码可以被重写为:

 For I = Col1 To Last_col - 1 ws.Range(ws.Cells(1, I), ws.Cells(LastRow, I)).Copy Destination:=wsNew.Range(wsNew.Cells(1, k1), wsNew.Cells(LastRow, k1)) k1 = k1 + 1 Next I 

或者你可以避免循环,只使用:

 ws.Range(ws.Cells(1, Col1), ws.Cells(LastRow, Last_col - 1)).Copy wsNew.Range("A1")