2

我一直在使用 VBA 从一些原始数据文件中循环和复制数据。对于每次迭代,我一直在使用以下代码来定义目标范围:

Set destinationRange = WorksheetRange.Cells(2, Columns.Count).End(xlToLeft).Offset(0, 1)

这在第 256 列之前都可以正常工作。在此之后,不是将目标范围设置为第 2 行中的下一个空单元格,而是返回到单元格 (2,2),就好像起始参考单元格 (.Cells(2, Columns.Count)) 在占用范围内,并且.End 方法将返回到占用范围的开头。但这不应该是这种情况,即使在运行时我已经验证 Columns.Count 应该等于 16384。那么为什么代码似乎使用单元格(2,256)作为.Cells(2,Columns.Count)的结果?我还尝试将值添加到超过 256 列的单元格中,以尝试删除任何涉及 Columns.Count 占位符值的行为,但这也不起作用。

感谢对此的任何见解。还值得注意的是,没有运行时错误被触发,复制的数据在到达第 256 列后开始在第 2 列中覆盖。

4

1 回答 1

5

“运行代码的工作表是当前版本的 Excel,但源数据文件是 xl2003”。

可能你被隐含的咬了ActiveSheet

WorksheetRange.Cells(2, Columns.Count).End(xlToLeft).Offset(0, 1)

应该

WorksheetRange.Cells(2, WorksheetRange.Columns.Count).End(xlToLeft).Offset(0, 1)

由于ActiveSheet(xl2003) 只有 256 列,End(xlToLeft)所以在第 256 列之后返回到第 1 列。

于 2021-06-17T18:44:33.133 回答